三、 负载均衡服务的启用和验证
前面我们也提过,keepalived启动过程不会检查配置文件的语法,因此在启动keepalived以前,需要人工对/etc/keepalived/keepalived.conf文件做全面的语法检查。一个比较容易犯的错误就是把花括号"}"写漏了,不成对!
当lvs客户端都正常启动并且配置文件经检查无误后(当然有错误也无妨,随时可以修改嘛!),执行命令 /usr/local/keepalived/sbin/keepalived -D ,然后我们查看系统进程,看是否是3个keepalived进程。如果配置文件的路径不是/etc/keepalived/keepalived.conf则需要在启动时用选项-f指定。
最能反映keepalived启动情况的地方当属系统日志。手动执行启动操作后,使用命令 tail -f /var/log/messages 滚动查看输出,就能详细了解其运行情况。下图为某个lvs环境的keepalived启动输出:
启动keepalived时系统日志的输出(截取)
另外一个反映keepalived正常运行状态的地方是网络接口vip的启用。通过执行ip add 即可看见vip已经被绑定在制定的网络接口(注意:ifconfig 不能显示 vip)。需要注意的是,BACKUP的vip暂时不绑定。下图显示了这种比较。
主负载均衡器(MASTER) 与备份负载均衡器(BACKUP)输出对比
主负载均衡器(MASTER)和备份负载均衡器(BACKUP)的keepalived 都把它运行起来,然后我们进行功能测试。
● 测试前的准备
1、 保证所有服务器的网络服务正常。这可以通过ping 所有机器的ip地址已经ping vip 来检查。
2、 修改本地计算机的hosts文件,把域名跟vip绑定起来。然后再 ping 一下域名,看是否正常。如 125.38.38.64 www.sery.com
● 转发功能测试
1、 在本地机器执行命令 telnet www.sery.com 80 ,检查访问是否正常。
2、 在本地计算机的浏览器地址栏输入 http://www.sery.com ,看网站默认页是否能正常访问。
3、 登录主负载均衡器,察看转发情况。Lvs的转发情况,是不能通过netstat -an这样的方式来察看的。这时,前面我们安装的ipvsadm终于上场了。执行不带任何选项的 ipvsadm指令,即可察看tcp连接情况。下图为主负载均衡器的转发情况:
负载均衡器转发状态
如果想知道当前测试机的访问请求被转发到那个服务器去了,可以在ipvsadm命令后带一个选项,其完整形式为:ipvsadm -lcn | grep 159.226.240.63 。
[root@hld081028-mk ~]# ipvsadm -lcn | grep 159.226.240.63
TCP 14:56 ESTABLISHED 159.226.240.63:39783 125.38.38.64:80 125.38.38.99:80
● 健康检查功能(故障隔离)测试
通过手工的方法,使真实服务器提供的服务实效,然后再从客户端发起访问请求,检验lvs提供的服务是否可用。这种测试,有两种方式:停止某个真实服务器的服务(本例为varnish)、关闭网络服务。
1、 关闭真实服务器125.38.38.99的varnish服务。先 telnet 125.38.38.99 80 ,不能访问为正常。然后再从本地计算机执行 telnet 125.38.38.64 80,如访问正常,再检查负载均衡器的输出。这时停止服务的机器125.38.38.99 将被lvs从转发列表中删除,系统日志也会有被删除的消息打印出来,如下图所示:
服务停止,真实服务器从转发队列删除
2、 关闭主机的网络。可以关闭网络接口或关闭服务器,然后再按第"1"步的方法测试,检查客户端的访问请求是否不受影响;转发队列是否把关闭网络服务的对象删除。下图为某个真实服务器网络启停时ipvsadm输出对比。
关闭服务器前后ipvsadm输出对比
3、 关闭lvs的客户端配置脚本/usr/local/bin/lvs_real。这个测试不会成功,关闭真实机器的vip以后,负载均衡器依然会把用户请求转发过来,可是tcp连接却不能成功,部分用户的访问失败。因此在部署和运维lvs环境时,要特别注意这一点。
从上面的测试可知,关闭或停止服务,负载均衡器通过健康检查自动把实效的机器从转发队列删除掉,实现故障隔离,保证用户的访问不受影响。
● 失败切换(FailOver)测试
关闭主负载均衡器(MASTER)的keepalived进程,然后从客户端访问vip地址及本地绑定的域名。方法是telnet 125.38.38.64 80 及用浏览器访问 http://www.sery.com . 检查访问是否正常。这是最直观的表现方法。
正常情况下,当主负载均衡器(MASTER)实效时,备份负载均衡器(BACKUP)能立即接替转发任务(接替时间由keepalived.conf文件的advert_int指定)。在确认主负载均衡器(MASTER)的keepalived进程关闭后,我们来看看备份负载均衡器的运行情况。这里我们观察两个地方:ipvsadm的输出及系统日志的输出。
1、 ipvsadm输出变化。未接替转发任务前,ipvsadm的输出字段ActionConn、InActionConn对应的值皆为"0"(因为没有请求转发);接替转发任务后,这两个字段的值立即发生变化。
2、 系统输出日志将记录备份负载均衡器从BACKUP向MASTER切换过程,下面截取系统日志关于keepalived输出的部分:
Jul 6 21:04:32 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Transition to MASTER STATE
Jul 6 21:04:32 telcom-dl-1 Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to MASTER state
Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Entering MASTER STATE
Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) setting protocol VIPs.
Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Sending gratuitous ARPs on eth1 for 218.24.35.105
Jul 6 21:04:37 telcom-dl-1 Keepalived_vrrp: Netlink reflector reports IP 125.38.38.64 added
Jul 6 21:04:37 telcom-dl-1 Keepalived_healthcheckers: Netlink reflector reports IP 125.38.38.64 added
Jul 6 21:04:42 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Sending gratuitous ARPs on eth1 for 125.38.36.64
现在再回来启动主负载均衡器(MASTER)的keepalived进程,接着察看辅助负载均衡器(BACKUP)的系统日志,截取一段输出如下:
Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) Received higher prio advert
Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CAHCE) Entering BACKUP STATE
Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Instance(VI_CACHE) removing protocol VIPs.
Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to BACKUP state
Jul 6 21:18:12 telcom-dl-1 Keepalived_vrrp: Netlink reflector reports IP 125.38.38.64 removed
Jul 6 21:18:12 telcom-dl-1 Keepalived_healthcheckers: Netlink reflector reports IP 125.38.38.64 removed
这段输出显示,备份服务器尽管曾经行使了一段MASTER的职权,一旦原来的MASTER复活,它就得把控制权乖乖地交给原MASTER,自己打回原形BACKUP。是什么东西在起作用呢?是配置文件里设置的那个优先级"priority"。为了保证FailOver正常发挥作用,应确保主负载均衡器的"priority"值大于备份负载均衡器的"priority"值。同样,辅助负载均衡器的ipvsadm的输出也会发生变化,这里不再多做说明。
下篇文章,介绍多负载均衡应用攻略,敬请关注。