一
1. status.html 文件:
一般是web 服务器常用的方式,apache/nginx web 服务 配置健康检测文件status.html[自己设置即可]这样 VIP/LVS 会每秒(或者一个时间粒度) 去他们下面的realserver 上面:curl http://realserverip:/status.html如果能取到这文件,则说明这个realserver 是好的,就会根据负载均衡算法把流量引到这台realserver。
(1). realserver touch了 status.html 但是没有启动web服务;
因为没有启动web服务,则 curl http://realserverip:/status.html 时 根本连不上此台机器 80,所以机器的web服务如果没有启动,即使已经touch了 status.html 文件,LVS 也认为这台机器是不健康的,不会引流量进来;所以,我们上线时;如果不摘流量(rm -f .../status.html);也只是在一瞬间丢掉了流量;LVS 下次健康检测就会失败的.
(2). 配置好监控检测文件后,我们需要在realserver上面touch statu.html文件;
因为监控检测是通过web服务来检测的;所以,要在 web服务器的 根目录里面touch 监控检测文件;但是这个根目录要找对:
• /home/a/conf/apache/httpd.conf 是apache 默认的配置文件:DocumentRoot "/home/a/share/htdocs"
如果在 /home/a/conf/apache/include/*.conf 里面没有新的设置,web服务的跟目录就是上面这个。
• 如果在 /home/a/conf/apache/include/.*.conf 里面重新设置了<VirtualHost *> 则优先使用include 里面的配置。
[html] view plain copy
01.<VirtualHost *>
02. ServerName www.baidu.com # 如果访问域名:www.baidu.com 或者直接访问web机器的IP地址则
03. DocumentRoot /home/a/share/htdocs/test #跟目录在这个目录下面
04. ........
05. ........
•Nginx 服务器:conf里面的那个root 对应的就是 跟目录。
[html] view plain copy
01.http {
02. include mime.types;
03. server_tokens off;
04. root /home/a/share/htdocs; #web 服务器的根目录
05. ......
06. ......
2 . 端口(port) 的健康检测方式:
如果realserver 上面不提供web 服务器,则上面的status.html 检测方式是不适合的;我们可以采用port方式;LVS/VIP 会每秒检测下面的 realserver 上面的 固定端口 [ 比如3000] 如果这个realserver的端口可以通信;则认为这台realserver 是健康,会把数据与这台realserver 进行通信;
(1). 判断realserver 的端口是否是通的:
[html] view plain copy
01.telnet realserverIP port(3000)
02.Trying realserverIP ...
03.Connected to realserverIP
04.Escape character is '^]'. ------>表明 端口是通的
05.
06.Trying realserverIP...
07.telnet: connect to address : realserverIP Connection refused
08.telnet: Unable to connect to remote host: Connection refused ------>表明 端口是不通的
3. status.html + port 监控检测的方式
上面说使用status.html 健康检测的方式必须是web 服务,其实不不一定;只要这个机器提供HTTP的服务,比如curl http://ip:port/status.html 返回是200 就是健康的。
wget http://IP:4050/status.html 可以作为realserver 健康检测的;还是用status.html 来做健康检测,不过需要指定特定的端口:4050 只要应用中可以使用curl 发送消息
也就是可以进行HTTP服务。
4. 健康检测的方式
健康检测的方式其实有两种啊,四层健康检测【TCP】、七层健康检测【HTTP】
四层健康检测方式:其实就是上面的端口检测方式,只要这个server 的端口是通的,就认为这台realserver是alive的;就会把流量分发过来,
这样的health check 一般是用在http服务,但是不是真正的apache/nginx 这样传统的webserver上面;
七层健康检测方式:其实就是上面的status.html 的方式,在OSI的第七层,应用层进行检测,判断curl http://ip/status.html 这个配置文件是否存在
• 四层health check :如果你摘流量,必须停止服务,把对应的port 关闭
• 七层health check :如果你摘流量,只要删除指定的健康检测文件即可
二
本文介绍了Lvs负载均衡故障的几个方面,通过对负载均衡器的检查和系统负载,防火墙等方面的排查,进行故障处理。通过本文您能较全面的了解故障发生的机理。
AD:51CTO网+ 首届中国APP创新评选大赛火热招募中……
Lvs负载均衡故障多数是由于负载均衡器发生故障了。但是也不能一概而论,所我们在此为大家总结了一下Lvs负载均衡故障中的几种故障分类,并对其进行了详细的介绍。当然,负载均衡器的检查是一个重点。
有效进行lvs负载均衡监控后,一旦有故障或异常发生,系统管理人员将会得到及时的通知。并且这些报警信息往往包含故障的基本情况,如负载过高、主机down了、服务严重不可用(critical)、磁盘空间快满了等等,这些信息非常有利于系统管理员定位故障点。如果没有一个有效的监控系统,故障的报告往往来自用户的报告。这些报告笼统而模糊,可能包含"你们的网站不能访问了"之类的字眼,要定位故障点,可能会花费更多的时间。
在知晓和定位故障以后,结下来就是分析和处理故障。Lvs负载均衡故障点可分为:负载均衡器故障、真实服务器故障、vip故障、服务故障这几个部分。这些故障出现后,怎么着手处理?下面分别论述之。
◆负载均衡器发生故障的检查点
1、 查看系统日志 /var/log/messages ,了解内核是否有报错信息。因为keepalived的日志也被追加到系统日子,因此通过系统日志,也能了解keepalived的运行情况。
2、 检查负载均衡器的网络连通状况。这包括ip地址的设置是否正确,是否能远程访问(如ping 、tracert等)。
3、 检查keepalived的运行情况。这包括进程是否处于运行中,ipvs模块是否被加载到系统的内核,vip是否被绑定到网络接口,ipvsadm是否有输出。
4、 检查负载均衡器的系统负载。
5、 检查keepalived的配置文件书写是否正确。因为keepalived启动过程不对配置文件做语法检查,因此在运行前,必须按需求表逐项检查配置文件keepalived.conf 的内容。有时,就可能就是因为漏写了一个"}"符号而导致意外的结果。配置文件的内容检查还包括主从优先级priority、虚拟路由标识virtual_router_id、路由标识router_id等几个部分,这些值有些是必须相同的、有些则必须不同。
6、 检查负载均衡器是否启用防火墙规则。
◆真实服务器发生故障的检查点
1、 查看系统日志 /var/log/messages ,了解内核是否有报错信息。
2、 检查服务器的网络连通状况。
3、 检查服务是否正常运行。可以结合察看进程、模拟用户访问来确定。
4、 检查服务器的负载情况,看哪些进程占用较高的资源。如果暂停占资源高的进程,情况会怎么样?
5、 检查vip是否被绑定。Linux只能通过ip add 指令察看,freebsd 用ifconfig就可以了。
6、 检查主机防火墙是否被启用。如果需要启用主机防火墙,则应设置好过滤规则。
7、 从客户端直接访问服务器的服务,看是否能正常访问。这是dr模式的一个优点。
◆vip发生故障的检查点
1、 检查负载均衡器的vip是否被绑定。
2、 检查负载均衡器ipvsadm的输出,察看输出的vip项是否与我们的设定相一致。
3、 检查各真实服务器的vip是否被绑定。
4、 从客户端测试一下vip的连通情况,如ping vip。
5、 检查vip地址是否与其它服务器的地址相冲突。
◆服务发生故障检查点
1、 检查服务是否正常运行。如查进程、模拟用户访问等。
2、 检查系统的负载情况。
3、 检查是否启用主机防火墙。
一旦知道问题的所在,解决Lvs负载均衡故障本身就不再是什么困难的事情了,因此这里不再一一列举对应的解决方法。