1. pwds

(1)该参数用来实现多用户的权限控制功能。Atlas 2.x版本中必须配置该项参数,配置方法见《Atlas安装》文档中说明。

(2)密码使用PREFIX/bin/encrypt程序加密,避免有人打开配置文件就能看到所有用户的密码,只是简单地防护一下,并不能防止专门的恶意破解。

(3)在Atlas的内存中,多个用户共用连接池,池内同时有多个用户名及使用其密码认证过的连接,在A用户连接Atlas时,从池中取出的连接有可能是B用户认证过的,这就需要使用A用户的密码将此连接change为A用户的认证连接,否则直接给A用户使用该连接就会引发权限问题。

(4)如果将各用户的连接池独立,则无法与min-idle-connections机制良好配合,会造成连接数一直上涨的问题。(此项说明只针对Atlas 1.x版本。在Atlas 2.x版本中当连接池中没有可用连接时,Atlas支持自建连接,已经不需要min-idle-connections机制。)

(5)官方版本中多用户也是共用连接池,但没有实现change机制,因此经常发生A用户看到B用户的库和表的现象。

2. client-ips

(1)该参数用来实现IP过滤功能。

(2)在传统的开发模式中,应用程序直接连接DB,因此DB会对部署应用的机器(比如web服务器)的IP作访问授权。

(3)在引入中间层后,因为连接DB的是Atlas,所以DB改为对部署Atlas的机器的IP作访问授权,如果任意一台客户端都可以连接Atlas,就会带来潜在的风险。

(4)client-ips参数用来控制连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔写在一行上即可,如client-ips=192.168.1.2, 192.168.2,这就代表192.168.1.2这个IP和192.168.2.*这个C段的IP可以连接Atlas,其他IP均不能连接。

(5)如果该参数不设置,则任意IP均可连接Atlas。

(6)如果设置了client-ips参数,且Atlas前面挂有LVS,则必须设置lvs-ips参数,否则可以不设置lvs-ips。

3. lvs-ips

(1)该参数是Atlas前面挂接的LVS的物理网卡的IP,不是虚IP。

(2)该参数用来实现平滑重启功能,否则在重启Atlas的瞬间的那些SQL请求都会失败,如果认为应用可以接受瞬间的报错则可以直接重启。

(3)平滑重启的条件:至少有两台配置相同的Atlas,且挂接在LVS之后。

(4)平滑重启的原理:LVS周期性地对后端Atlas的存活检测有两种方式,一是直接去探测端口是否可连接,二是执行一个脚本,这个脚本会去尝试连接Atlas,通过脚本的返回值来决定每个后端是否可用。Atlas有两种运行状态,通常为online,可通过发信号将其置为offline。Atlas检测到来请求的IP是LVS的网卡IP时,如果处于online状态,就向LVS的检测脚本返回online,如果处于offline状态,就向脚本返回offline。比如我现在因为某种原因需要重启一台Atlas,但直接重启势必导致瞬间的SQL请求全部失败,对前端应用造成影响。因此我先发下线信号将Atlas置为offline状态,当LVS的检测脚本发现返回值是offline时,便将这台Atlas摘除,从此时开始便没有新的请求导向这台Atlas。等到已经打向这台Atlas的SQL请求处理完毕后(这是一个很短的时间),就可以安然重启Atlas而不必担心对前端造成影响了。

(5)对于大多数应用来说,可能并没有那么敏感,因此不使用平滑重启功能而直接重启也是可以接受的。但在设置了client-ips参数的情况下,必须设置lvs-ips参数,否则LVS的物理网卡的IP会被Atlas拒绝,如果未设置client-ips参数,说明不开启IP过滤功能,则lvs-ips也可以不设置。