關於 HaProxy
首先來簡單認識一下 HaProxy :一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟體,支援虛擬主機,是免費、快速並且可靠的一種解決方案。HAProxy 的實現基於事件驅動、單一程式模型,類似 Node.js 的程式模型,能夠支撐非常大的併發連線數.
安裝配置 HaProxy
以下實驗環境均為 CentOS7 平臺。 還需要兩個 MySQL 例項,埠分別為3311,3312.
1.首先從官網上下載穩定版本 haproxy-1.9.2.tar,通過 FTP 工具傳至伺服器.
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
就是檢查 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 程式,如果存在就說明已經 HaProxy 啟動成功了,接下來就是去驗證了.
驗證 MySQL 負載均衡
為了檢驗 MySQL 的負載均衡是否生效,我們可以簡單地使用 MySQL 客戶端工具來連線試下,首先在兩個 MySQL 例項中各自新建一個不同名字的庫,埠為3311建立 salve, 埠為3312的建立 salve11.
嘗試多次連線3306埠的時就是發現它會自動匹配到 埠為3311的 MySQL 例項或者是3312的,採用輪詢方式進行訪問.到這裡 MySQL 的負載均衡也算是實現了.