一、原理算法
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