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的負載均衡。