如何使用ks+lvs实现完美集群

前言

很多ks的用户会问到ks如何配合LVS做流量切换?ks如何配合keepalived做高可用?ks如何做到不停系统升级? 通过ks提供的状态监测和状态切换命令, 配合一些第三方组件, 可以实现一个完美的mysql中间件集群。

配合LVS进行流量切换

LVS通过该命令监测ks存活信息

1
admin server(opt,k,v) values('show','proxy','status')

如果得到的结果是"online", LVS正常分流到该ks;如果得到的结果是"offline"或者"连接错误",LVS认为该real server节点不可用, LVS将不会分流到该ks。

LVS手动分流过程

1
admin server(opt,k,v) values('change','proxy','offline')

通过上述命令, LVS在下个侦查周期监测到该real server节点状态为offline, 将不会分流到该ks, 当观察到当前节点没有正在处理的请求之后, 我们可以对ks进行配置变更、代码升级等操作。

配合keepalived做高可用架构

keepalived检测脚本通过该命令进行real server保活检测

1
admin server(opt,k,v) values('show','proxy','status')

如果得到的结果是"online", keepalived虚拟IP绑定在主ks实例上,不会漂移;如果检测到状态是"offline"或者"连接错误",keepalived认为主ks实例不可用,虚拟IP漂移到从ks实例上,从而实现高可用。

高可用手动触发流程

1
admin server(opt,k,v) values('change','proxy','offline')

通过上述命令,将其中一台ks状态置为下线,正常情况下可以看到虚拟IP漂移到另外一台ks主机上,当观察到当前节点没有正在处理的请求之后,我们可以对ks进行配置变更、代码升级等操作。

prometheus

系统架构

prometheus系统架构可参考下面这幅图。

下载并运行

下载Prometheus,然后提取并运行:

1
2
3
tar xvfz prometheus-*.tar.gz
cd prometheus-*
./prometheus

配置yml

根据文档进行yml配置文件的配置,此处不再多解释。

完整配置文档

kingshard暴露了9708端口作为prometheus的抓取地址,因此通过http://localhost:8080/metrics可以获取到相关监控项,端口可在配置文件进行变更。

启动

根据上述的配置文件启动prometheus

1
./prometheus -config.file=prometheus.yml

监控项解释

除了golang本身的监控项外,主要提供了以下的监控项。

idle监控项

标明了当前系统中idle连接的数目,正常为最大连接减去cache连接的数目

1
2
3
4
5
# HELP idleConn the db idle connection
# TYPE idleConn gauge
idleConn{addr="10.10.60.189:3306",type="master"} 384
idleConn{addr="10.10.60.189:3307",type="slave"} 384
idleConn{addr="10.10.60.189:3308",type="slave"} 384

cache监控项

标明了当前系统中cache连接的数目,正常为最大连接减去idle连接的数目,负载不大的系统该项变化应该不大

1
2
3
4
5
# HELP cacheConns the db cache connection
# TYPE cacheConns gauge
cacheConns{addr="10.10.60.189:3306",type="master"} 128
cacheConns{addr="10.10.60.189:3307",type="slave"} 128
cacheConns{addr="10.10.60.189:3308",type="slave"} 128

maxConn监控项

标明了当前系统中配置的maxConn数量

1
2
3
4
5
# HELP maxConn the max connection config
# TYPE maxConn gauge
maxConn{addr="10.10.60.189:3306",type="master"} 512
maxConn{addr="10.10.60.189:3307",type="slave"} 512
maxConn{addr="10.10.60.189:3308",type="slave"} 512

pushConnCount监控项

标明了当前系统中往连接池中推入连接的次数,用于排查异常情况

1
2
3
4
5
# HELP pushConnCount the db pushConnCount
# TYPE pushConnCount gauge
pushConnCount{addr="10.10.60.189:3306",type="master"} 512
pushConnCount{addr="10.10.60.189:3307",type="slave"} 512
pushConnCount{addr="10.10.60.189:3308",type="slave"} 512

popConnCount监控项

标明了当前系统中从连接池中取出连接的次数,用于排查异常情况

1
2
3
4
5
# HELP popConnCount the db popConnCount
# TYPE popConnCount gauge
popConnCount{addr="10.10.60.189:3306",type="master"} 0
popConnCount{addr="10.10.60.189:3307",type="slave"} 0
popConnCount{addr="10.10.60.189:3308",type="slave"} 0

转载:https://github.com/flike/kingshard/blob/master/README_ZH.md