在高可用keepalived软件,在默认的情况下仅仅在对方机器宕机或keepalived停掉的时候才会接管业务。

但是在实际工作过程中,例如在nginx负载均衡工作实例中,nginx服务已停止,而keepalived服务还在

工作的情况,这会导致用户访问VIP,而找不到对应的服务。

例如:

主机IP:10.0.0.5/24

备机IP:10.0.0.6/24

VIP:10.0.0.100/24

方法一:直接在主机上写守护脚本,来对nginx服务进行监控

1、脚本内容如下:

 [root@lb01 scripts]# cat check_nginx.sh
#!/bin/bash #-------------CopyRight-------------
# Name:check nginx server
# Version Number:1.00
# Type:sh
# Language:bash shell
# Date:--
# Author:sandy
# QQ:
# Email:eeexu123@.com
# Blog:https://www.cnblogs.com/eeexu123/ while true
do
if [ `netstat -tulnp|grep nginx|wc -l` -ne ];then
/etc/init.d/keepalived stop
fi
sleep
done

2、然后,直接运行此脚本,每五秒进行一次检测nginx服务是否在线。

 [root@lb01 scripts]# sh check_nginx.sh &
[]
[root@lb01 scripts]# ps -ef |grep check_nginx
root : pts/ :: sh check_nginx.sh
root : pts/ :: grep check_nginx

3、测试

1)查看主机VIP是否在线

  [root@lb01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:bb/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (32.2 MiB) TX bytes: (4.9 MiB) eth0: Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric: eth1 Link encap:Ethernet HWaddr :0C::2C::C5
inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:c5/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (790.8 KiB) TX bytes: (37.9 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)

2)停止nginx服务

 [root@lb01 ~]# /application/nginx/sbin/nginx -s stop
[root@lb01 ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp ::: :::* LISTEN /sshd
tcp ::: :::* LISTEN /master

3)查看VIP是否漂移

主机IP:

 1 [root@lb01 ~]# ifconfig
2 eth0 Link encap:Ethernet HWaddr 00:0C:29:2C:00:BB
3 inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
4 inet6 addr: fe80::20c:29ff:fe2c:bb/64 Scope:Link
5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
6 RX packets:41555 errors:0 dropped:0 overruns:0 frame:0
7 TX packets:26526 errors:0 dropped:0 overruns:0 carrier:0
8 collisions:0 txqueuelen:1000
9 RX bytes:33803135 (32.2 MiB) TX bytes:5182305 (4.9 MiB)
10
11 eth1 Link encap:Ethernet HWaddr 00:0C:29:2C:00:C5
12 inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
13 inet6 addr: fe80::20c:29ff:fe2c:c5/64 Scope:Link
14 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
15 RX packets:8854 errors:0 dropped:0 overruns:0 frame:0
16 TX packets:311 errors:0 dropped:0 overruns:0 carrier:0
17 collisions:0 txqueuelen:1000
18 RX bytes:811478 (792.4 KiB) TX bytes:38876 (37.9 KiB)
19
20 lo Link encap:Local Loopback
21 inet addr:127.0.0.1 Mask:255.0.0.0
22 inet6 addr: ::1/128 Scope:Host
23 UP LOOPBACK RUNNING MTU:65536 Metric:1
24 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
25 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
26 collisions:0 txqueuelen:0
27 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

备机IP

 1 [root@lb02 ~]# ifconfig
2 eth0 Link encap:Ethernet HWaddr 00:0C:29:93:72:8D
3 inet addr:10.0.0.6 Bcast:10.0.0.255 Mask:255.255.255.0
4 inet6 addr: fe80::20c:29ff:fe93:728d/64 Scope:Link
5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
6 RX packets:40535 errors:0 dropped:0 overruns:0 frame:0
7 TX packets:23552 errors:0 dropped:0 overruns:0 carrier:0
8 collisions:0 txqueuelen:1000
9 RX bytes:33425626 (31.8 MiB) TX bytes:4173830 (3.9 MiB)
10
11 eth0:1 Link encap:Ethernet HWaddr 00:0C:29:93:72:8D
12 inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
13 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
14
15 eth1 Link encap:Ethernet HWaddr 00:0C:29:93:72:97
16 inet addr:172.16.1.6 Bcast:172.16.1.255 Mask:255.255.255.0
17 inet6 addr: fe80::20c:29ff:fe93:7297/64 Scope:Link
18 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
19 RX packets:8608 errors:0 dropped:0 overruns:0 frame:0
20 TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
21 collisions:0 txqueuelen:1000
22 RX bytes:781127 (762.8 KiB) TX bytes:6646 (6.4 KiB)
23
24 lo Link encap:Local Loopback
25 inet addr:127.0.0.1 Mask:255.0.0.0
26 inet6 addr: ::1/128 Scope:Host
27 UP LOOPBACK RUNNING MTU:65536 Metric:1
28 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
29 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
30 collisions:0 txqueuelen:0
31 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

由上述可知,VIP发生漂移。keepalived触发脚本执行成功。

方法二:可以使用keepalived的配置文件来触发已写好的脚本

1、脚本内容如下:

 [root@lb01 scripts]# cat keep_nginx.sh
#!/bin/bash #-------------CopyRight-------------
# Name:check nginx server
# Version Number:1.00
# Type:sh
# Language:bash shell
# Date:--
# Author:sandy
# QQ:
# Email:eeexu123@.com
# Blog:https://www.cnblogs.com/eeexu123/ if [ `netstat -tulnp|grep nginx|wc -l` -ne ];then
/etc/init.d/keepalived stop
fi

2、将脚本加上可执行权限

[root@lb01 scripts]# chmod +x keep_nginx.sh 
 [root@lb01 scripts]# ll
总用量
-rw-r--r--. root root 7月 : check_nginx.sh
-rwxr-xr-x. root root 7月 : keep_nginx.sh

3、在主机的keepalived的配置文件上,做如下修改

  /etc/keepalived/keepalived.conf配置文件如下:

  绿色部分内容是新添加触发脚本

 ! Configuration File for keepalived

 global_defs {
notification_email {
eeexu123@.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout
router_id lb01
} vrrp_script chk_nginx_proxy {
script "/server/scripts/keep_nginx.sh" interval
weight
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.100/ dev eth0 label eth0:
}
32 track_script {
chk_nginx_proxy
}
}

4、说明:

vrrp_script chk_nginx_proxy {                    #定义vrrp脚本
script "/server/scripts/keep_nginx.sh" #执行keep_nginx.sh脚本,当nginx服务有问题时,就停止keepalived服务 interval 2 #间隔两秒检查一次
weight
}

track_script {                                     #触发检查
chk_nginx_proxy
}

5、测试

1)查看主机中的VIP是否在线

 [root@lb01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:bb/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (32.2 MiB) TX bytes: (4.9 MiB) eth0: Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric: eth1 Link encap:Ethernet HWaddr :0C::2C::C5
inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:c5/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (790.8 KiB) TX bytes: (37.9 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)

2)停止nginx服务

 [root@lb01 ~]# /application/nginx/sbin/nginx -s stop
[root@lb01 ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp ::: :::* LISTEN /sshd
tcp ::: :::* LISTEN /master

3)查看VIP是否漂移

主机IP:

 [root@lb01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:bb/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (32.2 MiB) TX bytes: (4.9 MiB) eth1 Link encap:Ethernet HWaddr :0C::2C::C5
inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:c5/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (792.4 KiB) TX bytes: (37.9 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)

备机IP

 [root@lb02 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::::8D
inet addr:10.0.0.6 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe93:728d/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (31.8 MiB) TX bytes: (3.9 MiB) eth0: Link encap:Ethernet HWaddr :0C::::8D
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric: eth1 Link encap:Ethernet HWaddr :0C::::
inet addr:172.16.1.6 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe93:/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (762.8 KiB) TX bytes: (6.4 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)

由上述可知,VIP发生漂移。keepalived触发脚本执行成功。

解决nginx负载均衡高可用keepalived只针对物理机的问题的更多相关文章

  1. JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

  2. Nginx负载均衡高可用

    1.   Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实 ...

  3. Nginx负载均衡高可用---架构

    1. Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现w ...

  4. nginx负载均衡高可用部署和代理配置

    nginx负载均衡高可用配置 服务器A:172.16.100.2 服务器B:172.16.100.3 首先先在两台服务器上分别安装好nginx和keepalived后,再进行下面的操作 配置keepa ...

  5. Keepalived实现Nginx负载均衡高可用

    第一章:keepalived介绍 VRRP协议 目的就是为了解决静态路由单点故障问题的 第二章: keepalived工作原理 2.1 作为系统网络服务的高可用功能(failover) keepali ...

  6. Nginx+Keepalived负载均衡高可用

    Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务  http 80 b.负载均衡(方向代理proxy) ...

  7. Nginx+keepalived实现负载均衡高可用配置

    1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务 ...

  8. Keepalived+Nginx实现负载均衡高可用

    一.负载均衡高可用 Nginx作为负载均衡器,所有请求都到了Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了避免负载均衡服务器的宕机 ...

  9. 23.Nginx+keepalived负载均衡高可用

    Nginx+keepalived负载均衡高可用 结构图 环境: 主 服务器:192.168.239.10 备 服务器:192.168.239.20 Web 服务器1:192.168.239.40 We ...

随机推荐

  1. java之快速排序

    //基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据 ...

  2. python自动化运维九:Playbook

    playbook:playbook 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.在 play 之中,一组机器被映射为定义好的角色.在 ansible 中,pla ...

  3. ecshop属性排序

    属性的排序有三个方式:sort_order, attr_price, goods_attr_id如果要修改的话,修改 includes/lib_goods.php文件的 get_goods_prope ...

  4. appium(8)-locator strategies

    locator strategies Finding and interacting with elements Appium supports a subset of the WebDriver l ...

  5. 遇到的一个Form表单自动提交问题解决办法

    Form 表单中只有一个 input 元素时按回车会默认提交表单.有的时候我们希望按回车可以进行列表查询,但是查询后表单被自动提交了,然后刷新了整个页面.这个时候就需要对这个 Form 表单处理一下以 ...

  6. 异常描述:hibernate懒加载中,用OpenSessionInViewFilter解决之后,同时对一个collection创建两个session访问导致异常(Illegal attempt to associate a collection with two open sessions)

    在保存的时候如果使用以下方法就会报错 解决:使用merge()方法就可以解决异常... merge()方法的解释: 传入的参数在数据库中不存在的时候会添加一条数据,根据主键判断已存在的时候会更新这条数 ...

  7. 写给精明Java开发者的测试技巧

    我们都会为我们的代码编写测试,不是吗?毫无疑问,我知道这个问题的答案可能会从 “当然,但你知道怎样才能避免写测试吗?” 到 “必须的!我爱测试”都有.接下来我会给你几个小建议,它们可以让你编写测试变得 ...

  8. wpf图片定点缩放

    去年犯小人,万事不顺,4月刚换工作,开始新工作 遇到一个小问题,需要读取图片,然后对图片进行定点缩放,很简答的逻辑,很简单的代码,但是,这尼玛我被wpf给坑了,这一坑就是三天 好了,很简单的一个UI ...

  9. ES6 对Number的扩展

    Number.isFinite(), Number.isNaN() ES6 在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法. Number.is ...

  10. hdu-5754 Life Winner Bo(博弈)

    题目链接: Life Winner Bo Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/ ...