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

相关推荐
舞动CPU4 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
皮锤打乌龟5 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
钰@5 小时前
小程序开发者工具的network选项卡中有某域名的接口请求,但是在charles中抓不到该接口
运维·服务器·小程序
wanhengwangluo5 小时前
云服务器和物理服务器的区别有哪些?
运维·服务器
秦jh_6 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
yaosheng_VALVE6 小时前
稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
运维·spring cloud·自动化·intellij-idea·材质·1024程序员节
看山还是山,看水还是。7 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
扣得君7 小时前
C++20 Coroutine Echo Server
运维·服务器·c++20
keep__go7 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
矛取矛求7 小时前
Linux中给普通账户一次性提权
linux·运维·服务器