一、环境搭建
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正在工作: