参考:https://blog.csdn.net/qq_14940627/article/details/79998931
一、修改node1与node2的keepalived配置文件
14-18行,定义了一个vrrp脚本
脚本名字为chk_file,脚本每隔1s检测一次,检测内容是/etc/keepalived/down如果文件存在,返回1,权重-2,当前backup比master权重低1,当master权重-2,backup权重将比master高1,VIP转移
33-35行,在vrrp实例中追踪脚本(我的理解是就好比上面定义了函数,下面调用一样)
[root@node1 ~]# cat /etc/keepalived/keepalived.conf | grep -v "#"
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from kaadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
}
vrrp_script chk_file {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass reJggig
}
virtual_ipaddress {
192.168.183.177
}
track_script {
chk_file
}
}
node1和node2中都要添加vrrp脚本,并在vrrp实例中追踪脚本
二、重启node1和node2的keepalived服务
[root@node1 ~]# systemctl restart keepalived.service ; ssh node2 'systemctl restart keepalived.service'
三、查看node1和node2的ip情况
现在VIP在node1上
[root@node1 ~]# ip a ; ssh node2 'ip a'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:7d:cb:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.183.175/24 brd 192.168.183.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.183.177/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe7d:cbf8/64 scope link
valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:fb:3b:50 brd ff:ff:ff:ff:ff:ff
inet 192.168.183.176/24 brd 192.168.183.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fefb:3b50/64 scope link
valid_lft forever preferred_lft forever
四、在/etc/keepalived目录下面创建down文件,再次查看node1与node2的IP情况
发现VIP没有切过去,node2中有如下错误:
[root@node2 keepalived]# journalctl -xe -l
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Registering Kernel netlink command channel
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Registering gratuitous ARP shared channel
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Opening file '/etc/keepalived/keepalived.conf'.
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: WARNING - default user 'keepalived_script' for script execution does not exist - please
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Unable to access script `[[`
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Disabling track script chk_file since not found
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: VRRP_Instance(VI_1) removing protocol VIPs.
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Using LinkWatch kernel netlink reflector...
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: VRRP_Instance(VI_1) Entering BACKUP STATE
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
11月 17 16:01:01 node2 systemd[1]: Started Session 23 of user root.
参考这位大佬得知不能这么些,得写个脚本
参考链接:https://blog.csdn.net/qq_14940627/article/details/79998931
脚本改成如下:
vrrp_script chk_file {
# script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
script "/etc/keepalived/chk_file.sh"
interval 1
weight -2
}
[root@node1 keepalived]# cat chk_file.sh
#!/bin/bash
#[ -f /etc/keepalived/down ] && weight -2 || exit 0
if [ -f /etc/keepalived/down ]; then
exit 1
fi
exit 0
[root@node1 keepalived]# chmod +x chk_file.sh
五、然后重启node1和node2的keepalived
[root@node1 keepalived]# !103
systemctl restart keepalived.service ; ssh node2 'systemctl restart keepalived.service'
六、在node1的/etc/keepalived目录下面创建down文件,查看VIP变动情况
[root@node1 keepalived]# touch down
[root@node1 keepalived]# ip a;ssh node2 'ip a'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:7d:cb:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.183.175/24 brd 192.168.183.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:fb:3b:50 brd ff:ff:ff:ff:ff:ff
inet 192.168.183.176/24 brd 192.168.183.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.183.177/32 scope global ens33
valid_lft forever preferred_lft forever
七、删除node1上面的down文件,观察VIP是否会回来,默认是抢占模式,谁优先级高谁就是王
[root@node1 keepalived]# ls
chk_file.sh down keepalived.conf keepalived.conf_bak
[root@node1 keepalived]# rm down -f
[root@node1 keepalived]# ip a;ssh node2 'ip a'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:7d:cb:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.183.175/24 brd 192.168.183.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.183.177/32 scope global ens33
valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:fb:3b:50 brd ff:ff:ff:ff:ff:ff
inet 192.168.183.176/24 brd 192.168.183.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
关于这个weight值影响优先级的原理可以参考:https://blog.csdn.net/hzsunshine/article/details/62041036