本篇文章給大家帶來的內容是關于如何使用haproxy負載均衡mysql?,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
? 系統是一主多從的模式,讀寫分離是在應用程序的層面實現的,insert、delete、update、alter走主庫,select給從庫。然后給從庫做了load balancing,用keepalived組合haproxy。
? 話不多說,直接開干。
? 系統環境 :centos7
? 話說回來,不知何時起haproxy的社區官網被墻了…唉唉唉,可以通過這個地址下載最新穩定版本的haproxy 。
#?wget?https://www.haproxy.org/download/1.8/src/haproxy-1.8.9.tar.gz
建議朋友們在安裝之前讀一讀自述文件
#?cat?/usr/src/haproxy-1.8.9/README
安裝haproxy,這里前綴關鍵字PREFIX指定安裝目錄,用的是大寫字母。一般常規源碼安裝,是在configure指令后加選項”–prefix”,要加以區分
#?tar?-zxf?haproxy-1.8.9.tar.gz?-C?/usr/src/ #?cd?/usr/src/haproxy-1.8.9/ #?make?TARGET=linux2628?USE_PCRE=1?USE_OPENSSL=1?USE_ZLIB=1?PREFIX=/usr/local/haproxy #?make?install??PREFIX=/usr/local/haproxy
?創建haproxy程序用戶以及配置文件目錄
#?useradd?-M?-s?/sbin/nologin?haproxy #?mkdir?/etc/haproxy
?haproxy配置文件在這個版本的包里沒有提供樣例,需要手動建立的
#?touch?/etc/haproxy/haproxy.cfg #?more?/etc/haproxy/haproxy.cfg #global????log??/dev/log???local0?info????log??/dev/log? ??local1?notice????pidfile??? ????/var/run/haproxy.pid????maxconn?????400000?? ??????user????????haproxy????group???? ?????????haproxy????nbproc??????1????daemon #defaults????mode???http????log???global? ???option?http-server-close????option???????????? ?????????redispatch????retries?????????? ??????0????timeout?http-request?? ????????10s????timeout?queue????? ??????????????1m????timeout?connect????? ??????????????????10s????timeout?client?????? ??????????????????????1m????timeout?server????? ???????????????????????????1m????timeout?http-keep-alive??300s?? ?????????????timeout?check???????????10s????maxconn???? ???????????????????100000 listen?mysql_select??bind?*:3306??mode?tcp??balance?roundrobin? ?#balance?source??#option?mysql-check?user?haproxy??timeout?server??15s?? ?timeout?connect?15s??server?mysql162?192.168.5.162:3306?check?port?3306?inter?5000?fall?5? ??server?mysql163?192.168.5.163:3306?check?port?3306?inter?5000?fall?5?? ??server?mysql164?192.168.5.164:3306?check?port?3306?inter?5000?fall?5 listen?stats????????mode?http????????bind?0.0.0.0:7979????????stats?enable????????????stats?hide-version????????stats?uri?/haproxy?hello????????stats?realm?Haproxy?Statistics????????stats?auth?qkc:pwd@123????????stats?admin?if?TRUE
? haproxy的日志默認是輸出到系統的syslog中,查看起來不是非常方便,為了更好地管理haproxy
日志,我們在生產線一般都是獨立定義出來,定義方法如下:
?(1)修改 haproxy.cfg 關于日志配置的選項,在global中加入如下配置,將info及notice日志分別記錄到不同文件中。
log??/dev/log???local0?info log??/dev/log???local1?notice
?(2)修改rsyslog配置
?? 為了便于管理,將haproxy相關的配置獨立定義到 /etc/rsyslog.d/haproxy.conf 中。這部分配置將info和notice日志分別記錄到 /var/log/haproxy181/{haproxy181-info.log,haproxy181-notice.log} 文件中,其中” & ~”表示當日志寫入到日志文件后,rsyslog停止處理這個信息。這里配置的語法是rainerscript腳本語言寫的。
#?vim?/etc/rsyslog.d/haproxy.conf if?($programname?==?'haproxy'?and?$syslogseverity-text?==?'info') ?then?-/var/log/haproxy181/haproxy181-info.log&?~if? ?($programname?==?'haproxy'?and?$syslogseverity-text?==?'notice')? ?then?-/var/log/haproxy181/haproxy181-notice.log&?~
? 檢測haproxy.cfg配置文件語法是否正確
#?/usr/local/haproxy/sbin/haproxy?-f?/etc/haproxy/haproxy.cfg?-c
? 沒有問題的話,就去掉-c選項,啟動haproxy
#?/usr/local/haproxy/sbin/haproxy?-f?/etc/haproxy/haproxy.cfg
[root@server181?haproxy]#?ss?-antulp?|?grep?haproxy tcp????LISTEN???0??128???*:3306?????*:*????users:(("haproxy",pid=3315,fd=4)) tcp????LISTEN???0??128????*:7979???*:*????users:(("haproxy",pid=3315,fd=6))
? 配置haproxy開機自啟動
#?chmod?+x?/etc/rc.d/rc.local #?echo?'/usr/local/haproxy/sbin/haproxy?-f?/etc/haproxy/haproxy.cfg'?>>?/etc/rc.d/rc.local
? 連接haproxy進行測試
#?for?i?in?$(seq?1?10);?do?mysql?-utest?-p123456?-h192.168.5.181?-e?'select?@@server_id;';?done?|?egrep?'[0-9]' 3306164 3306162 3306163 3306164 3306162 3306163 3306164 3306162 3306163 3306164
然后再拿一臺服務器同樣做haroxy,整合keepalived。遠程系統用mysql客戶端連接負載均衡vip進行登錄,再逐個進行health check、failover等項目測試。
總結:
? haproxy在中等規模負載之上有著相當低的CPU負載,甚至于在非常高的負載場景中,5%的用戶空間占用率和95%的系統空間占用率也是非常普遍的現象,這意味著haproxy進程消耗比系統空間消耗低20倍以上。因此,對OS進行性能調優是非常重要的。即使用戶空間的占用率提高一倍,其CPU占用率也僅為10%,這也解釋了為何7層處理對性能影響有限這一現象。由此,在高端系統上haproxy的7層性能可輕易超過硬件負載均衡設備。
? haproxy支持給tcp做代理的特性使得其還可以為mysql讀庫做負載均衡,并且能夠發揮相當不錯的性能。