HAProxy 原本是用在http網站分流的,
但是只要開啟tcp mode就可以作為MySQL的Load Balancer。
之前的設定好MySQL Cluster 大軍如下
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @vm1ip (mysql-5.1.41 ndb-7.0.13, Nodegroup: 0)
id=2 @vm2ip (mysql-5.1.41 ndb-7.0.13, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=10 @vm3ip (mysql-5.1.41 ndb-7.0.13)
[mysqld(API)] 2 node(s)
id=20 @vm4ip (mysql-5.1.41 ndb-7.0.13)
id=21 @vm5ip (mysql-5.1.41 ndb-7.0.13)
由於開啟了MySQL Cluster中兩個以上的API node (或稱SQL node),
所以加了一台HAPorxy作為API node的統一入口點
安裝好haporxy後 haproxy.cfg設定檔如下
listen MySQL 0.0.0.0:5000
retries 3
mode tcp
option mysql-check haproxy
balance roundrobin
option tcplog
server mysql1 vm4ip check port 5000
server mysql1 vm5ip check port 5000 backup
由於指定了mysql-check 的user 所以必須在兩個API node各執行以下SQL,方便haproxy進入查看
USE mysql;
INSERT INTO USER (Host,USER) VALUES ('','haproxy');
FLUSH PRIVILEGES;
另外如果想要看haproxy的log
則必須在/etc/rsyslog.d/haproxy.conf 加上
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
然後重起一下rsyslog
接著就可以看haproxy有沒有正常的跑起來
tail -f /var/log/haproxy*.log
別忘了設定一下logrotate /etc/logrotate.d/haproxy
/var/log/haproxy*.log
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}