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

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章