1、原理
Keepalived 的作用是檢測后端服務器的狀態,如果有一台服務器死機,或工作出現故障,Keepalived 將檢測到,並將有故障的服務器從系統中剔除。當服務器工作正常后 Keepalived 自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。
2、keepalived的作用
1.管理 VIP
VIP 會在 LVS 之間漂移
運行在主分發的 Keepalived 會以組播的形式向網絡中宣告自己,即主分發器還活着,備用節點能收到。當備用節點,在一個時間單位中收不到組播,備用節點會認為主 LVS 掛了,開始接手主分發器工作,把 VIP 配給自己。
2.管理 RS
Keepalived 會每隔一個時間段去做一次類似於訪問的操作如:
Udp端口檢測,使用nc 命令,跟相關參數實現。
3、使用Keepalived構建LVS-DR模式的高可用集群
機器列表
主機名 |
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 |
4、Dr安裝ipvsadm、keepalived
兩台Dr都要安裝
yum -y install ipvsadm
安裝完成不需要做任何配置,啟動方式由keepalived控制
yum install –y keepalived
5、主節點Dr1配置
# 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
6、備節點Dr2配置
和主節點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
7、RealServer配置
三台設備配置步驟類似,故只列出一台的配置。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
關閉ARP轉發 注意:在三台RS上都需要同樣的操作
# echo 1 > /proc/sys/net/ipv4/conf/ens160/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/ens160/arp_announce
永久生效: (注意 realserver 的實際 link ok 的網卡是不是 eth0)
# vim /etc/sysctl.conf #最后添加。
net.ipv4.conf.ens160.arp_ignore = 1
net.ipv4.conf. ens160.arp_announce = 2
或:
net.ipv4.conf.ens160.arp_ignore = 1
net.ipv4.conf.ens160.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p