一、原理算法
Keepalived 的做用是检测后端服务器的状态,若是有一台服务器死机,或工做出现故障,Keepalived 将检测到,并将有故障的服务器从系统中剔除。当服务器工做正常后 Keepalived 自动将服务器加入到服务器群中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的服务器。apache
二、keepalived的做用vim
1.管理 VIP 后端
VIP 会在 LVS 之间漂移bash
运行在主分发的 Keepalived 会以组播的形式向网络中宣告本身,即主分发器还活着,备用节点能收到。当备用节点,在一个时间单位中收不到组播,备用节点会认为主 LVS 挂了,开始接手主分发器工做,把 VIP 配给本身。服务器
2.管理 RS网络
Keepalived 会每隔一个时间段去作一次相似于访问的操做如:oop
Udp端口检测,使用nc 命令,跟相关参数实现。spa
三、使用Keepalived构建LVS-DR模式的高可用集群rest
机器列表
主机名 |
ip |
网关 |
做用 |
Dr1 |
Vip:10.1.19.50 |
|
主Dr |
Dr2 |
Vip:10.1.19.50 |
|
备Dr |
RS1 |
RIP:10.1.8.1 |
|
NTP Server1 |
RS2 |
RIP:10.1.18.21 |
|
NTP Server2 |
RS3 |
RIP:10.1.13.13 |
|
NTP Server3 |
两台Dr都要安装
yum -y install ipvsadm
安装完成不须要作任何配置,启动方式由keepalived控制
yum install –y keepalived
# cp keepalived.conf keepalived.conf.bak
用MISC_CHECK来调用外部的脚本去判断UDP端口是否开启来作到UDP健康状态检查.
# mkdir -p /usr/local/scripts/keepalived/
# vim /usr/local/scripts/keepalived/UDP_CHECK.sh
#!/bin/bash
/bin/nc -uz -w1 $1 $2 >/dev/null
exit $?
# vim /etc/keepalived/keepalived.conf
global_defs {
router_id Dr1 #标识当前节点名字,两个节点的此项须要不相同。
}
vrrp_instance ntp { #定义一个实例,一个集群就是一个实例。 默认VI_1 能够随意改
state MASTER #指定 A 节点为主节点 备用节点上设置为 BACKUP 便可
interface eth0 #绑定虚拟 IP 的网络接口
virtual_router_id 51 #VRRP 组名,两个节点的设置必须同样,以指明各个节点属于同一 VRRP 组
priority 100 #主节点的优先级(1-254 之间),备用节点必须比主节点优先级低
advert_int 1 #组播信息发送间隔,两个节点设置必须同样
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.19.50 #指定虚拟 IP, 两个节点设置必须同样
}
}
virtual_server 10.1.19.50 123 { #对虚拟IP63添加LVS相关内容
delay_loop 6 #Keepalived 多长时间监测一次 RS
lb_algo rr #分发算法
lb_kind DR #DR 模式
protocol UDP
real_server 10.1.8.1 123 {
weight 1
MISC_CHECK {
misc_path "/usr/local/scripts/keepalived/UDP_CHECK.sh 10.1.8.1 123"
misc_timeout 10
}
}
real_server 10.1.18.21 123 {
weight 1
MISC_CHECK {
misc_path "/usr/local/scripts/keepalived/UDP_CHECK.sh 10.1.18.21 123"
misc_timeout 10
}
}
real_server 10.1.13.13 123 {
weight 1
MISC_CHECK {
misc_path "/usr/local/scripts/keepalived/UDP_CHECK.sh 10.1.13.13 123"
misc_timeout 10
}
}
}
启动keepalived服务
# systemctl restart keepalived
# systemctl enable keepalived
和主节点Dr1配置差很少,直接从Dr1上scp拷贝配置文件
# mkdir -p /usr/local/scripts/keepalived/
# vim /usr/local/scripts/keepalived/UDP_CHECK.sh
#!/bin/bash
/bin/nc -uz -w1 $1 $2 >/dev/null
exit $?
# scp /etc/keepalived/keepalived.conf 192.168.1.63:/etc/keepalived/
复制过来以后,还要作必定的修改:
# vim /etc/keepalived/keepalived.conf
注:红色为改动项值
router_id Dr1 #运行 keepalived 的机器标示符
}
vrrp_instance apache {
state BACKUP #当前 LVS 状态为备用分发器
interface ens32
virtual_router_id 51
priority 90 #LVS 优先级,备的要比主的小
……
启动keepalived服务
# systemctl restart keepalived
# systemctl enable keepalived
三台设备配置步骤相似,故只列出一台的配置。Ntp服务器已经搭建完成,ip都是配置好的,故只须要配置回环接口和关闭arp转发。
# vim /etc/init.d/add-vip
#!/bin/bash
VIP=10.1.19.50
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig ens160:1 $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens160:1
echo "1" >/proc/sys/net/ipv4/conf/ens160/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/ens160/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig ens160:1 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/ens160/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/ens160/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
# chmod +x /etc/init.d/add-vip
# sysctl -p