標籤:haproxy mysql 讀負載平衡
接前一篇部落格<keepalived+Master-Master-Slave實現雙主高可用及讀寫分離>
地址http://lee90.blog.51cto.com/10414478/1825478
上一篇博文裡面,我們只用了一個slave節點。
實際生產環境中,我們肯定有多個slave節點負責讀資料庫。
假設我們還有一個配置好的slave,IP為192.168.2.15。那麼現在的情況是:
Master1:192.168.2.13
Master2:192.168.2.14
VIP:192.168.2.100
Slave1:192.168.2.11
Slave2:192.168.2.15
Web伺服器:192.168.2.11
haproxy的安裝配置
示範用法而已,我們就將haproxy安裝到192.168.2.11上,能驗證效果即可。
參考文檔:
官方:http://cbonte.github.io/haproxy-dconv/configuration-1.6.html
http://blog.chinaunix.net/uid-30212356-id-5698536.html
http://blog.c1gstudio.com/archives/1728?utm_source=tuicool&utm_medium=referral
軟體版本:
haproxy-1.5.4-2 【haproxy1.6設定檔和以往的有點不一樣,這裡沒有用最新的】
yum install haproxy -y
cd /etc/haproxy
vim haproxy.cfg 修改設定檔,修改好的設定檔如下:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode tcp
log global
option dontlognull
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
## 定義一個監控頁面,監聽在1080連接埠,並啟用了驗證機制
listenstats
mode http
bind 0.0.0.0:1080
stats enable
stats hide-version
stats uri /haproxy
stats realm Haproxy\ Statistics
stats auth admin:123456
stats admin if TRUE
listenmysql
bind 0.0.0.0:3336
mode tcp
option mysql-check userhaproxy_check # 定義了一個用於後端的mysql健全狀態檢查的使用者[主要:這個使用者要在後端的slave上存在才行]
balance roundrobin
server slave1 192.168.2.11:3306 weight 1check inter 1s rise 2 fall 2
server slave2 192.168.2.15:3306 weight 1check inter 1s rise 2 fall 2
在各個mysqlslave節點上建立帳號
建立允許haproxy串連到資料庫的帳號擷取其運行狀態
> GRANT PROCESS ON *.* TO‘haproxy_check‘@‘192.168.2.%‘;
> flush privileges;
再建立一個訪問的帳號,一會要通過它串連haproxy的3336節點嘗試訪問slave,以便驗證是否能負載平衡
> GRANT ALL ON *.* TO‘lirl‘@‘192.168.2.%‘ identified by ‘123456‘;
> flush privileges;
啟動haproxy
/etc/init.d/haproxy start
瀏覽器訪問http://192.168.2.11:1080/haproxy
輸入使用者名稱admin 密碼123456 進到下面的介面:
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/84/28/wKioL1eHMhCi_eBfAAGQGI_6wcQ645.png" title="1.png" alt="wKioL1eHMhCi_eBfAAGQGI_6wcQ645.png" />
從dashboard介面,可看到slave1 已經是up狀態了。slave2是down狀態。因為我們實際上192.168.2.15這台主機都沒開機(slave2的配置和slave1一樣的方法)。
我們在其他節點,用haproxy訪問後端的資料庫,如,已經能串連到了:
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/84/29/wKiom1eHMjbgNu6EAABBJGL7dBw305.png" style="float:none;" title="2.png" alt="wKiom1eHMjbgNu6EAABBJGL7dBw305.png" />
在slave上,用root帳號登入查看,如,能看到lirl帳號登入上來了。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/84/28/wKioL1eHMjbBv22VAAAqpN1A3gs535.png" style="float:none;" title="3.png" alt="wKioL1eHMjbBv22VAAAqpN1A3gs535.png" />
slave2的我就不詳細示範如何配了。
最後,附上一張最終完成後機器拓撲圖:
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/84/29/wKiom1eHMjbQNzj-AACKnLlAZqs372.png" style="float:none;" title="4.png" alt="wKiom1eHMjbQNzj-AACKnLlAZqs372.png" />
haproxy實現mysql的讀負載平衡