HAProxy+mysql實(shí)現(xiàn)負(fù)載均衡實(shí)踐
1、準(zhǔn)備
| 服務(wù)器 | 作用 |
|---|---|
| 192.168.0.1 | HAProxy |
| 192.168.0.2 | mysql |
| 192.168.0.3 | mysql |
HAProxy下載地址:https://www.haproxy.org
2、HAProxy簡介
HAProxy 是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負(fù)載均衡,以及基于 TCP 和 HTTP 的應(yīng)用程序代理。
相較與 Nginx,HAProxy 更專注與反向代理,因此它可以支持更多的選項(xiàng),更精細(xì)的控制,更多的健康狀態(tài)檢測機(jī)制和負(fù)載均衡算法。
haproxy 是工作在四層之上的,這也就意味著它可以代理的服務(wù)要比 nginx 更廣泛,性能比 nginx 也要更高一些。
相比較 lvs,可配置性又比較好,需要的機(jī)器沒有 lvs 那么多。因此 haproxy 在一定需求下使用還是不錯的。
使用haproxy 來對 mysql 的從節(jié)點(diǎn)進(jìn)行負(fù)載均衡。
3、HAProxy 安裝
tar -zxvf haproxy-2.7.3.tar.gz cd haproxy-2.7.3/ make TARGET=linux31 make install PREFIX=/usr/local/haproxy cd /usr/local/haproxy/ mkdir conf cd conf/ cp /home/haproxy/haproxy-2.7.3/examples/option-http_proxy.cfg haproxy.cfg
TARGET參數(shù)查看
[root@localhost conf]# uname -r 3.10.0-1160.el7.x86_64
haproxy.cfg 編輯
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user root
group root
daemon
stats socket /usr/local/haproxy/stats
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
option redispatch
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
#客戶端配置
listen admin_status
mode http
bind 0.0.0.0:8899
option httplog
log global
stats enable
stats refresh 10s
stats hide-version
stats realm Haproxy\ Statistics
stats uri /admin-status
stats auth admin:123456
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
使用地址查看haproxy狀態(tài):http://192.168.0.1:8899/admin-status
注意關(guān)閉防火墻,或者開放端口
4、balance算法
roundrobin:
- 支持權(quán)重的運(yùn)行時調(diào)整,支持慢啟動;
- 每個后端中最多支持4095個server。
leastconn:
- 推薦使用在具有較長會話的場景中,例如MySQL、LDAP等。
- 連接數(shù)量最少的服務(wù)器接收連接。循環(huán)在相同負(fù)載的服務(wù)器組中執(zhí)行,以確保使用所有服務(wù)器。
- 建議在需要很長會話的地方使用此算法,如LDAP、SQL、TSE等……但是不太適合使用短會話(如HTTP)的協(xié)議。
- 該算法是動態(tài)的,這意味著服務(wù)器的權(quán)重可以動態(tài)調(diào)整,例如,慢啟動。
first:
- 根據(jù)服務(wù)器在列表中的位置,自上而下進(jìn)行調(diào)度;
- 前面服務(wù)器的連接數(shù)達(dá)到上限,新請求才會分配給下一臺服務(wù)。
source:
- 源IP地址被散列并除以總數(shù)正在運(yùn)行的服務(wù)器的權(quán)重,以指定哪個服務(wù)器將接收該請求。
- 這確保了相同的客戶端IP地址將總是到達(dá)相同的服務(wù)器,只要沒有服務(wù)器宕機(jī)或宕機(jī)。
uri:
- 對URI的左半部分做hash計(jì)算,并由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器。
static-rr:
- 靜態(tài)算法:不支持權(quán)重的運(yùn)行時調(diào)整及慢啟動;后端主機(jī)數(shù)量無上限。
- 每臺服務(wù)器根據(jù)各自的權(quán)重依次使用。這個算法與roundrobin類似,只是它是靜態(tài)的,這意味著動態(tài)地更改服務(wù)器的權(quán)重不會有任何影響。
- 另一方面,它對服務(wù)器的數(shù)量沒有設(shè)計(jì)限制,當(dāng)一個服務(wù)器啟動時,它總是在重新計(jì)算完整的映射后立即被重新引入集群。它運(yùn)行時使用的CPU也稍微少一些(大約-1%)。
url_param:
- 對用戶請求的uri的部分中的參數(shù)的值作hash計(jì)算,并由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器;
- 通常用于追蹤用戶,以確保來自同一個用戶的請求始終發(fā)往同一個Backend Server
hdr:
- 對于每個http請求,此處由指定的http首部將會被取出做hash計(jì)算,并由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器;
- 沒有有效值的會被輪詢調(diào)度
rdp-cookie:
- 將被查找并對每個傳入的TCP請求進(jìn)行散列處理,該名稱不區(qū)分大小寫。
- 這種機(jī)制作為降級的持久性模式非常有用,因?yàn)樗梢允冀K將相同的用戶(或相同的會話ID)發(fā)送到相同的服務(wù)器,如果沒有找到cookie,則使用普通的roundrobin算法
5、mysql負(fù)載均衡配置
在haproxy.cfg 中添加以下配置
#配置haproxy可連接的地址,與綁定固定的域名
frontend mysql
bind 0.0.0.0:3306
mode tcp
log global
default_backend mysql_server
backend mysql_server
balance leastconn
server mysql1 192.168.0.2:3306 check inter 5s rise 2 fall 3
server mysql2 192.168.0.3:3306 check inter 5s rise 2 fall 3
#rise 2是2次正確認(rèn)為服務(wù)器可用,fall 3是3次失敗認(rèn)為服務(wù)器不可用
重啟haproxy,進(jìn)入haproxy地址查看mysql狀態(tài)

總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決MySQL Sending data導(dǎo)致查詢很慢問題的方法與思路
這篇文章主要介紹了解決MySQL Sending data導(dǎo)致查詢很慢問題的方法與思路,感興趣的小伙伴們可以參考一下2016-04-04
與MSSQL對比學(xué)習(xí)MYSQL的心得(三)--查看字段的長度
今天我們來對比下MYSQL和MSSQL關(guān)于查看字段長度之間的區(qū)別2014-06-06

