lvs+keepalived實現(xiàn)負載集群高可用架構
keepalived工作原理和配置說明
keepalived是什么
keepalived是集群管理中保證集群高可用的一個服務軟件,其功能類似于heartbeat,用來防止單點故障。
keepalived工作原理
keepalived是以VRRP協(xié)議為實現(xiàn)基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。
虛擬路由冗余協(xié)議,可以認為是實現(xiàn)路由器高可用的協(xié)議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個 backup,master上面有一個對外提供服務的vip(該路由器所在局域網(wǎng)內其他機器的默認路由為該vip),master會發(fā)組播,當 backup收不到vrrp包時就認為master宕掉了,這時就需要根據(jù)VRRP的優(yōu)先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
keepalived主要有三個模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現(xiàn)VRRP協(xié)議的。
VRRP是一種選擇協(xié)議,它可以把一個虛擬路由器的責任動態(tài)分配到局域網(wǎng)上的 VRRP 路由器中的一臺
VRRP是一種路由容錯協(xié)議,也可以叫做備份路由協(xié)議
VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協(xié)議)是一種容錯協(xié)議
服務環(huán)境搭建
實驗主機環(huán)境介紹:
主機使用版本 : redhat rhe6.5
iptables stop 以及 selinux disablesl
主機ip :172.25.254.79
MASTER: wyx1 :172.25.79.1
Realserver1 :wyx2 : 172.25.79.2 vip 172.25.79.111 (僅對同一WLAN用戶開放)
Realserver1 :wyx3: 172.25.79.3 vip 172.25.79.111 (僅對同一WLAN用戶開放)
BACKUP : wyx4 :172.25.79.4
wyx1 配置
下載keepalived安裝包并進行減壓
root@wyx1 /]# tar zxf keepalived-2.0.6.tar.gz
[root@wyx1 /]# cd /keepalived-2.0.6(必須在此目錄中,才能進行如下操作)
安裝 openssl-devel
[root@wyx1 ~]# yum install -y openssl-devel
編譯軟件
[root@wyx1 keepalived-2.0.6]# ./configure –with-init=SYSV
[root@wyx1 keepalived-2.0.6]# ./configure –with-init=SYSV –prefix=/usr/local/keepalived
[root@foundation79 Desktop]# make&&make install
設置權限
[root@wyx1 keepalived-2.0.6]# chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
設置軟鏈接
[root@wyx1 init.d]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
[root@wyx1 init.d]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
[root@wyx1 init.d]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@wyx1 init.d]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
設置開機自啟
[root@wyx1 keepalived-2.0.6]# chkconfig keepalived on
[root@wyx1 keepalived-2.0.6]# chkconfig keepalived –list
keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@wyx1 keepalived-2.0.6]# /etc/init.d/keepalived start
Starting keepalived:
查看進程 。開啟keepalived 服務后會開啟3個進程
[root@wyx1 keepalived-2.0.6]# ps -ef |grep keepalived
root 932 1 0 21:41 00:00:00 keepalived -D 父進程:內存管理,子進程管理等等
root 935 932 0 21:41 00:00:00 keepalived -D 子進程:VRRP子進程
root 936 932 0 21:41 00:00:00 keepalived -D 子進程:healthchecker子進程
配置keepalived 文件
global_defs { ##全局定義
notification_email { ##郵件
root@localhost
}
##notification_email指定keepalived在發(fā)生事件(切換),需要發(fā)送email到的對象??梢杂卸鄠€,每行一個
##指定keepalived在發(fā)送事件(切換),需要發(fā)送email到的對象??梢杂卸鄠€。在下添加
notification_email_from keepalived@localhost
smtp_server 127.0.0.1 ##指定發(fā)送email的smtp服務器
smtp_connect_timeout 30 ##指定時間為30秒
router_id LVS_DEVEL ##負載均衡標示
}
vrrp_instance示例配置
主要定義vrrp_sync_group里面的每個組的漂移 IP等
vrrp_instance VI_1 {
state MASTER ##指定instance的初始化狀態(tài),當2臺裝有keepalived的機子開啟時,會發(fā)生競爭,master 為主backup為輔
interface eth0 ##綁定的網(wǎng)卡
virtual_router_id 51 ##vrid 標示
priority 100 ##prioity等級為100,master要比backup高最少50
advert_int 1 ##檢查間隔,默認1S
authentication { ##設置認證
auth_type PASS ##認證方式為PASS或者AH
auth_pass 1111 ## 認真的密碼
}
virtual_ipaddress {
172.25.79.111 ##指定飄逸地址,
}
}
虛擬服務塊配置
virtual server IP port
virtual_server 172.25.79.111 80 { ##服務vip以及服務端口
delay_loop 6 ##延時時間
lb_algo rr ##lvs調度算法 為輪詢
lb_kind DR ##lvs的集群模式為DR
#persistence_timeout 50 ##會話保持時間
protocol TCP ##所用協(xié)議為TCP
real_server 172.25.79.2 80 {
weight 1 ##默認為1,0為失效
TCP_CHECK { ##tcp方式的健康檢查
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.79.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
wyx4與wxy1 類似
只需要改變
vrrp_instance VI_1 {
state BACKUP ##指定instance的初始化狀態(tài),當2臺裝有keepalived的機子開啟時,會發(fā)生競爭,master 為主backup為輔
interface eth0 ##綁定的網(wǎng)卡
virtual_router_id 51 ##vrid 標示
priority 50 ##prioity等級為100,master要比backup高最少50
advert_int 1 ##檢查間隔,默認1S
authentication { ##設置認證
auth_type PASS ##認證方式為PASS或者AH
auth_pass 1111 ## 認真的密碼
}
virtual_ipaddress {
172.25.79.111 ##指定飄逸地址,
}
}
WYX2 配置
安裝http服務
[root@wyx2 ~]# yum install httpd -y
編輯默認發(fā)布目錄
[root@wyx2 ~]# cat /var/www/html/index.html
www.wyx.org: wyx2
啟動http服務
[root@wyx2 ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.79.2 for ServerName
[ OK ]
添加vip
[root@wyx2 ~]# ip addr add 172.25.79.111/24 dev eth0
[root@wyx2 ~]# ip addr
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:77:c2:f5 brd ff:ff:ff:ff:ff:ff
inet 172.25.79.2/24 brd 172.25.79.255 scope global eth0
inet 172.25.79.111/24 scope global secondary eth0
inet6 fe80::5054:ff:fe77:c2f5/64 scope link
valid_lft forever preferred_lft forever
對外隱藏vip
[root@wyx2 ~]# arptables -A IN -d 172.25.79.111 -j DROP
[root@wyx2 ~]# arptables -A OUT -s 172.25.79.111 -j mangle –mangle-ip-s 172.25.79.2
保存修改
[root@wyx2 ~]# /etc/init.d/arptables_jf save
wyx 3與wyx2類似
只需要更改http的默認發(fā)目錄內容
安裝http服務
[root@wyx3 ~]# yum install httpd -y
編輯默認發(fā)布目錄
[root@wyx3 ~]# cat /var/www/html/index.html
www.wyx.org: wyx3
測試
wyx1 MAC: 52:54:00:d7:33:0f
wyx2 MAC: 52:54:00:77:c2:f5
wyx3 MAC: 52:54:00:e6:31:59
wyx4 MAC: 52:54:00:0f:0c:31
負載均衡及健康檢測測試
[root@foundation79 Desktop]# for i in {1..10};do curl 172.25.79.111;done
當關閉 wyx2 上的http服務時
如下圖該服務健康檢測到wyx2http已經(jīng)停止則不輸出wyx2,之間輸入wyx3的http默認發(fā)布目錄
高可用測試:
主備機器都開啟時:
由圖得,對比MAC地址發(fā)現(xiàn)此時發(fā)揮作用的是主機wyx1
此時wyx1的ip情況為
vdip已經(jīng)自動添加
備機wyx4
vdip沒有添加
當主機wxy1的keepalived停止
由圖得,對比MAC地址發(fā)現(xiàn)此時發(fā)揮作用的是備機wyx4
查看主機wyx1的ip
剛才的vdip已經(jīng)不存在
查看備機wyx4的ip
發(fā)現(xiàn)vdip已經(jīng)添加
總結:lvs+keepalived可以實現(xiàn)對于服務的負載均衡以及健康檢查 和 高可用