一.keepalived介紹
1.keepalived的功能
實現(xiàn)集群服務(wù)的高可用性(HA),在實際工作中當lvs調(diào)度器發(fā)生故障時需要這種機制實現(xiàn)工作的高可用性,就是說當一個調(diào)度器出現(xiàn)故障時,可以由另一個服務(wù)器繼續(xù)接管繼續(xù)工作。
2.常用的高可用集群的實現(xiàn)方案
vrrp:Virtual Router Redundancy Protocol——虛擬路由冗余協(xié)議
3.常見的keepalived配置術(shù)語
虛擬路由器:Virtual Router
虛擬路由器標識:VRID(0-255),唯一標識虛擬路由器
物理路由器:
master:主設(shè)備
backup:備用設(shè)備
priority:優(yōu)先級
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
通告:心跳,優(yōu)先級等;周期性 ?
工作方式:搶占式,非搶占式 ?
安全工作: 認證: 無認證 簡單字符認證:預(yù)共享密鑰 MD5 ?
工作模式:
主/備:單虛擬路徑器
主/主:主/備(虛擬路徑器1),
備/主(虛擬路徑器2)
*注意:vrrp協(xié)議的軟件實現(xiàn),原生設(shè)計目的為了高可用ipvs服務(wù).換句話說該協(xié)議軟件的實現(xiàn)就是搭配lvs使用,達到高可用的目的,彼此為絕配的關(guān)系
雙方的搭配模式主要的功能:
vrrp協(xié)議完成地址流動 ?
為vip地址所在的節(jié)點生成ipvs規(guī)則(在配置文件中預(yù)先定義) ?
為ipvs集群的各RS做健康狀態(tài)檢測 ?
基于腳本調(diào)用接口通過執(zhí)行腳本完成腳本中定義的功能, 進而影響集群事務(wù),以此支持nginx、haproxy等服務(wù)
4.keepalived的組成
(1)組件: ?
核心組件: vrrp stack ipvs wrapper checkers ?
控制組件:配置文件分析器 ?IO復(fù)用器 ? 內(nèi)存管理組件
二.keepalived的實現(xiàn)
1.HA Cluster 配置準備的準備工作
(1)集群環(huán)境的時間同步,也就說各個節(jié)點的時間必須相同
使用的服務(wù)是ntp和chrony(在7上使用)
首先使用ntpdate 172.18.0.1(假設(shè)為互聯(lián)網(wǎng)時間),與互聯(lián)網(wǎng)時間同步
上述方法是暫時同步時間,過一段時間后還是會出現(xiàn)差別
然后vim /etc/ntp.conf

該方法可以實現(xiàn)與互聯(lián)網(wǎng)時間的實時同步,為了方便直接設(shè)置為開機自啟chkconfig ntpd on
然后service ntpd start
這樣只需要其他服務(wù)在ntp.conf或是chrony.conf配置文件中和該主機時間同步即可

(2)清除各主機之間的防火墻策略和selinux策略,以防影響實驗結(jié)果
(3)各節(jié)點之間以主機名的方式實現(xiàn)互相通訊
在各個節(jié)點中設(shè)置:
hostname set-hostname node1

hostname set-hostname node2

然后在/etc/hosts文件中寫下對方的主機名,實現(xiàn)解析通訊


(4)實現(xiàn)基于Key的ssh服務(wù)驗證,相互信任,防止黑客的干擾
實現(xiàn)方法:
執(zhí)行ssh-keygen命令會生成

ssh-copy -i id_rsa.pub node2:

三.keepalived的具體應(yīng)用
1.實現(xiàn)簡單的主備工作模式
拓撲結(jié)構(gòu)圖
image.png
(1)yum install keepalived
vim /etc/keepalived/keepalived.conf
image.png
在另一主機上,設(shè)置為主服務(wù)器,將配置文件中的優(yōu)先級調(diào)為100,比備用主機數(shù)值大即可,state為MASTER
其他不變
配置完成,可以通過tcpdump -i eth0 -nn host 224.99.99.62來測試效果
image.png
此時的虛擬vip地址也被綁定在主服務(wù)器上,備用服務(wù)器沒有該地址
image.png
此時即使將備服務(wù)器的keepalived開啟也無法工作,因為它的優(yōu)先級小于主服務(wù)器,所以無法參與工作。但是此時如果將主服務(wù)關(guān)掉,那么備用服務(wù)器會開始工作
image.png
此時虛擬vip也切換到備用服務(wù)器上
image.png
主從模式配置成功
記錄日志
vim /etc/sysconfig/keepalived
image.pngvim /etc/rsyslog.conf
image.png
設(shè)置完成后,重啟日志服務(wù)和keepalived
查看日志 ll /var/log/keepalived.log
image.png- mail設(shè)置
通過mail設(shè)置可以實現(xiàn)rs服務(wù)器的上線下線通知功能,并且通過觸發(fā)腳本來實現(xiàn)主備的切換
具體實現(xiàn):
在 /etc/keepalived/下編寫notify.sh通知腳本
1 #!/bin/bash
2 #
3 contact='root@localhost'
4 notify() {
5 mailsubject="$(hostname) to be $1, vip floating"
6 mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
7 echo "$mailbody" | mail -s "$mailsubject" $contact
8 }
9 case $1 in
10 master)
11 notify master
12 ;;
13 backup)
14 notify backup
15 ;;
16 fault)
17 notify fault
18 ;;
19 *)
20 echo "Usage: $(basename $0) {master|backup|fault}"
21 exit 1
22 ;;
23 esac
寫完后執(zhí)行 ./notify master 觀察mail
image.png
./notify backup
image.png
因此在keepalived.conf加入出發(fā)腳本
image.png
主要功能就是通過郵件進行通知主服務(wù)器與備用服務(wù)器的切換,當之前的主服務(wù)出現(xiàn)故障后,配置文件會觸發(fā)通知腳本告知另一個備用服務(wù)器變?yōu)橹鞣?wù)器
- 注意在備用服務(wù)器上也要進行相同的設(shè)置
2.實現(xiàn)主主模式
image.png
解釋:
針對route_id為80,虛擬vip為192.168.136.62這個地址,node1位master,node2為backup
針對route_id為70,虛擬vip為192.168.136.63這個地址,node1為backup,node2為master
總體來說仍然是主備模式,只是針對不同的vip地址而定義了相對的主主模式
- 具體實現(xiàn)步驟:
vim /etc/keepalived/keepalived.conf
再寫一個實例
vrrp_instance VI_2 {
state BACKUP——由原來的MASTER變?yōu)锽ACKUP
interface eth0
virtual_router_id 70——設(shè)置一個新的id號
priority 90——優(yōu)先級要變低
advert_int 1
authentication {
auth_type PASS
auth_pass 6ceadb21——設(shè)置新的密碼
}
virtual_ipaddress {
192.168.136.63/24——配置新的vip地址
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
在備用服務(wù)器上設(shè)置同樣內(nèi)容
vrrp_instance VI_2 {
state MASTER——由原來的BACKUP變?yōu)镸ASTER
interface ens33
virtual_router_id 70——設(shè)置一個新的id號
priority 100——優(yōu)先級要變高
advert_int 1
authentication {
auth_type PASS
auth_pass 6ceadb21——設(shè)置新的密碼
}
virtual_ipaddress {
192.168.136.63/24——配置新的vip地址
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
配置完成后進行測試

3.結(jié)合后端RS服務(wù)器的高可用性的實現(xiàn)(與Lvs的結(jié)合應(yīng)用)
(1)結(jié)合ipvs的主從服務(wù)調(diào)度(DR調(diào)度模式)
拓撲圖 基于結(jié)合lvs的主從模式的高可用的工作模式
image.png
(2)在rs服務(wù)器端上執(zhí)行l(wèi)vs腳本
image.png
(3)在主備服務(wù)器上設(shè)置keepalived.conf腳本
image.png
image.png
將該腳本復(fù)制到另一個備用服務(wù)器上
scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/keepalived.conf
配置完成后,重啟服務(wù)查看是否具有ipvs規(guī)則
ipvsadm -Ln
image.png
在備用服務(wù)器上同樣具有ipvs規(guī)則
image.png
配置成功
(4)在客戶端上進行訪問,測試結(jié)果
image.png
結(jié)果正確
(5)測試如果主服務(wù)器出現(xiàn)故障,在客戶端進行測試,觀察結(jié)果
image.png
利用tcpdump命令查看主從是否切換
image.png
(6)健康性檢查的測試,當其中的一個RS服務(wù)器故障后,在客戶端測試觀察結(jié)果
image.png
4.實現(xiàn)主主模式的集群調(diào)度
調(diào)度拓撲圖
image.png正常情況下lvs2應(yīng)該選擇新的另外兩個服務(wù)器進行測試,并且后面的也要建立兩個新的rs服務(wù)器,但是本實驗為了節(jié)省資源就都在同樣的兩臺機上做實驗,實現(xiàn)互為主從的調(diào)度實驗
設(shè)置兩個vip
vip1:192.168.136.62
vip2:192.168.136.63
當訪問vip1時170為主
當訪問vip2時183為主
實驗?zāi)康拿鞔_,接下來實現(xiàn)具體的配置步驟
(1)首先在各自的rs服務(wù)器上執(zhí)行l(wèi)vsj腳本
image.png
執(zhí)行腳本后觀察
image.png
(2)vim /etc/httpd/conf/httpd.conf在rs服務(wù)器上設(shè)置虛擬主機
image.png
ip a a 192.168.136.133 dev eth0
mkdir /app/web1
mkdir /app/web2
echo images 134 > /app/web1/index.html
echo app 133 > /app/web2/index.html
(3)在lvs調(diào)度器上
vim /ect/keepalived/keepalived.conf
image.png
另一個同上
配置完后,重啟服務(wù)觀察ipvs
image.png
(4)在rs服務(wù)器端上測試
image.png
顯示成功,但是在客戶端去測試無法正確顯示,因此建議不要在統(tǒng)同一主機配置
(5)一個vip只往一個rs服務(wù)器端上調(diào)度
image.png
減少服務(wù)器數(shù)量
只要訪問63就往173上調(diào)度
只要訪問62就往134上調(diào)度
5.實現(xiàn)keepalived的nginx的高可用集群調(diào)度
(1)在keepalived的配置文件中配置腳本
image.png
image.png
(2)另一臺調(diào)度器執(zhí)行相同操作
該腳本的含義是:先設(shè)置腳本,然后對腳本進行檢查,如果判斷出down文件存在,就將優(yōu)先級高的調(diào)度器的數(shù)值減少20,使另一個調(diào)度器優(yōu)先級變高成為主服務(wù)器,進行繼續(xù)的工作。當down文件刪除后,又恢復(fù)原來的主備模式
(3)對腳本進行測試
image.png
在/etc/keepalived/下創(chuàng)建一個down文件
就會實現(xiàn)主從切換
image.png
刪除down文件后又重新恢復(fù)
image.png
(4)對此可以使用腳本來實現(xiàn)nginx的高可用集群調(diào)度
在/etc/nginx/nginx.conf中進行配置
image.png
image.png
開啟了反向代理功能
關(guān)閉httpd 服務(wù)打開nginx服務(wù)
(5)對nginx服務(wù)做健康性檢查,在keepalived.conf的腳本中進行設(shè)置
image.png
image.png
另一個調(diào)度器同上
(6)關(guān)閉keepalived服務(wù),使用tcpdump命令測試,先開啟一個keepalived服務(wù)
image.png
(7)另一個也開啟,并殺死之前的keepalived服務(wù)
image.png
顯示正確,主服務(wù)器減少20,使從服務(wù)器變?yōu)橹鞣?wù)器工作









































