如何使用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