1. 程式人生 > >高可用集群企業級應用實戰-keepalived

高可用集群企業級應用實戰-keepalived

linux

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