专栏首页Hadoop数据仓库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的负载均衡。

参考:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HAWQ取代传统数仓实践(五)——自动调度工作流(Oozie、Falcon)

            一旦数据仓库开始使用,就需要不断从源系统给数据仓库提供新数据。为了确保数据流的稳定,需要使用所在平台上可用的任务调度器来调度ETL定期执行。调度...

    用户1148526
  • Kettle与Hadoop(九)提交Spark作业

    实验环境: Spark History Server: 172.16.1.126

    用户1148526
  • OushuDB入门(八)——AI篇

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1148526
  • Taskflow 有兴趣了解一下?

    最近在工作中会经常使用到Taskflow这个东西,看起来虽然不是很难,但是遇到各种重写的时候看起来还是有点烦的,这时候就必须来了解一下taskflow这样一个东...

    我被狗咬了
  • Django源码学习-2-Settings.py配置文件-下

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • 原来搭建一个属于自己的网站如此简单?半个小时可搞定

    拥有自己的独立网站,做站长,很多人认为很难,既不懂代码也不懂技术没有什么基础。其实不难,代码可以完全不懂,没有建站基础也能很轻松的拥有一个属于自己的网站。

    wordpress建站吧
  • 李笑来新书已上链;Bittrex 首个 IEO 项目已停止;Mt.Gox事件负责人被判刑 | 1分钟链圈

    据CryptoNinjas消息,当地时间3月14日,Coinbase宣布其用户现在可以将XRP直接存储在Coinbase Wallet钱包应用程序中。目前,Co...

    区块链大本营
  • 使用 Nexus3镜像搭设私有仓库(Bower 、Docker、Maven、npm、NuGet、Yum、PyPI)

     Nuget 是免费、开源的包管理工具,专注于在 .Net、.Net Core 平台应用开发过程中第三方组件库的管理,相对于传统单纯的 dll 引用要方便、科学...

    心莱科技雪雁
  • Flash/Flex学习笔记(4):如何打开网页及Get/Post数据

    flash终究只是客户端技术,所以很多时候还是需要与服务端技术(比如asp,asp.net,jsp,php之类)进行数据交互的,下面的代码演示了如何在flash...

    菩提树下的杨过
  • 钉钉亮相数博会:企业级应用秀肌肉的正确姿势是什么?

    又到了科技巨头云集西南重镇贵阳的时候:一年一度的贵阳国际大数据产业博览会开幕了。记得去年此时去贵阳旅游正值数博会召开期间,整个城市都是“云上贵州”相关标志,这个...

    罗超频道

扫码关注云+社区

领取腾讯云代金券