HaProxy 實現 MySQL 負載均衡

聞人_發表於2019-01-21

關於 HaProxy

首先來簡單認識一下 HaProxy :一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟體,支援虛擬主機,是免費、快速並且可靠的一種解決方案。HAProxy 的實現基於事件驅動、單一程式模型,類似 Node.js 的程式模型,能夠支撐非常大的併發連線數.

HaProxy 實現 MySQL 負載均衡

安裝配置 HaProxy

以下實驗環境均為 CentOS7 平臺。 還需要兩個 MySQL 例項,埠分別為3311,3312.

1.首先從官網上下載穩定版本 haproxy-1.9.2.tar,通過 FTP 工具傳至伺服器.

HaProxy 實現 MySQL 負載均衡

2.解壓 haproxy-1.9.2.tar,並進入解壓後的資料夾

tar -xvf haproxy-1.9.2.tar && cd haproxy-1.9.2
複製程式碼

3.由於壓縮出來的是 haproxy 的原始檔,所以還需要通過本地編譯安裝

make TARGET=generic   # 指定編譯的目標平臺為通用
make install
複製程式碼

安裝完成之後目錄下檔案就多了一些關於 haProxy 的檔案

HaProxy 實現 MySQL 負載均衡

直接使用指令 haproxy 就是檢查 Haproxy 是否安裝成功.

[root@izm5e2w1juq9po7368cfj1z haproxy-1.9.2]# haproxy
HA-Proxy version 1.9.2 2019/01/16 - https://haproxy.org/
Usage : haproxy [-f <cfgfile|cfgdir>]* [ -vdVD ] [ -n <maxconn> ] [ -N <maxpconn> ]
        [ -p <pidfile> ] [ -m <max megs> ] [ -C <dir> ] [-- <cfgfile>*]
        -v displays version ; -vv shows known build options.
        -d enters debug mode ; -db only disables background mode.
        -dM[<byte>] poisons memory with <byte> (defaults to 0x50)
        -V enters verbose mode (disables quiet mode)
        -D goes daemon ; -C changes to <dir> before loading files.
        -W master-worker mode.
        -q quiet mode : don't display messages
        -c check mode : only check config files and exit
        -n sets the maximum total # of connections (2000)
        -m limits the usable amount of memory (in MB)
        -N sets the default, per-proxy maximum # of connections (2000)
        -L set local peer name (default to hostname)
        -p writes pids of all children to this file
        -dp disables poll() usage even when available
        -dR disables SO_REUSEPORT usage
        -dr ignores server address resolution failures
        -dV disables SSL verify on servers side
        -sf/-st [pid ]* finishes/terminates old pids.
        -x <unix_socket> get listening sockets from a unix socket
        -S <unix_socket>[,<bind options>...] new stats socket for the master
複製程式碼

4.為 HaProxy 新增配置檔案,命名為 haproxy.conf

global
        daemon   # 後臺方式執行
        nbproc 1
        pidfile haproxy.pid
defaults
        mode tcp               #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
        retries 2               #兩次連線失敗就認為是伺服器不可用,也可以通過後面設定
        option redispatch       #當serverId對應的伺服器掛掉後,強制定向到其他健康的伺服器
        option abortonclose     #當伺服器負載很高的時候,自動結束掉當前佇列處理比較久的連結
        maxconn 4096            #預設的最大連線數
        timeout connect 5000ms  #連線超時
        timeout client 30000ms  #客戶端超時
        timeout server 30000ms  #伺服器超時
        #timeout check 2000      #=心跳檢測超時
        log 127.0.0.1 local0 err #[err warning info debug]
        balance roundrobin      # 採用輪詢演算法


################# 配置#################
listen delegate                         #這裡是配置負載均衡,test1是名字,可以任意
        bind 0.0.0.0:3306            #這裡是監聽的IP地址和埠,埠號可以在0-65535之間,要避免埠衝突
        mode tcp                     #連線的協議,這裡是tcp協議
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 localhost:3312 #負載的MySQL例項1
        server s2 localhost:3311 #負載的MySQL例項2 可以有多個,往下排列即
複製程式碼

具體配置引數說明可參考 HaProxy 官網的配置案例

HaProxy 負載演算法 HaProxy 支援多種負載演算法,可以通過在配置檔案中 balance 指定.

  • roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;
  • static-rr,表示根據權重;
  • leastconn,表示最少連線者先處理;
  • source,表示根據請求源IP;
  • uri,表示根據請求的URI;
  • url_param,表示根據請求的URl引數'balance url_param' requires an URL parameter name
  • hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
  • rdp-cookie(name),表示根據據cookie(name)來鎖定並雜湊每一次TCP請求。

5.載入配置檔案方式啟動 HaProxy

haproxy -f conf/haproxy.conf
複製程式碼

HaProxy 實現 MySQL 負載均衡
檢視 HaProxy 程式,如果存在就說明已經 HaProxy 啟動成功了,接下來就是去驗證了.

驗證 MySQL 負載均衡

為了檢驗 MySQL 的負載均衡是否生效,我們可以簡單地使用 MySQL 客戶端工具來連線試下,首先在兩個 MySQL 例項中各自新建一個不同名字的庫,埠為3311建立 salve, 埠為3312的建立 salve11.

HaProxy 實現 MySQL 負載均衡
嘗試多次連線3306埠的時就是發現它會自動匹配到 埠為3311的 MySQL 例項或者是3312的,採用輪詢方式進行訪問.到這裡 MySQL 的負載均衡也算是實現了.

資料參考

相關文章