一、Keepalived介绍
Keepalived软件主要是通过VRRP协议实现高可用功能.VRRP是 Virtual Router Redundanacy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,他能保证当个别节点宕机时,整个网络可以不间断的运行。
二、Keepalived服务的三个重要功能
1、管理LVS负载均衡软件
2、实现对LVS集群节点健康检查功能(healthcheck)
3、作为系统网络服务的高可用功能(failover)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三、Keepalived高可用故障切换转移原理
keepalived高可用功能实现的简单原理为:两台主机同时安装好keepalived软件并启动服务,开始正常工作。由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动接管回它原来处理的工作,角色Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。
四、Keepalived高可用服务搭建准备
1、硬件环境准备
两台Keepalived服务器(一台master、一台slave),两台WEB服务器
2、安装Keepalived
两台服务器上同时安装
[root@bigdata opt]# tar -zxvf keepalived-1.4.2.tar.gz
安装依赖插件:
[root@bigdata keepalived-1.4.2]# yum install -y gcc openssl-devel popt-devel
[root@bigdata keepalived-1.4.2]# ./configure --prefix=/opt/keepalived-1.4.2
[root@bigdata keepalived-1.4.2]# make && make install
修改配置文件:
# cd /opt/keepalived-1.4.2/etc/keepalived
【Master】配置:
[root@bigdata keepalived]# vim keepalived_master.conf
! Configuration File for keepalived
global_defs {
#一个没重复的名字即可
router_id zhaosj_master
}
#检测nginx是否运行
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
# 此处不设置为MASTER,通过priority来竞争master
state MASTER
# 网卡名字,文章下方会给出如何获取网卡名字的方法
interface eth0
# 同一个keepalived集群的virtual_router_id相同
virtual_router_id 51
# 权重,master要大于slave
priority 100
# 主备通讯时间间隔
advert_int 1
# 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# 本机ip
unicast_src_ip 192.168.109.128
unicast_peer {
# 其他机器ip
192.168.0.189
}
# 设置nopreempt防止抢占资源
nopreempt
# 主备保持一致
authentication {
auth_type PASS
auth_pass 1111
}
# 与上方nginx运行状况检测呼应
track_script {
chk_nginx
}
virtual_ipaddress {
# 虚拟ip地址(VIP,一个尚未占用的内网ip即可)
192.168.200.16
192.168.200.17
192.168.200.18
}
}
}
配置【Slave】:
[root@bigdata keepalived]# vim keepalived_slave.conf
! Configuration File for keepalived
global_defs {
#一个没重复的名字即可
router_id zhaosj_slave
}
#检测nginx是否运行
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
vrrp_instance VI_1 {
# 此处不设置为MASTER,通过priority来竞争master
state MASTER
# 网卡名字,文章下方会给出如何获取网卡名字的方法
virtual_router_id 51
priority 90
# 主备通讯时间间隔
advert_int 1
# 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# 本机ip
unicast_src_ip 192.168.109.128
unicast_peer {
# 其他机器ip
192.168.0.189
}
# 设置nopreempt防止抢占资源
nopreempt
# 主备保持一致
authentication {
auth_type PASS
auth_pass 1111
}
# 与上方nginx运行状况检测呼应
track_script {
chk_nginx
}
virtual_ipaddress {
# 虚拟ip地址(VIP,一个尚未占用的内网ip即可)
192.168.200.16
192.168.200.17
192.168.200.18
}
}
}
nginx监听脚本:
#! /bin/bash
pidof nginx
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop
fi
3、防止出现脑裂现象(主备同时获取了VIP地址)
# 指定keepalived配置的网卡:enp0s3,固定的VRRP广播地址:224.0.0.18 firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT firewall-cmd --reload # 查看配置的规则 firewall-cmd --direct --get-rules ipv4 filter INPUT firewall-cmd --direct --get-rules ipv4 filter OUTPU
4、启动keepalived服务并检查服务状态
# service keepalived start
# 配置开机自启动 systemctl enable keepalived
查看服务启动情况:# ps -aux |grep keepalived
查看启动日志:# journalctl -xe
查看keepalived日志:# tail -f /var/log/messages