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正在工作:

相关推荐
XIAOHEZIcode1 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉5 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦5 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw