haproxy負載均衡記錄
haproxy是一款輕量級的高可用、支持負載均衡和反向代理的軟件,我們可以用它實現很多功能
haproxy的安裝很簡單,但是前提是你的linux有gcc環境,簡單記錄一下
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz tar zxvf haproxy-1.4.8.tar.gz cd haproxy-1.4.8 make TARGET=linux26 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy
這里要注意的是自己的linux版本,使用uname -a命令可以查看
安裝好之后的路徑是在
/usr/local/haproxy
接下來是配置文件
global log 127.0.0.1 local0 maxconn 4096 user root group root daemon defaults log global mode tcp option tcplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 4000 clitimeout 50000 srvtimeout 30000 stats enable stats scope . frontend mysql_cluster bind *:3306 default_backend mysql_cluster_back backend mysql_cluster_back mode tcp option tcpka option mysql-check balance roundrobin server db01_1.1.1.1 192.168.50.1:3306 weight 1 check port 3306 server db02_2.2.2.2 192.168.50.130:3306 weight 100 check port 3306 listen stats 0.0.0.0:8899 mode http option httpclose balance roundrobin stats uri /admin-status stats realm Haproxy\ Statistics stats auth admin:admin
這是一個簡單的配置文件,global和defaults基本都可以不變,重要的是frontend 和backend
關于frontend,我是這樣理解的,相當于聲明了一個名為:mysql_cluster的函數,這個函數監聽了運行haproxy機器的3306端口,然后將這個端口的請求交給了backend名為mysql_cluster_back的模塊來處理,這里要申明代理的協議tcp,我這里是需要做mysql的集群,所以是tcp,如果是webserver的集群,那么可以寫成http
balance 是負載均衡的策略,對應的策略可以google
server db01_1.1.1.1 192.168.50.1:3306 weight 1 check port 3306 server db02_2.2.2.2 192.168.50.130:3306 weight 100 check port 3306
這兩句是定義實際的mysql服務器信息,我這邊是兩臺,可以定義權重,check port 3306是對兩臺服務器mysql的端口進行健康檢查,還有其他參數,不詳解。
listen stats 0.0.0.0:8899 mode http option httpclose balance roundrobin stats uri /admin-status stats realm Haproxy\ Statistics stats auth admin:admin
這個模塊主要是定義了haproxy的一個監控界面信息,綁定8899端口,通過瀏覽器可以訪問haproxy的監控界面
在上面兩臺機器上開啟mysql服務,然后在本機保存配置文件到安裝目錄下
haproxy的執行命令是
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
然后可以在瀏覽器中輸入:
http://192.168.50.129:8899/admin-status
查看機器情況,如果一切正常,則都是綠色
這個時候,連接mysql節點
mysql -h192.168.50.129 -utest-ptest -P3306
注意兩個真實的mysql服務器必須具有相同的用戶名和密碼,才能達到負載均衡的效果
然后你會發現,haproxy會輪的在兩臺真實服務器之間轉換,注意192.168.50.129 這臺機器并沒有安裝mysql
總得來說,haproxy可以對http以及tcp請求進行反向代理和負載均衡,對于webserver、數據庫都可以用很低的代價實現最大的效果,但是實際的生產環境中,要負載很多,可以和keepalived一起使用,使用虛擬ip的方式,來避免單點故障。
來自:http://my.oschina.net/u/123965/blog/188577