首頁  >  文章  >  運維  >  如何使用haproxy負載平衡mysql

如何使用haproxy負載平衡mysql

坏嘻嘻
坏嘻嘻原創
2018-09-15 15:54:592901瀏覽

這篇文章帶給大家的內容是關於如何使用haproxy負載平衡mysql ,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

  系統是一主多從的模式,讀寫分離是在應用程式的層面實現的,insert、delete、update、alter走主庫,select給從庫。然後給從函式庫做了load balancing,用keepalived組合haproxy。

如何使用haproxy負載平衡mysql

  話不多說,直接開乾。

  系統環境 :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讀庫做負載平衡,並且能夠發揮相當不錯的效能。

以上是如何使用haproxy負載平衡mysql的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn