[精讚] [會員登入]
468

[Rocky9] 負載平衡器Haproxy安裝及設定

負載平衡器Haproxy安裝及設定,這次的範例是透過本機的一個埠背後連到數台資料庫伺服器。

分享此文連結 //n.sfs.tw/16330

分享連結 [Rocky9] 負載平衡器Haproxy安裝及設定@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
最後編修
2024-01-18 23:56:32 By 張○○
 

自動目錄

負載平衡器Haproxy非常的優秀,在我使用的七八年其間中,沒有壞過,說真的我也覺得不可思議。此篇文章和 [Mysql] 建立叢集式資料庫3/4 -- DB1設置及DB PROXY@新精讚 裡介紹的haproxy是同一個東西,但是經過數年其間,我發現設定已有極大的改動。

次的範例是透過本機的監聽3306埠後,透過haproxy背後連到三台資料庫伺服器的3306埠,以達到資料庫的負載平衡,在設定上讓同一個ip來源盡量連到同一台資料庫,同時,資料庫本身因為是叢集的關係,也會同步資料。

系統及安裝

系統

Rocky Linux release 9.2 (Blue Onyx)

HAProxy安裝版本 version 2.4.22-f8e3218 2023/02/14

安裝

# yum install haproxy

安裝完畢先別急著啟動,請先進行下面設定

設定開機啟動

# systemctl enable haproxy

 

HAPROXY設定

編輯設定檔 

# vi /etc/haproxy/haproxy.cfg

global/defaults的部分

只保留以下內容,多餘的刪除

global
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

    # utilize system-wide crypto-policies
    ssl-default-bind-ciphers PROFILE=SYSTEM
    ssl-default-server-ciphers PROFILE=SYSTEM

defaults
    mode                    tcp
    log                     127.0.0.1 local2 warning
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

mysql 的連線改成tcp(原本是http),log的部分加上 warning 以提高記錄等級

proxy的部分設定

haproxy分為前後端 frontend/backend,mysqldb是我取的名稱,並指定到後端的名稱mysqlpool

frontend mysqldb
    bind 127.0.0.1:3306
    default_backend             mysqlpool

backend mysqlpool
    balance     source
    server node1 192.168.1.251:3306 check weight 1
    server node2 192.168.1.252:3306 check weight 1
    server node3 192.168.1.253:3306 check weight 1

平衡的方式,有 roundrobin, static-rr, leastconn, first, source等幾種方式[3]

  roundrobin 由權重輪巡

  static-rr 由權重輪巡,無法動態改變權重外,和 roundrobin相同

  leastconn 連接數最小的優先

  first 先把一台灌爆再換下一台,由id數小的選到最大的

  source 由來源的IP來分組,確保每個IP來源會連到同一個DB

SELINUX的設定[3]

# setsebool -P haproxy_connect_any 1

記得要開啟上面那個開關,否則你會得到下面的錯誤:

 Starting frontend mysqldb: cannot bind socket (Permission denied) [127.0.0.1:3306]
 [/usr/sbin/haproxy.main()] Some protocols failed to start their listeners! Exiting.

以下的錯誤無法解決,但不影響啟動,但確定是selinux的問題。

Cannot read CPUs list of 'node1', will not select them to refine binding
Cannot read CPUs list of 'node0', will not select them to refine binding

啟動

# service haproxy start
# service haproxy stop
# service haproxy restart

 

LOG檔設定

在上面的設定中我在defaluts中加入了這一行:

    log                     127.0.0.1 local2 warning

但是log到底會寫到哪裡?事實上哪裡都沒寫。你必須做以下的設定:

新增檔案 /etc/rsyslog.d/haproxy.conf 內容如下:

# Collect log with UDP
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514

local2.*                       /var/log/haproxy.log

重啟rsyslog

# service rsyslog restart

記錄檔會出現在

/var/log/haproxy.log 內容大概這樣:

Jan 18 22:34:52 localhost haproxy[13370]: Connect from 127.0.0.1:42300 to 127.0.0.1:3306 (mysqldb/TCP)
Jan 18 22:36:06 localhost haproxy[13445]: Connect from 127.0.0.1:51846 to 127.0.0.1:3306 (mysqldb/TCP)

 

 

參考資料

[1] https://serverfault.com/questions/645924/haproxy-logging-to-syslog

[2] https://stackoverflow.com/questions/72163632/haproxy-traffic-logs-into-var-log-haproxy-log

[3] https://www.mankier.com/8/haproxy_selinux

 

END

你可能感興趣的文章

[Linux] 刪除last/lastb登出入記錄 linux shell的登出入記錄

[Centos8] linux 上的Base64加解密指令 在linux上很方便的指令可以加解密 base64

[Centos] 安裝及使用postfix,設定虛擬帳號及轉寄 使用postfix來設定虛擬帳號及轉寄

[Rocky9] 安裝docker 安裝docker

安裝SPHINX支援中文 新版本的 sphinx 和舊版不同,網路上很多範例和教學是不能用的。此文是安裝和設定方法分享

[CENTOS7 8] 查看記憶體 linux 中查看記憶體狀態指令整理

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很

APACHE的記錄檔格式 LogFormat 語法 在APACHE中有定義一些記錄的語法模版 在 /etc/httpd/conf/httpd.conf 中: LogForm

在Centos7 下安裝 Wildfly10 wildfly以前叫JBoss,2014.11.20改名叫Wildfly,起始版本是Wildfly8,現在已經出到Wil

讓radio box 或checkbox 好按 在行動裝置下,radio box及checkbox變得很難按得到

關閉瀏覽器表單的自動完成autocomplete 什麼是自動完成?就是當我們在網頁的輸入文字欄位中打入文字時,瀏覽器會把曾輸入過歷史記錄中找出來讓我們選擇。