1 )环境准备
yum install keepalived
setenforce 0
临时关闭 vim /etc/sysconfig/selinux
编辑 SELINUX=disabled
永久关闭systemctl stop firewalld
关闭 systemctl disable firewalld
关闭自启动2 ) 相关配置说明
rpm -ql keepalived
vim /etc/keepalived/keepalived.conf
global_defs
块中,决定了全局属性,全局配置, 对整个 keepalived 生效global_defs { notification_email { # 这里可以写多个邮箱, 确保服务器在内网并且邮箱可收到当前服务器发送的邮件 admin@baidu.com master@baidu.com } notification_email_from ka@baidu.com # 填写自己的邮箱 smtp_server 192.168.184.200 smtp_connect timeout 30 # 连接邮件服务器时的超时时长 router_id Nginx # 这里 router_id 自己起个名字 # vrrp_skip_check_adv_addr # 以下都注释掉 # vrrp_strict # 严格的vrrp限制,可以注释掉,可能会有绑定好了,但ping不通的问题,所以注释了 # vrrp_garp_interval 0 # vrrp_gna_interval 0 }
vrrp_instance Nginx_1
块,是vrrp的实例,名称叫做 Nginx_1 这个自己修改vrrp instance Nginx_1 { state MASTER # 标记是 master 还是 backup interface ens33 # 当前服务器需要绑定的网卡,指定一块网卡, 根据实际情况指定内网网卡(184.30这块) virtual_router_id 51 # 标识虚拟路由id,可以自己写,要确保相同名称的实例,这里的id是一样的 priority 100 # 指定优先级,值越大,转移优先级越高 advert_int 1 authentication { auth_type PASS # 认证方式,通过密码 auth_pass 1111 } virtual_ipaddress { # 虚拟的ip地址,下面可以填入多个,VIP 也可以就填一个,按照之前设计 192.168.200.50 } }
global_defs { notification_email { admin@baidu.com master@baidu.com } notification_email_from ka@baidu.com smtp_server 192.168.184.200 smtp_connect timeout 30 # 连接邮件服务器时的超时时长 router_id Nginx # vrrp_skip_check_adv_addr # vrrp_strict # vrrp_garp_interval 0 # vrrp_gna_interval 0 } vrrp instance Nginx_1 { # 这里要和 master 配置成同一个实例名称,否则不会成功 state BACKUP # 注意这里 interface ens33 # 根据实际情况指定内网网卡(184.40这块) virtual_router_id 51 # 同 master 一致,才能保证转移 priority 98 # 这个优先级较小 advert_int 1 authentication { auth_type PASS # 认证方式,通过密码 auth_pass 1111 } virtual_ipaddress { # 虚拟的ip地址,下面可以填入多个,VIP 也可以就填一个,按照之前设计 192.168.200.50 } }
tail -f /var/log/messages
systemctl start keepalived
Starting Keepalived v1.3.5 (03/19,2017),git commit v1.3.5-6 g6fa32f2 这里可以看到软件版本 Opening file '/etc/keepalived/keepalived.conf' 这里正在打开配置文件 Starting Healthcheck child process, pid=3968 这里进行健康检查 Starting VRRP child process, pid=3969 这里启动 VRRP 协议 Keepalived healthcheckers[3968]: Opening file '/etc/keepalived/keepalived.conf Registering Kernel netlink reflector Registering Kernel netlink command channel Registering gratuitous ARP shared channel Opening file '/etc/keepalived/keepalived.conf' Started LVS and VRRP High Availability Monitor VRRP Instance(Nginx 1) removing protocol VIPs. Using LinkWatch kernel netlink reflector... VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)] VRRP_Instance(Nginx_1) Transition to MASTER STATE # 注意这里,进入 master 状态 VRRP_Instance(Nginx_1) Entering MASTER STATE VRRP_Instance(Nginx_1) setting protocol IPs. # 注意这里,设置 ip Sending gratuitous ARP on ens33 for 192.168.184.50 # 配置184.50到当前节点 VRRP_Instance(Nginx_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.184.50 # 不停发送信息 Sending gratuitous ARP on ens33 for 192.168.184.50 Sending gratuitous ARP on ens33 for 192.168.184.50
ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1 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: mtu 1500 qdisc pfifo fast state UP qlen 1 000 link/ether 00:0c:29:e1:51:9c brd ff:ff:ff:ff:ff:ff inet 192.168.184.30/24 brd 192.168.184.255 scope global ens33 valid lft forever preferred lft forever inet 192.168.184.50/32 scope global ens33 valid lft forever preferred lft forever inet6 fe80::e2f8:ff8a:c97a:2368/64 scope link valid lft forever preferred lft forever
inet 192.168.184.50/32 scope global ens33
VRRP_Instance(Nginx_1) Received advert with higher priority 100, ours 98
ip a
时,184.40 是不会有 184.50 的VIP信息的3 )模拟主节点宕机
systemctl stop keepalived
或 $ reboot
ip a
可以看到 184.50 已经有了vrrp_instance Nginx_1
段中nopreempt
并且 都配置成 state BACKUP,没有 MASTER 了4 )日志管理
# Options for keepalived. See `keepalived --help' output and keepalived(8) and # keepalived.conf(5) man pages for a list of all options. Here are the most # common ones : # # --vrrp -P Only run with VRRP subsystem. # --check -C Only run with Health-checker subsystem. # --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop. # --dont-release-ipvs -I Dont remove IPVS topology on daemon stop. # --dump-conf -d Dump the configuration data. # --log-detail -D Detailed log messages. # --log-facility -S 0-7 Set local syslog facility (default=LOG DAEMON) # KEEPALIVED OPTIONS="-D -d -S 0" # 修改这里,默认是 -D
KEEPALIVED OPTIONS="-D -d -S 0"
将 日志文件 放入 -S 中vim /etc/rsyslog.conf
更改日志的存放位置local7.* /var/log/boot.log local0.* /var/log/keepalived/keepalived.log
systemctl restart rsyslog
重启日志服务systemctl restart keepalived
重启 keepalivedcd /var/log/keepalived/ && ll
下发现存在 keepalived.log 文件 1 ) 原理
2 ) 脚本
vim nginx_health.sh
用于监测 nginx#!/bin/bash # ps -ef | grep nginx | grep -v grep &> /dev/null if [ $? -ne 0 ];then killall keepalived fi
$?
表示 上一行命令的执行结果ps -ef | grep nginx | grep -v grep &> /dev/null
再执行 $ $?
这里是 0ps -ef | grep nginx | grep -v grep &> /dev/null
再执行 $ $?
这里是 1 (非零)chmod +x nginx_health.sh