HAProxy + Vitess负载均衡

一、环境搭建

Vitess环境搭建:

具体vitess安装不再赘述,主要是需要启动3个vtgate(官方推荐vtgate和vtablet数量一致)

操作:

在vitess/examples/common/scripts目录中,修改vtgate-up.sh文件,

cp vtgate-up.sh vtgate-up-2.sh

cp vtgate-up.sh vtgate-up-3.sh

修改vtgate-up-2.sh文件

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| source "(dirname "{BASH_SOURCE0:-0}")/../env.sh" cell={CELL:-'test'} web_port=15002 grpc_port=15992 mysql_server_port=15307 mysql_server_socket_path="/tmp/mysql2.sock" # Start vtgate. # shellcheck disable=SC2086 vtgate \ TOPOLOGY_FLAGS \\ --log_dir VTDATAROOT/tmp \ --log_queries_to_file VTDATAROOT/tmp/vtgate_querylog2.txt \\ --port web_port \ --grpc_port grpc_port \\ --mysql_server_port mysql_server_port \ --mysql_server_socket_path mysql_server_socket_path \\ --cell cell \ --cells_to_watch cell \\ --tablet_types_to_wait PRIMARY,REPLICA \\ --service_map 'grpc-vtgateservice' \\ --pid_file VTDATAROOT/tmp/vtgate2.pid \ --mysql_auth_server_impl none \ > VTDATAROOT/tmp/vtgate2.out 2\>\&1 \& # Block waiting for vtgate to be listening # Not the same as healthy echo "Waiting for vtgate to be up..." while true; do curl -I "http://hostname:web_port/debug/status" \>/dev/null 2\>\&1 \&\& break sleep 0.1 done; echo "vtgate is up!" echo "Access vtgate at http://hostname:$web_port/debug/status" disown -a |

修改vtgate-up-3.sh文件

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # This is an example script that starts a single vtgate. source "(dirname "{BASH_SOURCE0:-0}")/../env.sh" cell={CELL:-'test'} web_port=15003 grpc_port=15993 mysql_server_port=15308 mysql_server_socket_path="/tmp/mysql3.sock" # Start vtgate. # shellcheck disable=SC2086 vtgate \ TOPOLOGY_FLAGS \\ --log_dir VTDATAROOT/tmp \ --log_queries_to_file VTDATAROOT/tmp/vtgate_querylog3.txt \\ --port web_port \ --grpc_port grpc_port \\ --mysql_server_port mysql_server_port \ --mysql_server_socket_path mysql_server_socket_path \\ --cell cell \ --cells_to_watch cell \\ --tablet_types_to_wait PRIMARY,REPLICA \\ --service_map 'grpc-vtgateservice' \\ --pid_file VTDATAROOT/tmp/vtgate3.pid \ --mysql_auth_server_impl none \ > VTDATAROOT/tmp/vtgate3.out 2\>\&1 \& # Block waiting for vtgate to be listening # Not the same as healthy echo "Waiting for vtgate to be up..." while true; do curl -I "http://hostname:web_port/debug/status" \>/dev/null 2\>\&1 \&\& break sleep 0.1 done; echo "vtgate is up!" echo "Access vtgate at http://hostname:$web_port/debug/status" disown -a |

在执行vtgate-up.sh脚本时,执行vtgate-up-2.sh,vtgate-up-3sh

这样就可以同时启动3个vtgate,而且随便连接哪一个vtgate,效果一样。

搭建HAProxy:

前置条件:

  • epel-release
  • gcc
  • systemd-devel

下载HAProxy:

wget https://www.haproxy.org/download/2.6/src/haproxy-2.6.2.tar.gz

解压源码包:

tar zxf haproxy-2.6.2.tar.gz

从源码编译 HAProxy 应用:

cd haproxy-2.6.2

make clean

make -j 8 TARGET=linux-glibc USE_THREAD=1

make PREFIX={/app/haproxy} SBINDIR={/app/haproxy/bin} install # 将 `{/app/haproxy}\` 和 \`{/app/haproxy/bin}` 替换为自定义的实际路径。

重新配置 profile 文件:

echo'export PATH=/app/haproxy/bin:$PATH' >> /etc/profile

source /etc/profile

检查 HAProxy 是否安装成功:

which haproxy

增加一个配置文件/opt/haproxy/haproxy.cnf,格式如下:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| global # 全局配置。 log 127.0.0.1 local2 # 定义全局的 syslog 服务器,最多可以定义两个。 chroot /opt/haproxy/lib # 更改当前目录并为启动进程设置超级用户权限,从而提高安全性。 pidfile /opt/haproxy/pid # 将 HAProxy 进程的 PID 写入 pidfile。 maxconn 4096 # 单个 HAProxy 进程可接受的最大并发连接数,等价于命令行参数 "-n"。 nbthread 48 # 最大线程数。线程数的上限与 CPU 数量相同。 user haproxy # 同 UID 参数。 group haproxy # 同 GID 参数,建议使用专用用户组。 daemon # 让 HAProxy 以守护进程的方式工作于后台,等同于命令行参数"-D"的功能。当然,也可以在命令行中用"-db"参数将其禁用。 stats socket /opt/haproxy/stats # 统计信息保存位置。 defaults # 默认配置。 log global # 日志继承全局配置段的设置。 retries 2 # 向上游服务器尝试连接的最大次数,超过此值便认为后端服务器不可用。 timeout connect 2s # HAProxy 与后端服务器连接超时时间。如果在同一个局域网内,可设置成较短的时间。 timeout client 30000s # 客户端与 HAProxy 连接后,数据传输完毕,即非活动连接的超时时间。 timeout server 30000s # 服务器端非活动连接的超时时间。 listen admin_stats # frontend 和 backend 的组合体,此监控组的名称可按需进行自定义。 bind 0.0.0.0:8080 # 监听端口。 mode http # 监控运行的模式,此处为 `http` 模式。 option httplog # 开始启用记录 HTTP 请求的日志功能。 maxconn 10 # 最大并发连接数。 stats refresh 30s # 每隔 30 秒自动刷新监控页面。 stats uri /haproxy # 监控页面的 URL。 stats realm HAProxy # 监控页面的提示信息。 stats auth admin:pingcap123 # 监控页面的用户和密码,可设置多个用户名。 stats hide-version # 隐藏监控页面上的 HAProxy 版本信息。 stats admin if TRUE # 手工启用或禁用后端服务器(HAProxy 1.4.9 及之后版本开始支持)。 listen vitess-cluster # 配置 database 负载均衡。 bind 0.0.0.0:3390 # 浮动 IP 和 监听端口。 mode tcp # HAProxy 要使用第 4 层的传输层。 balance leastconn # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于启动慢的服务器,服务器权重会在运行中作调整。 server vitess-1 127.0.0.1:15306 check inter 2000 rise 2 fall 3 # 检测 15306 端口,检测频率为每 2000 毫秒一次。如果 2 次检测为成功,则认为服务器可用;如果 3 次检测为失败,则认为服务器不可用。 server vitess-2 127.0.0.1:15307 check inter 2000 rise 2 fall 3 server vitess-3 127.0.0.1:15308 check inter 2000 rise 2 fall 3 |

启动:

haproxy -f /opt/haproxy/haproxy.cnf

测试:

1.使用Navicat连接

可以成功看到数据库数据:

2.使用HAProxy监控

登录地址:http://IP:8080/haproxy

例如:http://172.23.185.18:8080/haproxy

账号:admin

密码:vitess123

登录成功后可以看到,3个vtgate正在工作:

相关推荐
明志数科26 分钟前
宇树科技IPO背后的产业逻辑:人形机器人从“讲故事“到“交数据“
运维·服务器·数据库
外滩运维专家36 分钟前
验证码接口上线三天就被刷了,我后来加的几道防线
运维
跨境小彭44 分钟前
店群运营实操复盘:批量活动申报自动化优化方案
大数据·运维·人工智能·自动化·跨境电商·temu·temu电商运营
Jlzn88881 小时前
2026年锂电CCS组装线:车规储能双场景兼容自动化方案的技术架构与实践
运维·架构·自动化
AC赳赳老秦1 小时前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw
代码方舟2 小时前
企业级对公银行 KYC 架构:基于天远人脸身份证比对A构建自动化客户尽调网关
运维·人工智能·架构·自动化
ShiXZ2132 小时前
网络调试四剑客:ping / telnet / nc / netstat 速查指令集
运维·开发语言·网络·php
小五传输2 小时前
Serv-U替代方案怎么选?政务机关文件安全传输对比与迁移指南
大数据·运维·安全
woniu_buhui_fei2 小时前
日常工作常用的命令(Linux+JDK)
linux·运维·服务器
snow@li2 小时前
Telnet 全景教程:全平台安装、命令使用、故障排查与安全规范
运维·网络