Centos7+nginx+keepalived集群及双主架构案例
一、简介
1、用nginx做负载均衡,作为架构的最前端或中间层,随着日益增长的访问量,需要给负载均衡做高可用架构,利用keepalived解决单点风险,一旦 nginx宕机能快速切换到备份服务器
2、keepalived原理请参考如下链接
https://www.cnblogs.com/zhangxingeng/p/10595058.html
3、nginx+keepalived单主架构
4、nginx+keepalived双主架构案例
二、部署nginx+keepalived 集群
1、环境
注意:本次实验没有部署负载均衡和rs,只是部署keepalived+web,主要是为了实现效果,简化了很多配置
1.1、节点部署
节点 | 地址 | 服务 | 单主实例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、首先访问各站点
没问题
没问题
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
刷新页面如下:
查看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 刷新网页,发现切换回来了
6.4、实验环境为虚拟机,演示实验过程中一个问题
注意:如果是禁用网卡的方式,最好是在虚拟机上断开连接的方式测试。
因为在测试过程中,systemctl stop network 测试切换的时候出现不能切换,网络没有完全断开backup还能收到master的心跳,但是其他服务已经停用了下面演示:
访问vip就变成如下状态,没有进行故障切换
应该这样测试如下:断开网络连接的方式比较彻底了
三、部署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
}
}
这里附上两台节点的实例比较,请见下图:
4、配置nginx,同上
5、重启服务
systemctl restart keepalived
6、测试验证
6.1、首先看一下抓包情况
6.2、测试切换是否正常,这里测试就是以stop keepalived测试效果了
[root@web1 keepalived]# systemctl stop keepalived
效果
[root@web1 keepalived]# systemctl restart keepalived
切换回来
在来测试web2
[root@web2 keepalived]# systemctl stop keepalived
[root@web2 keepalived]# systemctl restart 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]#
切换的时候可以观察前端切换的效果
第二种方法就是是直接写脚本,这里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上
转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10721083.html
Centos7+nginx+keepalived集群及双主架构案例的更多相关文章
- 企业Nginx+Keepalived双主架构案例实战
通过上一次课程的学习,我们知道Nginx+keepalived主从配置,始终有一台服务器处于空余状态,那如何更好的利用起来呢,我们需要借助Nginx+keepalived双主架构来实现,如下图通过改装 ...
- FastDFS+nginx+keepalived集群搭建
安装环境 nginx-1.6.2 libfastcommon-master.zip FastDFS_v5.05.tar.gz(http://sourceforge.net/projects/fastd ...
- 企业级Nginx+Keepalived集群实战(双主架构)
随着Nginx在国内的发展潮流,越来越多的互联网公司都在使用Nginx,Nginx高性能.稳定性成为IT人士青睐的HTTP和反向代理服务器.Nginx负载均衡一般位于整个网站架构的最前端或者中间层,如 ...
- nginx+keepalived高可用及双主模式
高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...
- nginx+keepalived高可用及双主模式【h】
高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...
- Nginx+Keepalived 集群方案
1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...
- 构建企业级Nginx+Keepalived集群架构
随着Nginx在国内的发展潮流,越来越多的互联网公司都在使用Nginx. Nginx高性能.稳定性成为IT人士青睐的http和反向代理服务器,今天我们来实战构建Nginx+Keepalived高可用架 ...
- mysql集群(双主)
0.安装 所谓双主基本可以理解为两台服务器互为主备,其核心思路与主备配置相同. 服务器A: 内网IP: 10.44.94.219 服务器B: 内网IP: 10.44.94.97 1.配置服务器A lo ...
- keepalived + haproxy 实现web 双主模型的高可用负载均衡--转
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xz159065974.blog.51cto.com/8618592/140581 ...
随机推荐
- [Noi2015]软件包管理器 BZOJ4196
分析:水题 每次安装的时候和根节点求lca的过程中区间覆盖+区间查询 每次删除的时候查询子树中安装的数量+区间覆盖 附上代码: #include <cstdio> #include < ...
- 【Android】自己动手做个扫雷游戏
1. 游戏规则 扫雷是玩法极其简单的小游戏,点击玩家认为不存在雷的区域,标记出全部地雷所在的区域,即可获得胜利.当点击不包含雷的块的时候,可能它底下存在一个数,也可能是一个空白块.当点击中有数字的块时 ...
- 微服务架构 - SpringBoot整合Jooq和Flyway
在一次学习分布式跟踪系统zipkin中,发现了jooq这个组件,当时不知这个组件是干嘛的,后来抽空学习了一下,感觉这个组件还挺用的.它主要有以下作用: 通过DSL(Domain Specific La ...
- python中的shutil模块
目录 python中的shutil模块 目录和文件操作 归档操作 python中的shutil模块 shutil模块对文件和文件集合提供了许多高级操作,特别是提供了支持文件复制和删除的函数. 目录和文 ...
- .net core 并发下的线程安全问题
抱歉,其实内容并不如题!!!真正的题目应该为<.net core 并发下由于注入模式引起的线程安全问题> 背景(写测试demo所出现的异常,供大家学习与拍砖): .net core web ...
- Python调用ansible API系列(一)获取资产信息
你想让ansible工作首先就需要设置资产信息,那么我们如何通过使用Python调取Ansible的API来获取资产信息呢? 要提前准备一个hosts文件 获取组或者主机 #!/usr/bin/env ...
- 一个小实例理解js 原型和继承
导语1:一个构造函数的原型对象,其实就是这个构造函数的一个属性而已,属性名叫prototype,值是一个对象,对象中有一些属性和方法,所以每个构造函数的实例对象都拥有这些属性和方法的使用权. 导语2: ...
- Java设计模式小议之1------- 迭代器模式
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节. 类型:行为类模式 这里用一个具体的案例来说明一下迭代器模式的简单使用 我们都知道在商店中,经常要把商品放到书架上,并将商品的 ...
- 设计模式之责任链模式——Java语言描述
责任链模式为请求创建了一个接受者对象的链.这种模式给予请求的类型,对请求的发送者和接受者进行解耦.这种类型的设计模式属于行为模式.在这种模式下,通常每个接收者都包含对另一个接收者的引用.如果一个对象不 ...
- Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)
目录 1. 数据资源准备 2. 编译第三方库 3. 编译GDAL 4. 编译OSG 1) CMAKE_INSTALL_PREFIX: 2) BUILD_OSG_EXAMPLES/BUILD_MFC_ ...