1. 程式人生 > 資料庫 >Galera Cluster for MySQL 詳解(五)——負載均衡

Galera Cluster for MySQL 詳解(五)——負載均衡

        Galera負載均衡器(Galera Load Balancer,GLB)為客戶端請求提供了一個簡單的TCP連線平衡功能,其與Galera Cluster的關係類似於MySQL Router之於組複製。它從另一個輕量級負載均衡器Pen中汲取靈感,開發考慮了可伸縮性和效能,但僅限於平衡TCP連線。GLB提供了以下幾個功能:

  • 支援在執行時配置後端伺服器。
  • 支援伺服器排除(draining)。
  • 支援用於改善路由效能的epoll API。
  • 支援多執行緒操作。
  • 可選的看門狗模組,用於監視目的地址和調整路由表。

一、安裝

        與Galera Cluster不同,GLB沒有提供二進位制安裝包,需要用root使用者執行下面的命令從原始檔構建。

# 安裝依賴包
yum install gcc* libtool

# 下載GLB原始檔
git clone https://github.com/codership/glb

# 在git建立的glb目錄中,執行bootstrap指令碼
cd glb/
./bootstrap.sh

# 配置
./configure

# 編譯
make

# 安裝
make install

        成功執行了上述所有操作後,就可以使用glbd命令從命令列啟動GLB。除系統守護程式外,還安裝了libglb共享庫,用於對使用C標準庫中connect()呼叫的任何Linux應用程式進行連線平衡。

二、服務安裝

        上面的過程只安裝了GLB軟體,以便從命令列手動執行,但有時將應用程式作為系統服務執行更利於維護。將GLB安裝為服務只需把files目錄下的兩個檔案複製到相應位置即可。

# GLB指令碼檔案
cp files/glbd.sh /etc/init.d/glb

# GLB配置檔案
cp files/glbd.cfg /etc/sysconfig/glbd

        完成此操作後就能通過service命令管理GLB。

三、配置

        編輯/etc/sysconfig/glbd檔案,內容如下:

LISTEN_ADDR="8010"
CONTROL_ADDR="127.0.0.1:8011"
CONTROL_FIFO="/var/run/glbd.fifo"
THREADS="4"
MAX_CONN=256
DEFAULT_TARGETS="172.16.1.125:3306 172.16.1.126:3306 172.16.1.127:3306"
OTHER_OPTIONS="--round-robin"

        配置項說明:

  • LISTEN_ADDR:監聽客戶端連線的地址。這裡只給出了埠,意為繫結本機所有網絡卡的地址。
  • CONTROL_ADDR:控制地址,用於顯示GLB資訊。
  • CONTROL_FIFO:控制FIFO檔案,它總是開啟的。
  • THREADS:連線池執行緒數,通常為每個CPU核分配一些執行緒。
  • MAX_CONN:最大連線數,可能需要修改系統開啟檔案的限制(ulimit的open file)。
  • DEFAULT_TARGETS:空格分隔的目標伺服器地址,格式為IP[:PORT[:WEIGHT]],權重WEIGHT和埠PORT是可選的。WEIGHT預設值為1,PORT預設為LISTEN_ADDR指定的埠。
  • OTHER_OPTIONS:其它glbd命令列選項,這裡指定了目標選擇策略為輪詢。

        如果在glbd命令列中沒有指定目標選擇策略,則必須將引數新增到glbd配置檔案裡的OTHER_OPTIONS選項中。GLB支援以下五種目標選擇策略:

  • Least Connected:最少連線,這是預設策略。將新連線定向到當前連線最少的伺服器。它將根據伺服器權重進行調整。
  • Round Robin:輪詢,使用–round選項啟用。將新連線迴圈定向到DEFAULT_TARGETS列表中的下一個目標地址。
  • Single:新連線指向具有最大權重的單個伺服器,使用–single選項啟用。路由將持續定向到該伺服器,直到它失敗,或者直到具有更高權重的伺服器可用為止。
  • Random:隨機連線到可用伺服器,使用–random選項啟用。
  • Source Tracking:把來自同一地址的連線定向到同一伺服器,使用–source選項啟用。

四、啟動

[root@manager~/glb]#service glb start
[Sat Feb 29 14:16:15 CST 2020] glbd: starting...
glb v1.0.1 (epoll)
Incoming address: 0.0.0.0:8010,control FIFO: /var/run/glbd.fifo
Control  address:  127.0.0.1:8011
Number of threads: 4,max conn: 256,nodelay: ON,keepalive: ON,defer accept: OFF,linger: OFF,daemon: YES,lat.count: 0,policy: 'round-robin',top: NO,verbose: NO
Destinations: 3
   0:    172.16.1.125:3306,w: 1.000
   1:    172.16.1.126:3306,w: 1.000
   2:    172.16.1.127:3306,w: 1.000
   INFO: glb_daemon.c:44: Changing effective user to 'daemon'
[Sat Feb 29 14:16:15 CST 2020] glbd: started,pid=542577
[root@manager~/glb]#

        檢視狀態:

[root@manager~/glb]#service glb getinfo
Router:
------------------------------------------------------
        Address       :   weight   usage    map  conns
   172.16.1.125:3306  :    1.000   0.000    N/A      0
   172.16.1.126:3306  :    1.000   0.000    N/A      0
   172.16.1.127:3306  :    1.000   0.000    N/A      0
------------------------------------------------------
Destinations: 3,total connections: 0 of 256 max
[root@manager~/glb]#

        結果中顯示可用伺服器列表、它們的權重和使用率,以及與它們建立的連線數。

        以下是glb服務指令碼支援的操作:

  • start啟動GLB。
  • stop停止GLB。
  • restart重啟GLB
  • getinfo檢索當前路由資訊。
  • getstats提供與叢集相關的效能統計資訊。
  • add<IP Address>從路由表中新增IP地址。
  • remove<IP Address>從路由表中刪除指定的IP地址。
  • drain<IP Address>將指定伺服器設定為drain。執行此操作時,GLB不會向給定伺服器傳送新連線,但也不會終止現有連線,而是會等待到指定伺服器的連線正常結束。

        執行時新增IP地址,必須遵循以下格式:IP地址:埠:權重。可以使用主機名代替IP地址。

五、測試

[root@manager~/glb]#mysql -uwxy -pP@sswo2d -h127.0.0.1 -P8010 -N -s -e "select @@wsrep_node_name;"
Warning: Using a password on the command line interface can be insecure.
node1
[root@manager~/glb]#mysql -uwxy -pP@sswo2d -h127.0.0.1 -P8010 -N -s -e "select @@wsrep_node_name;"
Warning: Using a password on the command line interface can be insecure.
node2
[root@manager~/glb]#mysql -uwxy -pP@sswo2d -h127.0.0.1 -P8010 -N -s -e "select @@wsrep_node_name;"
Warning: Using a password on the command line interface can be insecure.
node3
[root@manager~/glb]#mysql -uwxy -pP@sswo2d -h127.0.0.1 -P8010 -N -s -e "select @@wsrep_node_name;"
Warning: Using a password on the command line interface can be insecure.
node1
[root@manager~/glb]#

        每個通過8010埠的客戶端新連線迴圈指向下一個可用伺服器,可見已成功使用GLB完成Galera Cluster的負載均衡。

參考: