写点什么

【TiDB 高可用实践】基于 Haproxy+keepalived 实现负载均衡

作者: HZL_0-0 原文来源:https://tidb.net/blog/a964e538

拓扑图


  1. Haproxy 提供 TCP 协议下的负载均衡能力,TiDB 客户端通过连接 Haproxy 提供的浮动 IP 即可对数据进行操作,实现 TiDB Server 层的负载均衡。

  2. 同时,Haproxy 部署 2 个节点,使用 KeepAlived 来实现高可用。一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟 IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。

安装 Haproxy

下载 Haproxy

安装 Haproxy

172.23.57.232172.23.57.233 上都进行安装。


mkdir /home/software   # 将haproxy-1.8.25.tar.gz上传到/home/software目录下cd /home/softwaretar -xvf haproxy-1.8.25.tar.gzcd haproxy-1.8.25/make TARGET=4.19.0-91.82.152.uelc20.x86_64  # uname -r 来查看内核版本sudo make install PREFIX=/home/haproxy    # 安装到指定路径cd /home/haproxymkdir conf pid    # 分别用来存放配置、进程文件
复制代码

配置 Haproxy

vi /home/haproxy/conf/haproxy.cfg
复制代码


将下面配置信息写入 haproxy.cfg 中


global    log 127.0.0.1 local0 info    maxconn 4096    daemon    nbproc 1                 # 进程数,创建多个进程,能够减少每个进程的任务队列,但是过多的进程可能会导致进程的崩溃        #nbthread    1  # 最大线程数。线程数的上限与 CPU 数量相同。    pidfile /home/haproxy/pid/haproxy.piddefaults    log global # 日志继承全局配置段的设置。    retries 3  # 连接后端服务器失败的次数如果超过这里设置的值,haproxy会将对应的后端服务器标记为不可用    timeout connect 2s    timeout client 30000s    timeout server 30000s     timeout check 5s# 接入配置listen tidb-cluster                        # 配置 database 负载均衡。    bind 0.0.0.0:4000                       # 浮动 IP 和 监听端口。    mode tcp                                # HAProxy 要使用第 4 层的传输层。    balance leastconn                       # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于启动慢的服务器,服务器权重会在运行中作调整。    server tidb-87 172.23.57.87:4000 check inter 2000 rise 2 fall 3       # 检测 4000 端口,检测频率为每 2000 毫秒一次。如果 2 次检测为成功,则认为服务器可用;如果 3 次检测为失败,则认为服务器不可用。    server tidb-88 172.23.57.88:4000 check inter 2000 rise 2 fall 3      server tidb-89 172.23.57.89:4000 check inter 2000 rise 2 fall 3  

# 监控页面listen admin_stats bind 0.0.0.0:11001 mode http option httplog # 开始启用记录 HTTP 请求的日志功能。 maxconn 10 # 最大并发连接数。 stats refresh 30s stats uri /admin stats realm welcome login\ Haproxy stats auth admin:admin123 stats hide-version # 隐藏监控页面上的 HAProxy 版本信息。 stats admin if TRUE # 通过设置此选项,可以在监控页面上手工启用或禁用后端真实服务器
复制代码

启动 Haproxy

/home/haproxy/sbin/haproxy -f /home/haproxy/conf/haproxy.cfg 
复制代码

查看监控页面

  • http://172.23.57.232:11001/admin 或 http://172.23.57.233:11001/admin 用户名:admin 密码:admin123


管理 Haproxy 进程

  • 修改 haproxy.cfg 后,每执行一次 /home/haproxy/sbin/haproxy -f /home/haproxy/conf/haproxy.cfg,就会存在一个 haproxy 的进程,可以通过 ps aux | grep haproxy 查看已存在的进程,将不需要的进程 kill 掉。可以通过监控页面上的【Statistics Report for pid 4073477】选择进程号删除。

  • 如果有新的需求需要进行负载均衡,可以新建一个 haproxy_xx.cfg,然后执行


/home/haproxy/sbin/haproxy -f /home/haproxy/conf/haproxy_xx.cfg


或者


在原来的 haproxy_xx.cfg 中添加新的 listen。


安装 Keepalived

下载 keepalived

安装 keepalived

# 将keepalived-1.4.5.tar.gz上传到/home/software目录下cd /home/softwaretar -xvf keepalived-1.4.5.tar.gzcd keepalived-1.4.5/./configure --prefix=/home/keepalivedmake && make install
复制代码

注册 keepalived 为系统服务

cp /home/keepalived/sbin/keepalived /usr/sbin/# 以下拷贝的原路径为实际安装包解压后的路径cp /home/software/keepalived-1.4.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/cp /home/software/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/# 赋予可执行权限chmod +x /etc/init.d/keepalived# 重启系统服务systemctl daemon-reload
复制代码

配置 keepalived

  1. keepalived 配置中加入 haproxy 的脚本检测扩展,keepalived 会自动检测 haproxy 是否启动,如果没有启动会自动启动,启动一次没成功就会自动关闭 keepalived,将下面的脚本写入 chk_haproxy.sh 中

  2. Keepalived 默认读取的路径为: /etc/keepalived/keepalived.conf

  3. 将下面的配置写入 /etc/keepalived/keepalived.conf 中,其中虚拟 ip 由运维人员分配。

启动 keepalived

# 启动keepalivedsystemctl start keepalived# 设置开机自启动systemctl enable keepalived
复制代码

验证 keepalived

  • 查看 keepalived 的状态



  • 分别查看主机和备用机的 vip



测试

是否起到负载均衡作用

  • 客户端通过虚拟 ip: 172.23.57.207 和配置中的监听端口 4000,能访问成功,说明已经生效。


主机发生故障是否会进行漂移,并且不影响访问

  1. shutdown 主机 232,如果 VIP 发生漂移,查看备用机持有 VIP 就说明主备配置已经生效了。客户端还是能通过 172.23.57.207 这个虚拟 ip 进行服务访问,这就是高可用。


  • 查看备用机 233 的 vip,虚拟 ip 已经漂到备用机上,且 TiDB 集群能正常访问。




  1. 主机 232 重新启动。


  • 分别查看主机的 vip 和备用机的 vip,虚拟 ip 已经重新漂到主机上,且 TiDB 集群能正常访问。




TiDB 集群 1 台服务器宕机

  1. 在 87 上执行 sudo shutdown -r now。


  • 服务仍能正常访问



  1. 87 服务器重新拉起后,该节点的 TiDB 组件自动恢复。


TiDB 集群 2 台服务器宕机

  1. 在 88、89 上执行 sudo shutdown -r now。


  • 服务无法正常访问


  1. 88、89 服务器重新拉起后,2 个节点的 TiDB 组件自动恢复,服务也能正常访问。


TiDB 集群 3 台服务器宕机

  1. 在 87、88、89 上执行 sudo shutdown -r now。


  • 服务无法正常访问



  1. 87、88、89 服务器重新拉起后,3 个节点的 TiDB 组件自动恢复,服务也能正常访问。



发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
【TiDB 高可用实践】基于Haproxy+keepalived实现负载均衡_TiDB第四届征文-运维开发之旅_TiDB 社区干货传送门_InfoQ写作社区