单机状态下,要是 ShardingSphere-proxy 服务出现故障不可用,整个服务读写均会出现故障,导致整体服务不可以,微服务状态下更会导致整个集群故障,引发更严重的后果,本次生产环境需要实现如下需求:
负载均衡
故障转移
不停机维护
架构图如下
组件 | 主机 | 备注 |
Haproxy | 192.168.32.200 | 下载地址见文末原文链接 |
ShardingSphere-proxy | 192.168.1.166:3307 | |
ShardingSphere-proxy | 192.168.1.166:3308 | |
ShardingSphere 所在宿主机 | 192.168.1.166 |
跟着我一起实现 Haproxy 对 ShardingSphere-proxy 进行集群部署。
01
添加用户
#添加haproxy组
groupadd -r haproxy
#创建nginx运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统
useradd -r -g haproxy -M -s /sbin/nologin haproxy
02
下载安装
mkdir -p /home/haproxy
cd /home/haproxy
tar -zxvf haproxy-2.3.5.tar.gz
make TARGET=linux-glibc PREFIX=/usr/local/haproxy
make install TARGET=linux-glibc PREFIX=/usr/local/haproxy
mkdir -p /usr/local/haproxy/{conf,log,errorfiles}
03
配置代理 ShardingSphere-proxy
touch /usr/local/haproxy/conf/haproxy.cfg
vim /usr/local/haproxy/conf/haproxy.cfg
配置文件
global
daemon # 后台方式运行
nbproc 1
chroot /usr/local/haproxy
pidfile haproxy.pid
user haproxy
group haproxy
defaults
mode tcp #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 65530 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #=心跳检测超时
log 127.0.0.1 local3 info #[err warning info debug],日志文件的输出定向。产生的日志级别为local3. 系统中local1-7,用户自己定义
balance roundrobin # 采用轮询算法
当出现此类分片键处于运算表达式或函数中的 SQL 时,ShardingSphere 将采用全路由的形式获取结果。
配置
listen delegate #这里是配置负载均衡,test1是名字,可以任意
bind 0.0.0.0:3307 #这里是监听的IP地址和端口,端口号可以在0-65535之间,要避免端口冲突
mode tcp #连接的协议,这里是tcp协议
#maxconn 4086
#log 127.0.0.1 local0 debug
#option httplog ###日志类别,记载http日志
#option dontlognull ###不记录空连接产生的日志信息
option httpclose ###每次请求完毕后主动关闭http通道,haproxy不支持keep-alive
retries 3 ###3次连接失败就认为服务器不可用,主要通过后面的check检查
server s1 192.168.1.166:3307 check #负载的MySQL实例1
server s2 192.168.1.166:3308 check #负载的MySQL实例2 可以有多个,往下排列即
系统状态配置
listen haproxy_stats
stats enable
bind *:8082
mode http
option httplog
log global
maxconn 10
stats refresh 30s
stats uri /admin
stats realm haproxy
stats auth admin:admin
stats hide-version
stats admin if TRUE
04
修改启动脚本,配置开机启动
# 将源码目录下的examples/haproxy.init复制到/etc/init.d/下
cp /home/haproxy/haproxy-2.3.5/examples/haproxy.init /etc/init.d/haproxy
# 添加执行权限
chmod +x /etc/init.d/haproxy
修改启动脚本,加入如下配置
vim /etc/init.d/haproxy
# 修改调整Begin
BASENAME=`haproxy`
BIN=/usr/local/haproxy/sbin/haproxy
CFG=/usr/local/haproxy/conf/haproxy.cfg
[ -f $CFG ] || exit 1
PIDFILE=/var/run/haproxy.pid
LOCKFILE=/var/lock/subsys/$BASENAME
# 修改调整END
# 添加service服务
chkconfig -–add /etc/init.d/haproxy
05
启动
systemctl start haproxy
06
管理界面信息查看
http://192.168.32.200:8082/admin_stats
用户名密码:admin/admin
S1 S2两服务启动,可以通过界面进行管理,包括服务下线,保护模式设置,维护可以通过界面设置单独处理,保证有当前有一个可用服务 更多内容可查看原文(https://blog.nxhz1688.com/2021/03/22/sharding-proxy-load/),包含具体配置。
本文由郑思扬授权转载
关于 Apache ShardingSphere
Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。