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_SOURCE[0]:-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_SOURCE[0]:-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正在工作:

相关推荐
java_logo4 分钟前
宝塔 Linux 面板 Docker 容器化部署指南
linux·运维·docker·宝塔·docker部署宝塔·宝塔部署教程·docker部署baota
云和数据.ChenGuang11 分钟前
批量给100台服务器装系统,还要完成后续的配置和软件部署
运维·服务器·开发语言·mysql
sunon_21 分钟前
解决linux系统PDF中文乱码问题
linux·运维·pdf
BJ_bafangonline26 分钟前
Xmanager怎么显示远程linux程序的图像?
linux·运维·服务器
yBmZlQzJ27 分钟前
内网穿透 + 域名解析:到底解决了什么核心问题?
运维·经验分享·网络协议·docker·容器
小挪号底迪滴27 分钟前
Docker容器化实践:从开发到生产的完整流程
运维·docker·容器
gordon~934 分钟前
Docker常用命令
运维·docker·容器
珠海西格电力37 分钟前
零碳园区应急能源基础架构规划:备用电源与清洁能源联动配置
大数据·运维·人工智能·物联网·能源
云水木石37 分钟前
Rust 语言开发的 Linux 桌面来了
linux·运维·开发语言·后端·rust
隔壁小红馆39 分钟前
docker 部署pgsql
运维·docker·容器