1. 程式人生 > >(四)mysql主從基礎上的負載均衡--haproxy搭建

(四)mysql主從基礎上的負載均衡--haproxy搭建

(一)什麼是mysql負載均衡

通過兩個圖來對比

  • 未設定負載均衡:

  • 設定之後,能把請求按一定策略分配到相應的mysql伺服器上,提高系統穩定性,在效能方面也有大幅度提升

(二)負載均衡HaProxy

        HAProxy是一個使用C語言編寫的自由及開放原始碼軟體,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程式代理。HAProxy是法國人Willy Tarreau開發的一個開源軟體,是一款應對客戶端10000以上的同時連線的高效能的TCP和HTTP負載均衡器,可以實現基於TCP協議的四層代理及基於HTTP協議的七層代理。

(三)使用HaProxy搭建負載均衡

接下來搭建HaProxy,實現mysql多從節點的負載均衡。

首先搭建好一個主節點,兩個從節點,一個負載均衡節點,四臺機器

搭建負載均衡節點:

克隆好一臺虛擬機器,配置好網路

http://pkgs.fedoraproject.org/repo/pkgs/haproxy/下載Haproxy,這裡選擇1.7.8版本,下載並放入linux下:

解壓:

解壓完:

解壓完還需要進行原始碼安裝:

make TARGET=linux26命令編譯,原始碼安裝, TARGET為指定linux核心,提示未安裝gcc,先安裝gcc,yum方式安裝gcc,yum install gcc-c++:

安裝完gcc繼續使用make TARGET=linux26編譯haproxy,編譯完成:

編譯完成進行安裝,make install PREFIX=/usr/local/haproxy,PREFI指定安裝路徑:

安裝完成,檢視安裝檔案:

sbin目錄下的haproxy為可執行的檔案。

接下來需要對haproxy進行配置,為haproxy建立一個配置檔案haproxy.cnf:

再編輯haproxy.cnf,新增如下配置內容:

global
    daemon   #指定後臺執行
    nbproc 1
    pidfile /usr/local/haproxy/conf/haproxy.pid #pid檔案,需要存在,稍後建立
defaults
    mode tcp #預設的模式
    retries 2 #兩次連線失敗就認為是伺服器不可用
    option redispatch #
    option abortonclose 
    maxconn 4096 #預設的最大連線數
    timeout connect 5000ms #連線超時
    timeout client 30000ms #客戶端超時
    timeout server 30000ms #伺服器超時
    #timeout check 2000 #心跳檢測超時
    log 127.0.0.1 local0 err #[err warning info debug]


    balance roundrobin

####test1配置####
listen test        #負載均衡配置,test1為名字,可任意
    bind 0.0.0.0:3306 #繫結的主機,這裡為本機,即為0.0.0.0,監聽的IP地址和埠,埠號在0-65535之間,要避免埠衝突
    mode tcp     #連線的協議,預設tcp
    server s1 192.168.11.19:3306
    server s2 192.168.11.20:3306 #要負載均衡的機器,這裡為兩臺

再建立pid檔案,/usr/local/haproxy/conf/haproxy.pid檔案:

配置完成進行啟動haproxy:../sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cnf

 

所有的從節點都需要設定同樣的使用者名稱密碼,mysql客戶端或者web應用程式使用這個使用者名稱密碼通過負載均衡節點連線到各個從節點

我們使用create user ‘username’@‘host’ identified by 'password'在主機上建立使用者,從節點會自動同步,注意建立完需要賦予許可權

使用者建立/許可權賦予有點複雜,踩最多的坑,躺最大的bug,有問題歡迎來打擾

remark:虛擬機器ip設定以本機ipconfig中的無線區域網介面卡WLAN的IPv4為準,保持同一個網段下,才能相互ping通。

測試搭建是否成功:

使用mysql客戶端連線,多次連線,檢視每次連線的是哪個從節點:

此時能判別出連線到的是第二個從庫

斷開連線,然後再次連線:

可以看到再次連線到的是第一個從庫

 

haproxy有八種負載均衡策略,haproxy就是用相應的演算法來確定應該請求哪個從庫

  1. roundrobin,表示簡單的輪詢
  2. static-rr,權重
  3. leastconn,最少連線者先處理
  4. source,根據請求來源id
  5. uri
  6. url_param
  7. hdr,根據http請求頭鎖定http請求
  8. rdp-cookie

一般前3類使用的比較多,在haproxy配置檔案中設定balance即可。

 

(四)haproxy監控搭建

在haproxy配置檔案中新增:

listen admin_stats

   bind 0.0.0.0:8888  #埠號

   mode http

    stats uri /test_haproxy  #訪問的跟目錄路徑

    stats auth admin:admin  #登陸賬號

編輯完儲存退出,重啟haproxy服務

在瀏覽器輸入地址,haproxy節點的ip:

監控成功,可以看到haproxy連線了兩個從節點s1和s2

我i們把s2的mysql服務stop掉,重新整理頁面檢視,可以看到s2的狀態為DOWN:

 

 

----------------------------

總結一下haproxy搭建:

①搭建好兩個或者多個從節點,統一建立同樣的使用者名稱、密碼,賦予相應的許可權;

②搭建獨立的haproxy伺服器,修改配置檔案haproxy.cnf,在裡面指定從節點ip等

③啟動從節點,注意關閉各個節點防火牆

④啟動haproxy服務,haproxy節點不需要啟動mysql服務

⑤在mysql客戶端或者web服務端使用從節點的使用者名稱、密碼登入,埠為haproxy.cnf中bind的埠號