最近发现阿里云线上环境有一台hls模块的数据库从库一直没有连接,而主库却一直连接不断。在阿里云控制后台看到连接情况如下图:

wKiom1jcovvh4WUpAACa30a2Vh8172.png


wKioL1jcowORcBRlAABD4-nz8XQ163.png

上图是主库的,下面那个是从库的,两者差距很大,可见这样的配置是错误的,因为读库根本没有使用,也就是说读库的那份钱是在浪费!


来到对应的atlas服务器查看配置,看到atlas 的配置里规定管理接口的用户名和密码是默认的原始套餐,端口被改成了2346,如下面,

wKiom1jcpxzSGYPkAAAisK6e9M0562.png

wKioL1jcp-yxRZ_JAAA4--XEmZs260.png

于是我们就在模块服务器(也就是图里的online-hls-001)上登录这个atlas服务器的管理端口,看一下效果:

spacer.gifwKiom1jcqLKBncfGAAAVgBu0LFE646.png


发现mysql根本没有反应,可当我们telnet去atlas的2346端口的时候,发现端口是通的:

wKioL1jcqSqgmTB5AAA5GLU8hH4692.png


于是我们返回到atlas 的配置文件,把这台hls模块服务器的ip地址添加到clients-ips这个字段里。

spacer.gifwKioL1jcqU-w7zDrAAAWOSqEArc353.png


然后再用hls服务器去测试一下atlas的管理端口,#mysql -hatlas服务器ip地址 -uuser -ppwd,然后使用#select * from backends;,发现里面的两个库一个连接成功,另一个是失败的:

wKioL1jcqcnxHOIQAABmxZMVqGc952.png


两个库都可以ping通,state却有这样的差别。由此可见这台atlas根本没有连接到从库,导致从库的连接数始终为0。这个时候我们就要检查从库配置的账号密码是否正确,而且在阿里云控制后台给从库开启这个atlas的白名单,然后重新启动这个mysql-proxy进程,再登录atlas管理端口查看,发现从库由down转up了:

wKioL1jcqmuxnYNnAAATvVhjcMU491.png


但是此时的atlas日志里却出现了很多forbidden的warning的提示:

wKioL1jcqq6AGmQFAABMIbwhVpk933.png


这时候我们返回atlas的配置文件,把之前的修改过的client-ips这个字段注释掉,让所有合法ip都连接,然后重启atlas,这样这种forbidden ip的警告日志就会消失。


稍等一会,就会看到从库上也会出现连接数了,至此一切恢复到正常状态,故障排除!

wKiom1jcqyGzweUaAAALhuOixwk895.png


本次故障排除感谢https://highdb.com/?s=atlas 这位大神的帮助!


[补充1]

数据库访问使用了事务的话,从库也会建立连接,只是连接量要小于“非事务访问”,而不是一点连接都没有。


[补充2]

一般来说,在atlas配置文件里,主库写一个,而从库最好把主库和从库都写进去,如果希望从库承担读的任务多一点的话,可以把权重调高,比如我想从库与主库的读任务比是2:1,那么就可以这么写:

1
2
3
4
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 主库地址:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy- read -only-backend-addresses = 从库地址:3306@2,主库地址:3306@1