高可用集群企業級應用實戰-keepalived
Keepalived的作用是檢測服務器 的狀態,如果有一臺web服務器宕機 ,或工作出現故障,Keepalived將檢 測到,並將有故障的服務器從系統中 剔除,同時使用其他服務器代替該服 務器的工作,當服務器工作正常後 Keepalived自動將服務器加入到服務 器群中,這些工作全部自動完成,不 需要人工幹涉,需要人工做的只是修 復故障的服務器。
Keepalived工作流程圖:
工作流程圖詳解:
keepalived主要是模塊是VRRP Stack和Cheackers,實現HA集群 中失敗切換(Failover)功能。Keepalived通過VRRP功能能再結合LVS負載均 衡軟件即可部署一個高性能的負載均衡集群系統。,Cheackers主要實現可 實現對服務器運行狀態檢測和故障隔離。,其中ipvs和realserver健康狀態檢 查通過配置文件配置就可以實現,而其他服務高可用則需要通過自己編寫腳 本,然後配置keepalived調用來實現。 Keepalived運行有3個守護進程。父進程主要負責讀取配置文件初始化 、監控2個子進程等;然後兩個子進程,一個負責VRRP,另一個負責 Cheackers健康檢查。其中父進程監控模塊為WacthDog,工作實現:每個 子進程打開一個接受unix域套接字,父進程連接到那些unix域套接字並向子 進程發送周期性(5s)hello包。 上圖是Keepalived的功能體系結構,大致分兩層:用戶空間(user space) 和內核空間(kernel space)。 內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡) 和NETLINK(提供高級路由及其他相關的網絡功能)兩個部份。
VRRP協議的相關介紹:
VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協議) 可以認為是實現路由器高可用的協議,簡單的說,當一個路由器故障時可以 由另一個備份路由器繼續提供相同的服務。 VRRP根據優先級來確定虛擬路由器中每臺路由器的角色(Master路由 器或Backup路由器)。VRRP優先級的取值範圍為0到255(數值越大表明 優先級越高),可配置的範圍是1到254,優先級0為系統保留給路由器放棄 Master位置時候使用,255則是系統保留給IP地址擁有者使用。優先級越高 ,則越有可能成為Master路由器。當兩臺優先級相同的路由器同時競爭 Master時,比較接口IP地址大小。接口地址大者當選為Master。
實戰演練:實現基於keepalived高可用基於LVS-DR模式的雙主架構
一:環境準備:
四臺centos虛擬機分別命名為:lvs-master、lvs-backup、realserver1、realserver2
都是雙網卡模式:橋接和僅主機
lvs-master: vip1:172.17.250.11
dip:172.17.27.10
lvs-backup:vip2:172.17.250.12
dip:172.17.250.43
realserver1:rip:172.17.0.66
realserver2:rip:172.17.250.41
分別在lvs-master和lvs-backup上安裝keepalived
清空防火墻策略:iptables -F,關閉selinux策略
二:配置相關文件
1、修改keepalived主(lvs-server-master)配置文件實現virtual_instance
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1015
}
virtual_ipaddress {
172.17.250.11
}
}
virtual_server 172.17.250.11 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout 120
protocol TCP
real_server 172.17.0.66 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.17.250.41 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 93
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
172.17.250.12
}
}
virtual_server 172.17.250.12 443 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout 120
protocol TCP
real_server 172.17.0.66 443 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.17.250.41 443 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2,lvs-backup與lvs-master配置文件大致相同,所以就只列出不同的地方,沒列出的都是相同的代碼
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 90
priority 98 ###由原來的100改為了98
advert_int 1
authentication {
auth_type PASS
auth_pass 1015
}
virtual_ipaddress {
172.17.250.11
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 93
priority 100 ###由原來的98改為了100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
172.17.250.12
}
}
3,realserver1和realserver2配置都一樣
因為realserver使用了443端口,所以說需要進行加密所以應該打開nginx中的https server
cd /etc/pki/tls/certs
生成密鑰和證書:make cert.pem
拷貝cert.pem到nginx配置文件中:
cp cert.pem /etc/nginx
cd /etc/nginx
創建一個密鑰文件,並把cert.pem中的密鑰拷到此文件中
vim cert.key
HTTPS server
server {
listen 443 ssl;
server_name localhost;
root html;
ssl_certificate cert.pem; ###存放證書的文件
ssl_certificate_key cert.key; ####存放密鑰的文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
}
配置回環網卡:
ifconfig lo:0 172.17.250.11 broadcast 172.17.250.11 netmask 255.255.255.255 up
route add -host 172.17.250.11 lo:0
ifconfig lo:1 172.17.250.12 broadcast 172.17.250.12 netmask 255.255.255.255 up
route add -host 172.17.250.11 lo:0
忽略ip與mac不匹配的問題:
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
三:測試檢驗高可用的效果
1、配置完成後,觀察兩側IP的是情況,看是否虛擬IP在主上配置成功
2、停掉主服務上的keepalived服務,看虛擬IP是否正常轉移到從節點上
a,首先查看虛擬ip是否在lvs-master和lvs-backup上配置成功
ipvsadm -L -n
從圖中可以看到vip1:172.17.250.11
vip2:172.17.250.12
b,關掉lvs-backup的keepalived服務
systemctl stop keepalived
查看vip2:172.17.250.12是否跑到了lvs-master主機上
圖中看出lvs-backup上已經沒有了vip2:172.17.250.12
而是出現在了lvs-master上
高可用集群企業級應用實戰-keepalived