Keepalived原理與部署配置
- 1. Keepalived簡介
- 2. Keepalived原理
- 3. Keepalived部署配置
-
- 3.1 安裝環境
- 3.2 安裝步驟
- 3.3 配置說明
- 4. 參考文獻
靜态路由高可用,一直聽說keepalived+nginx可以實作,結合反思目前參與項目使用dns做主備節點之間的切換問題,查找相關資料進行總結,本文對keepalived的原理進行簡要介紹,并實際搭建keepalived主備節點以及結合主備節點部署nginx進行實際驗證,在此進行記錄,以便後續持續深入學習以及為後來者提供參考借鑒,文中不免疏漏之處,望讀者不吝指教,感激之至!
1. Keepalived簡介
Keepalived起初是專為LVS負載均衡軟體設計的,用來管理并監控LVS叢集系統中各個服務節點的狀态,後來又加入了可以實作高可用的VRRP功能。是以,Keepalived除了能夠管理LVS外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案。
Keepalived軟體主要是通過VRRP協定實作高可用功能的。VRRP是Virtual Router RedundancyProtocol(虛拟路由器備援協定)的縮寫,VRRP出現的目的就是為了解決靜态路由單點故障問題的,它能夠保證當個别節點當機時,整個網絡可以不間斷地運作。
是以,Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實作系統網絡服務的高可用功能。
2. Keepalived原理
Keepalived高可用服務對之間的故障切換轉移,是通過 VRRP來實作的。
VRRP全稱Virtual Router Redundancy Protocol ,中文名為虛拟路由備援協定 ,
VRRP的出現就是為了解決靜态路由的單點故障問題,VRRP是通過一種競選機制來将路由的任務交給某台VRRP路由器的。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSP9EUci12TJF3UyVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzYjMiZ2MxQTYykjM0cDMhNmYxQjY1AzMhRmMzMDNkZ2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
VRRP的工作過程:
(1)虛拟路由器中的路由器根據優先級選舉出Master,Master路由器通過發送免費ARP封包,将自己的虛拟MAC位址通告給與它連接配接的裝置。
(2)Master路由器周期性發送VRRP封包,以公布自己的配置資訊(優先級等)和工作狀态
(3)如果Master故障,虛拟路由器中的Backup路由器将根據優先級重新選舉新的Master
(4)虛拟路由器狀态切換時,Master路由器由一台裝置切換會另外一台裝置,新的Master路由器隻是簡單的發送一個攜帶虛拟MAC位址和虛拟IP的免費ARP封包,這樣就可以更新其他裝置中緩存的ARP資訊
(5)Backup路由器的優先級高于Master時,由Backup的工作方式(搶占式或者非搶占式)決定是否重新選舉Master。
3. Keepalived部署配置
3.1 安裝環境
環境:CentOS Linux release 7.2.1511 (Core)
版本:keepalived-2.2.4.tar.gz
官網:https://www.keepalived.org/download.html
3.2 安裝步驟
(1)下載下傳
wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz
(2)依賴安裝更新
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel
(3)解壓調整安裝路徑
tar -zvxf keepalived-2.2.4.tar.gz
cd /usr/local/keepalived-2.2.4/
(4)配置指定安裝目錄
./configure --prefix=/usr/local/keepalived
(5)編譯并安裝
make && make install
(6)調整配置檔案
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server smtp.163.com
smtp_connect_timeout 30
router_id LVS_DEVEL_0
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
# 配置目前機器網卡
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 與目前機器配置同一網段
192.168.65.16
}
}
(7)設定linux服務
mkdir /etc/keepalived
cp /usr/local/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
(8)啟動
systemctl start keepalived
systemctl status keepalived
systemctl stop keepalived
(9)驗證
ps -aux | grep keepalived
systemctl status keepalived
(10)功能驗證
部署兩台機器 keepalived,一個master,一個backup;
兩台機器各部署一個nginx,同時設定預設界面資訊不同,用于區分通路到不同的機器;
同時啟動兩台keepalived和nginx,使用虛拟ip通路,檢視是否是master節點;
關閉master節點的keepalived,繼續使用虛拟ip通路,驗證是否是backup節點;
恢複master節點的keepalived,繼續使用虛拟ip通路,驗證是否恢複到master節點通路。
3.3 配置說明
# 全局配置
global_defs {
# 郵件通知資訊
notification_email {
# 定義收件人
[email protected]
}
# 定義發件人
notification_email_from [email protected]
# SMTP伺服器位址
smtp_server 192.168.200.1
smtp_connect_timeout 30
# 路由器辨別,一般不用改,也可以寫成每個主機自己的主機名
router_id LVS_DEVEL
# VRRP的ipv4和ipv6的廣播位址,配置了VIP的網卡向這個位址廣播來宣告自己的配置資訊,下面是預設值
vrrp_mcast_group4 224.0.0.18
vrrp_mcast_group6 ff02::12
}
# 一個vrrp_instance就是定義一個虛拟路由器的,執行個體名稱
vrrp_instance VI_1 {
# 定義初始狀态,可以是MASTER或者BACKUP
state MASTER
# 工作接口,通告選舉使用哪個接口進行
interface ens33
# 虛拟路由ID,如果是一組虛拟路由就定義一個ID,如果是多組就要定義多個,而且這個虛拟
# ID還是虛拟MAC最後一段位址的資訊,取值範圍0-255
virtual_router_id 51
# 使用哪個虛拟MAC位址
use_vmac XX:XX:XX:XX:XX
# 監控本機上的哪個網卡,網卡一旦故障則需要把VIP轉移出去
track_interface {
eth0
ens33
}
# 如果你上面定義了MASTER,這裡的優先級就需要定義的比其他的高
priority 100
# 通告頻率,機關為秒
advert_int 1
# 通信認證機制,這裡是明文認證還有一種是加密認證
authentication {
auth_type PASS
auth_pass 1111
}
# 設定虛拟VIP位址,一般就設定一個,在LVS中這個就是為LVS主機設定VIP的,這樣你就不用自己手動設定了
virtual_ipaddress {
# IP/掩碼 dev 配置在哪個網卡
192.168.200.16/24 dev eth1
# IP/掩碼 dev 配置在哪個網卡的哪個别名上
192.168.200.17/24 dev label eth1:1
}
# 虛拟路由,在需要的情況下可以設定lvs主機 資料包在哪個網卡進來從哪個網卡出去
virtual_routes {
192.168.110.0/24 dev eth2
}
# 工作模式,nopreempt表示工作在非搶占模式,預設是搶占模式 preempt
nopreempt|preempt
# 如果是搶占預設則可以設定等多久再搶占,預設5分鐘
preempt delay 300
# 追蹤腳本,通常用于去執行上面的vrrp_script定義的腳本内容
track_script {
}
# 三個指令,如果主機狀态變成Master|Backup|Fault之後會去執行的通知腳本,腳本要自己寫
notify_master ""
notify_backup ""
notify_fault ""
}
4. 參考文獻
[1] https://www.keepalived.org/
[2] https://www.cnblogs.com/clsn/p/8052649.html
[3] https://www.cnblogs.com/rexcheny/p/10778567.html