Centos7+nginx+keepalived集群及双主架构案例

时间:2023-03-08 18:45:43

一、简介

  1、用nginx做负载均衡,作为架构的最前端或中间层,随着日益增长的访问量,需要给负载均衡做高可用架构,利用keepalived解决单点风险,一旦 nginx宕机能快速切换到备份服务器

  2、keepalived原理请参考如下链接

  https://www.cnblogs.com/zhangxingeng/p/10595058.html

  3、nginx+keepalived单主架构

Centos7+nginx+keepalived集群及双主架构案例

  4、nginx+keepalived双主架构案例

Centos7+nginx+keepalived集群及双主架构案例

二、部署nginx+keepalived 集群

  1、环境

    注意:本次实验没有部署负载均衡和rs,只是部署keepalived+web,主要是为了实现效果,简化了很多配置

    1.1、节点部署

nginx+keepalived架构,包含单主集群和双主集群
节点  地址 服务 单主实例VI_1 双主实例VI_1 双主实例VI_2
web1 192.168.216.51 keepalived+web服务 MASTER MASTER BAKCUP
web2 192.168.216.52 keepalived+web服务 BACKUP BACKUP MASTER
clent   物理机 浏览器      

    

    

    

    1.2、部署前

      1.2.1、各节点时间同步,可以是设置ntp或者手动同一时间,且不能超过1s的差距

       1.2.2、关闭防火墙及selinux

       1.2.3、节点名称对应ip地址写入hosts文件

       1.2.4、节点间root可以基于密钥认证的ssh服务完成互相通信(非必需)

    1.3、keepalived的目录机构

 [root@web1 keepalived]# rpm -ql keepalived
/etc/keepalived
/etc/keepalived/keepalived.conf    #主配置文件
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/lib/systemd/system/keepalived.service
/usr/libexec/keepalived
/usr/sbin/keepalived
/usr/share/doc/keepalived-1.3.
/usr/share/doc/keepalived-1.3./AUTHOR
/usr/share/doc/keepalived-1.3./CONTRIBUTORS
/usr/share/doc/keepalived-1.3./COPYING
/usr/share/doc/keepalived-1.3./ChangeLog
/usr/share/doc/keepalived-1.3./NOTE_vrrp_vmac.txt
/usr/share/doc/keepalived-1.3./README
/usr/share/doc/keepalived-1.3./TODO
/usr/share/doc/keepalived-1.3./keepalived.conf.SYNOPSIS
/usr/share/doc/keepalived-1.3./samples
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.HTTP_GET.port
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.IPv6
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.SMTP_CHECK
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.SSL_GET
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.fwmark
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.inhibit
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.misc_check
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.misc_check_arg
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.quorum
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.sample
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.status_code
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.track_interface
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.virtual_server_group
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.virtualhost
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp.localcheck
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp.lvs_syncd
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp.routes
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp.rules
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp.scripts
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp.static_ipaddress
/usr/share/doc/keepalived-1.3./samples/keepalived.conf.vrrp.sync
/usr/share/doc/keepalived-1.3./samples/sample.misccheck.smbcheck.sh
/usr/share/man/man1/genhash..gz
/usr/share/man/man5/keepalived.conf..gz
/usr/share/man/man8/keepalived..gz
/usr/share/snmp/mibs/KEEPALIVED-MIB.txt
/usr/share/snmp/mibs/VRRP-MIB.txt
/usr/share/snmp/mibs/VRRPv3-MIB.txt
[root@web1 keepalived]#

    1.4、软件环境

 [root@web1 keepalived]# rpm -qa nginx
nginx-1.12.-.el7.x86_64
[root@web1 keepalived]# rpm -qa keepalived
keepalived-1.3.-.el7_6.x86_64
[root@web1 keepalived]# cat /etc/redhat-release
CentOS Linux release 7.3. (Core)
[root@web1 keepalived]#

  2、安装软件

    yum install nginx keepalived pcre-devel  -y

    我这里已经安装了pcre所以具体依赖如下:

 Dependencies Resolved

 ====================================================================================================================
Package Arch Version Repository Size
====================================================================================================================
Installing:
keepalived x86_64 1.3.-.el7_6 updates k
Installing for dependencies:
net-snmp-agent-libs x86_64 :5.7.-.el7 base k
Updating for dependencies:
net-snmp-libs x86_64 :5.7.-.el7 base k Transaction Summary
====================================================================================================================
Install Package (+ Dependent package)
Upgrade ( Dependent package)
 Dependencies Resolved

 =============================================================================================================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================================================================================================
Installing:
nginx x86_64 :1.12.-.el7 epel k
Installing for dependencies:
nginx-all-modules noarch :1.12.-.el7 epel k
nginx-filesystem noarch :1.12.-.el7 epel k
nginx-mod-http-geoip x86_64 :1.12.-.el7 epel k
nginx-mod-http-image-filter x86_64 :1.12.-.el7 epel k
nginx-mod-http-perl x86_64 :1.12.-.el7 epel k
nginx-mod-http-xslt-filter x86_64 :1.12.-.el7 epel k
nginx-mod-mail x86_64 :1.12.-.el7 epel k
nginx-mod-stream x86_64 :1.12.-.el7 epel k
Updating for dependencies:
openssl x86_64 :1.0.2k-.el7_6. updates k
openssl-libs x86_64 :1.0.2k-.el7_6. updates 1.2 M Transaction Summary
=============================================================================================================================================================================================================================================
Install Package (+ Dependent packages)
Upgrade ( Dependent packages)

  3、配置keepalived高可用,修改主配置文件

    3.1、备份配置文件

      两台均备份

    cp /etc/keepalived/keepalived.conf keepalived.conf.bak

    3.2、配置keepalived-MASTER

      web1-51

  

 [root@web1 keepalived]# cat keepalived.conf
! Configuration File for keepalived global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout
# router_id LVS_DEVEL
# vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval
vrrp_gna_interval
} #VIP1
vrrp_instance VI_1 {    #实例名称保持一致
state MASTER      #主备配置为MASTER----BACKUP
interface ens33    #查看自己的网卡名称修改为它  
virtual_router_id   #vrid 路由标识符,主备保持一致 
priority 100      #优先级值越大越高
advert_int
authentication {    #认证,默认即可,主备保持一致
auth_type PASS
auth_pass
}
virtual_ipaddress {  #vip,主备一致,可以为多vip
192.168.216.200
}
}

    把配置文件发送到52节点

    scp /etc/keepalived/keppalived.conf 192.168.216.52:/etc/keepalived/keepalived.conf

    

    web2-52

      只需要修改

 state BACKUP
priority

    

    

  4、配置nginx

    web1

 [root@web1 keepalived]# cat /usr/share/nginx/html/index.html
this is web1

    web2

 [root@web2 keepalived]# cat /usr/share/nginx/html/index.html 
2 thsi web2

  5、启动服务并开机自启

    systemctl start nginx

    systemctl start keepalived

    systemctl enable nginx

    systemctl enable keepalived

  6、测试

    6.1、首先访问各站点

Centos7+nginx+keepalived集群及双主架构案例

    没问题

Centos7+nginx+keepalived集群及双主架构案例

    没问题

Centos7+nginx+keepalived集群及双主架构案例

    6.2、VIP也没有问题,在备服务器抓包看看,每1s 宣告一次,状态正常

 [root@web2 keepalived]# tcpdump -i ens33 host 192.168.216.51
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size bytes
::22.470521 IP web1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid , prio , authtype simple, intvl 1s, length
::23.472862 IP web1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid , prio , authtype simple, intvl 1s, length
::24.473482 IP web1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid , prio , authtype simple, intvl 1s, length
::25.475482 IP web1 > vrrp.mcast.net: VRRPv2, Advertisement, vrid , prio , authtype simple, intvl 1s, length

    6.3、现在可以开始stop keepalived,测试主备切换

      [root@web1 keepalived]# systemctl stop keepalived

      刷新页面如下:

Centos7+nginx+keepalived集群及双主架构案例

      查看web2的ip信息,ifconfig看不到,可以使用ip addr list 命令查询

 [root@web2 keepalived]# ip ad
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :0c:::de: brd ff:ff:ff:ff:ff:ff
inet 192.168.216.52/ brd 192.168.216.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.216.200/32 scope global ens33 #vip已经漂移过来了
valid_lft forever preferred_lft forever
inet6 fe80:::80e8:f210:1e24/ scope link
valid_lft forever preferred_lft forever
inet6 fe80:::e73d:1ef:2e1/ scope link tentative dadfailed
valid_lft forever preferred_lft forever
: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu qdisc noqueue state DOWN qlen
link/ether ::::a5:7c brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/ brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
: virbr0-nic: <BROADCAST,MULTICAST> mtu qdisc pfifo_fast master virbr0 state DOWN qlen
link/ether ::::a5:7c brd ff:ff:ff:ff:ff:ff
[root@web2 keepalived]#

    [root@web1 keepalived]# systemctl restart keepalived  刷新网页,发现切换回来了

Centos7+nginx+keepalived集群及双主架构案例 

    6.4、实验环境为虚拟机,演示实验过程中一个问题

      注意:如果是禁用网卡的方式,最好是在虚拟机上断开连接的方式测试。

      因为在测试过程中,systemctl stop network 测试切换的时候出现不能切换,网络没有完全断开backup还能收到master的心跳,但是其他服务已经停用了下面演示:

Centos7+nginx+keepalived集群及双主架构案例

    访问vip就变成如下状态,没有进行故障切换

Centos7+nginx+keepalived集群及双主架构案例

    应该这样测试如下:断开网络连接的方式比较彻底了

Centos7+nginx+keepalived集群及双主架构案例

三、部署nginx+keepalived双主架构

  1、环境

  和上面一个实验一样的环境就是改成双主

  2、安装软件

  同上

  3、配置keepalived

   web1配置

 [root@web1 keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout
# router_id LVS_DEVEL
# vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval
vrrp_gna_interval
}
#vrrp_script chk_nginx{
# script "/data/sh/check_nginx.sh"
# interval
# weight
#}
#VIP1
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.200
}
}
#track_script {
# chk_nignx
#} #VIP2,新增配置,新增一个实例VI_2
vrrp_instance VI_2 {
state BAKCUP
interface ens33
virtual_router_id 51
priority 90
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.210
}
}

   web2配置

  [root@web2 keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout
# router_id LVS_DEVEL
# vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval
vrrp_gna_interval
}
#vrrp_script chk_nginx{
# script "/data/sh/check_nginx.sh"
# interval
# weight
#}
#VIP1
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.200
}
}
#track_script {
# chk_nignx
#}
#VIP2,新增的实例,VI_2
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.210
}
}

    这里附上两台节点的实例比较,请见下图:

Centos7+nginx+keepalived集群及双主架构案例

  4、配置nginx,同上

  5、重启服务

    systemctl restart keepalived

  6、测试验证

   6.1、首先看一下抓包情况

Centos7+nginx+keepalived集群及双主架构案例 

   6.2、测试切换是否正常,这里测试就是以stop keepalived测试效果了

      [root@web1 keepalived]# systemctl stop keepalived

      效果

Centos7+nginx+keepalived集群及双主架构案例

      [root@web1 keepalived]# systemctl restart  keepalived

      切换回来

Centos7+nginx+keepalived集群及双主架构案例

    在来测试web2

    [root@web2 keepalived]# systemctl stop keepalived

Centos7+nginx+keepalived集群及双主架构案例

    [root@web2 keepalived]# systemctl restart keepalived

Centos7+nginx+keepalived集群及双主架构案例

四、高可用之调用辅助脚本进行资源监控,并根据监控的结果状态实现动态调整

  1、动态调整keepalived

    检测keepalived主要是用在维护过程中,比如升级,停掉服务是非常不理想的,可以用vrrp脚本,实现不停服务地址来回转换的方法

    注意:其中定义脚本有两种方法:

    第一种:脚本放在目录里,配置文件指定脚本路径

      这种模式生效了

 [root@web1 keepalived]# vim keepalived.conf 

 ! Configuration File for keepalived

 global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout
router_id LVS_DEVEL
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval
# vrrp_gna_interval
}
20 vrrp_script chk_maintanance {
21
22 script "/etc/keepalived/chkdown.sh"  #脚本路径
23 interval 1    #间隔1s执行一次
24 weight -20    #失败的权重减20
} #VIP1
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.200
}
41 track_script {
42 chk_maintanance
43 }
44 }
#VIP2
vrrp_instance VI_2 {
state BAKCUP
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.210
}
59 track_script {
60 chk_maintanance
61 }
}

    脚本如下:

 [root@web1 keepalived]# cat chkdown.sh
#!/bin/bash [[ -f /etc/keepalived/down ]]&&exit || exit [root@web1 keepalived]# pwd
/etc/keepalived
[root@web1 keepalived]#

    验证:

23 [root@web1 keepalived]# touch down
[root@web1 keepalived]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Mon -- :: CST; 1h 25min ago
Process: ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=/SUCCESS)
Main PID: (keepalived)
CGroup: /system.slice/keepalived.service
├─ /usr/sbin/keepalived -D
├─ /usr/sbin/keepalived -D
└─ /usr/sbin/keepalived -D Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 f...6.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: /etc/keepalived/chkdown.sh exited with status 1 #改变状态为1,然后降低优先级,这里-l应该可以看到,下面又重新-l看了一下
Apr :: web1 Keepalived_vrrp[]: VRRP_Script(chk_maintanance) failed
Hint: Some lines were ellipsized, use -l to show in full.

#之后重新收一下测试的状态
[root@web1 keepalived]# systemctl status keepalived -l ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2019-04-22 12:43:34 CST; 1h 33min ago Process: 40897 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS) Main PID: 40898 (keepalived) CGroup: /system.slice/keepalived.service ├─40898 /usr/sbin/keepalived -D ├─40899 /usr/sbin/keepalived -D └─40900 /usr/sbin/keepalived -D Apr 22 14:16:29 web1 Keepalived_vrrp[40900]: Sending gratuitous ARP on ens33 for 192.168.216.200 Apr 22 14:16:35 web1 Keepalived_vrrp[40900]: /etc/keepalived/chkdown.sh exited with status 1 Apr 22 14:16:35 web1 Keepalived_vrrp[40900]: VRRP_Script(chk_maintanance) failed Apr 22 14:16:36 web1 Keepalived_vrrp[40900]: VRRP_Instance(VI_2) Changing effective priority from 90 to 70 Apr 22 14:16:36 web1 Keepalived_vrrp[40900]: VRRP_Instance(VI_1) Changing effective priority from 100 to 80 Apr 22 14:16:36 web1 Keepalived_vrrp[40900]: /etc/keepalived/chkdown.sh exited with status 1 Apr 22 14:16:37 web1 Keepalived_vrrp[40900]: VRRP_Instance(VI_1) Received advert with higher priority 90, ours 80 Apr 22 14:16:37 web1 Keepalived_vrrp[40900]: VRRP_Instance(VI_1) Entering BACKUP STATE Apr 22 14:16:37 web1 Keepalived_vrrp[40900]: VRRP_Instance(VI_1) removing protocol VIPs. Apr 22 14:16:37 web1 Keepalived_vrrp[40900]: /etc/keepalived/chkdown.sh exited with status 1

46 [root@web1 keepalived]# rm -rf down                                       #   删除down文件,重新切换回来
[root@web1 keepalived]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Mon -- :: CST; 1h 25min ago
Process: ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=/SUCCESS)
Main PID: (keepalived)
CGroup: /system.slice/keepalived.service
├─ /usr/sbin/keepalived -D
├─ /usr/sbin/keepalived -D
└─ /usr/sbin/keepalived -D Apr :: web1 Keepalived_vrrp[]: /etc/keepalived/chkdown.sh exited with status
Apr :: web1 Keepalived_vrrp[]: /etc/keepalived/chkdown.sh exited with status
Apr :: web1 Keepalived_vrrp[]: /etc/keepalived/chkdown.sh exited with status
Apr :: web1 Keepalived_vrrp[]: /etc/keepalived/chkdown.sh exited with status
Apr :: web1 Keepalived_vrrp[]: /etc/keepalived/chkdown.sh exited with status
Apr :: web1 Keepalived_vrrp[]: /etc/keepalived/chkdown.sh exited with status
Apr :: web1 Keepalived_vrrp[]: VRRP_Script(chk_maintanance) succeeded          #检查成功,改变优先级,切换vi_1的实例为master
Apr :: web1 Keepalived_vrrp[]: VRRP_Instance(VI_1) Changing effective priority from to
Apr :: web1 Keepalived_vrrp[]: VRRP_Instance(VI_2) Changing effective priority from to
Apr :: web1 Keepalived_vrrp[]: VRRP_Instance(VI_1) forcing a new MASTER election
[root@web1 keepalived]#

      

    

    切换的时候可以观察前端切换的效果

Centos7+nginx+keepalived集群及双主架构案例

Centos7+nginx+keepalived集群及双主架构案例

    第二种方法就是是直接写脚本,这里keepalived版本是keepalived-1.3.5-8.el7_6.x86_64,没有生效,具体不清楚为什么。

 [root@web2 keepalived]# vim keepalived.conf 

         script "
! Configuration File for keepalived global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout
router_id LVS_DEVEL1
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval
# vrrp_gna_interval
}
21 vrrp_script chk_maintanance {
22 script "[[ -f /etc/keepalived/down ]]&&exit 1 || exit 0"
23 interval 1
24 weight -20
25 } #VIP1
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.200
}
43 track_script {
44 chk_maintanance
45 }
}
#VIP2
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.210
}
61 track_script {
62 chk_maintanance
63 }
}

  2、检测nginx是否存活

    配置web1/web2 都添加如下标红代码,并添加脚本

    

 [root@web1 keepalived]# vim keepalived.conf 

 #     acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout
router_id LVS_DEVEL
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval
# vrrp_gna_interval
}
vrrp_script chk_maintanance { script "/etc/keepalived/chkdown.sh"
interval
weight -
}
vrrp_script chk_nginx {
23 script "/etc/keepalived/chknginx.sh"
24 interval 1
25 weight -20
26 } #VIP1
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.200
}
track_script {
chk_maintanance
}
45 track_script {
46 chk_nginx
47 }
}
#VIP2
vrrp_instance VI_2 {
state BAKCUP
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.216.210
}
track_script {
chk_maintanance
}
66 track_script {
67 chk_nginx
}
}

    脚本

 [root@web1 keepalived]# ll
total
-rwxr-xr-x root root Apr : chkdown.sh
-rwxr-xr-x root root Apr : chknginx.sh
-rw-r--r-- root root Apr : keepalived.conf
-rw-r--r-- root root Apr : notify.sh
[root@web1 keepalived]# cat chknginx.sh
#!/bin/bash #auto check nginx process
# by zxg killall - nginx
if [[ $? -ne ]];then
systemctl keepalived stop
fi
[root@web1 keepalived]#

    监测,手动stop nginx

 [root@web1 keepalived]# systemctl stop nginx
[root@web1 keepalived]# systemctl status keepalived -l
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Mon -- :: CST; 27min ago
Process: ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=/SUCCESS)
Main PID: (keepalived)
CGroup: /system.slice/keepalived.service
├─ /usr/sbin/keepalived -D
├─ /usr/sbin/keepalived -D
└─ /usr/sbin/keepalived -D Apr :: web1 Keepalived_vrrp[]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
18 Apr 22 15:27:36 web1 Keepalived_vrrp[58764]: /etc/keepalived/chknginx.sh exited with status 1
19 Apr 22 15:27:36 web1 Keepalived_vrrp[58764]: VRRP_Script(chk_nginx) failed
20 Apr 22 15:27:37 web1 Keepalived_vrrp[58764]: VRRP_Instance(VI_1) Changing effective priority from 100 to 80
21 Apr 22 15:27:37 web1 Keepalived_vrrp[58764]: VRRP_Instance(VI_2) Changing effective priority from 90 to 70
22 Apr 22 15:27:37 web1 Keepalived_vrrp[58764]: /etc/keepalived/chknginx.sh exited with status 1
[root@web1 keepalived]# systemctl start nginx
[root@web1 keepalived]# systemctl status keepalived -l
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Mon -- :: CST; 28min ago
Process: ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=/SUCCESS)
Main PID: (keepalived)
CGroup: /system.slice/keepalived.service
├─ /usr/sbin/keepalived -D
├─ /usr/sbin/keepalived -D
└─ /usr/sbin/keepalived -D 37 Apr 22 15:28:12 web1 Keepalived_vrrp[58764]: VRRP_Instance(VI_1) forcing a new MASTER election
38 Apr 22 15:28:13 web1 Keepalived_vrrp[58764]: VRRP_Instance(VI_1) Transition to MASTER STATE
39 Apr 22 15:28:14 web1 Keepalived_vrrp[58764]: VRRP_Instance(VI_1) Entering MASTER STATE
40 Apr 22 15:28:14 web1 Keepalived_vrrp[58764]: VRRP_Instance(VI_1) setting protocol VIPs.
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
Apr :: web1 Keepalived_vrrp[]: Sending gratuitous ARP on ens33 for 192.168.216.200
[root@web1 keepalived]#

    网页效果同上,就是stop nginx时候观察是否切换到web2上

Centos7+nginx+keepalived集群及双主架构案例

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10721083.html