- Keepalived簡介
Keepalived是Linux下一個輕量級別的高可用解決方案。高可用:廣義來講,是指整個系統的高可用行;狹義的來講就是主機的冗餘和接管。它與HeartBeat實現類似的功能,都可以實現服務或者網絡的高可用,但是又有差別,HeartBeat是一個專業的、功能完善的高可用軟件,它提供HA軟件所需的基本功能,比如:心跳檢測、資源接管,檢測集羣中的服務,在集羣節點轉移共享IP地址的所有者等等。HeartBeat功能強大,但是部署和使用相對比較麻煩,與HeartBeat相比,Keepalived主要是通過虛擬路由冗餘來實現高可用功能,雖然它沒有HeartBeat功能強大,但是Keepalived部署和使用非常的簡單,所有配置只需要一個配置文件即可以完成。
- VRRP協議與工作原理
在現實的網絡環境中。主機之間的通信都是通過配置靜態路由或者(默認網關)來完成的,而主機之間的路由器一旦發生故障,通信就會失效,因此這種通信模式當中,路由器就成了一個單點瓶頸,爲了解決這個問題,就引入了VRRP協議。VRRP協議是一種容錯的主備模式的協議,保證當主機的下一跳路由出現故障時,由另一臺路由器來代替出現故障的路由器進行工作,通過VRRP可以在網絡發生故障時透明的進行設備切換而不影響主機之間的數據通信。
- 安裝keepalived
安裝環境:centos7(騰訊雲)
注意事項:1、在做keepalived的雙機熱備是要注意兩臺服務器之間是否內網連接。
2、因爲我是在騰訊雲中安裝的,我的兩臺服務器不在同一個區,因爲無法內網訪問,我是通過建立對等連接來實現內網互通的。
3、防火牆要注意關閉掉。
4、keepalived在centos中的安裝可以通過yum源直接下載的方式也可以通過,先下載壓縮包然後再安裝的方式。我在安裝的過程中,先用的yum源直接安裝的方式(下載的最新版本),配置完之後主備節點死活沒有連接成功,於是放棄了用的安裝包的方式安裝的,大家用的過程中謹慎選擇,也可能是我太菜沒有找到問題吧。
步驟:
1、在/usr/local/src路徑下,下載所需版本的壓縮包,安裝之前需要先安裝依賴包
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
yum install -y libnfnetlink-devel
yum -y install openssl-devel
以上三個是比較全的,我在看網上教程的時候只運行第一行命令在後續操作中會出現缺少依賴的情況
下載並解壓
[root@master src]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
[root@master src]# tar xvf keepalived-2.0.7.tar.gz
[root@master src]# cd keepalived-2.0.7
安裝(安裝過程中注意查看安裝日誌)
[root@master keepalived-2.0.7]# ./configure --prefix=/usr/local/keepalived
[root@master keepalived-2.0.7]# make && make install
安裝完成以後會生成一下路徑
/usr/local/etc/keepalived/keepalived.conf
/usr/local/etc/sysconfig/keepalived
/usr/local/sbin/keepalived
2、安裝完成以後需要將相對應地方的文件複製到指定路徑下並進行啓動
# keepalived啓動腳本變量引用文件,默認文件路徑是/etc/sysconfig/,也可以不做軟鏈接,直接修改啓動腳本中文件路徑即可(安裝目錄下)
[root@localhost /]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
# 將keepalived主程序加入到環境變量(安裝目錄下)
[root@localhost /]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
# keepalived啓動腳本(源碼目錄下),放到/etc/init.d/目錄下就可以使用service命令便捷調用
[root@localhost /]# cp /usr/local/src/keepalived-2.0.7/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
# 將配置文件放到默認路徑下
[root@localhost /]# mkdir /etc/keepalived
[root@localhost /]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
- 加爲系統服務:chkconfig –add keepalived
- 開機啓動:chkconfig keepalived on
- 查看開機啓動的服務:chkconfig –list
- 啓動、關閉、重啓service keepalived start|stop|restart
啓動成功以後查看服務啓動狀態(下圖表示啓動成功)
3、keepalived.conf配置文件修改
keepalived服務安裝完成之後,後面的主要工作就是在keepalived.conf文件中配置HA和負載均衡。一個功能比較完整的常用的keepalived配置文件,主要包含三塊:全局定義塊、VRRP實例定義塊和虛擬服務器定義塊。全局定義塊是必須的,如果keepalived只用來做ha,虛擬服務器是可選的。下面是一個功能比較完整的配置文件模板
#全局定義塊
global_defs {
# 郵件通知配置
notification_email {
email1
email2
}
notification_email_from email
smtp_server host
smtp_connect_timeout num
lvs_id string
router_id string ## 標識本節點的字條串,通常爲hostname
}
#VRRP 實例定義塊
vrrp_sync_group string {
group {
string
string
}
}
vrrp_instance string {
state MASTER|BACKUP
virtual_router_id num
interface string
mcast_src_ip @IP
priority num
advert_int num
nopreempt
smtp_alert
lvs_sync_daemon_interface string
authentication {
auth_type PASS|AH
auth_pass string
}
virtual_ipaddress { # Block limited to 20 IP addresses @IP
@IP
@IP
}
}
#虛擬服務器定義塊
virtual_server (@IP PORT)|(fwmark num) {
delay_loop num
lb_algo rr|wrr|lc|wlc|sh|dh|lblc
lb_kind NAT|DR|TUN
persistence_timeout num
protocol TCP|UDP
real_server @IP PORT {
weight num
notify_down /path/script.sh
TCP_CHECK {
connect_port num
connect_timeout num
}
}
real_server @IP PORT {
weight num
MISC_CHECK {
misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh <arg_list>”)
}
}
real_server @IP PORT {
weight num
HTTP_GET|SSL_GET {
url {
# You can add multiple url block path alphanum
digest alphanum
}
connect_port num
connect_timeout num
nb_get_retry num
delay_before_retry num
}
}
}
大家簡單瞭解一下上面的配置,接下來介紹一下。我在配置雙機熱備時的配置文件
- Keepalived雙機熱備步驟
手稿:
前置條件兩臺服務器中都安裝完成Keepalived
1、更改主備服務器重的配置文件,keepalived.conf在/etc/keepalived/下面
MASTER(主節點)更改/etc/keepalived/keepalived.conf 配置文件
! Configuration File for keepalived
global_defs {
router_id 172.17.0.13
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
unicast_src_ip 172.17.0.13
unicast_peer {
172.21.0.10
}
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.21.0.19
}
}
配置文件解析:
BACKUP(備節點)更改/etc/keepalived/keepalived.conf 配置文件
! Configuration File for keepalived
global_defs {
router_id 172.21.0.10
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
unicast_src_ip 172.21.0.10
unicast_peer {
172.17.0.13
}
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.21.0.19
}
}
配置完成以後重啓主備Keepalived
通過查看路由來驗證關聯是否成功
當MASTER節點服務器中的keepalived啓動的時候,虛擬ip會在該服務器中顯示
關閉MASTER節點,會發現虛擬IP漂移到了BACKUP節點
- 注意事項
1、特別注意騰訊雲的對等連接有可能存在與服務器中docker服務路由衝突,如果出現該情況對等連接之後將無法內網互通,我是把docker卸載掉了。在生產環境部署架構時,建議不要把多個應用部署在同一臺服務器中,避免產生不必要的麻煩。如下圖,我在此處就費了很長時間才解決的,要保證主備keepalived兩臺服務器之間的內網互通才能建立關聯關係。
2、另外還有需要注意的地方就是有關keepalived單播和多播的問題,我用的是單播模式:參考鏈接https://www.jianshu.com/p/7c709c3be4a9
3、在編輯keepalived.conf文件的時候切記不要出現中文符號,中文空格也不行,如果啓動失敗,看一下keepalived的啓動日誌信息,如果顯示keepalived.conf配置文件相關的報錯信息,那麼就仔細檢查一下你的配置文件。
下一篇將詳細介紹Keepalived+Nginx的高可用部署方案。
如有疑問可以微信諮詢