CentOS6.5环境使用keepalived实现nginx服务的高可用性及配置详解
keepalived基礎(chǔ)概念
? ?Keepalived是一個(gè)基于VRRP協(xié)議來(lái)實(shí)現(xiàn)的WEB服務(wù)高可用方案,可以利用其來(lái)避免單點(diǎn)故障。一個(gè)WEB服務(wù)至少會(huì)有2臺(tái)服務(wù)器運(yùn)行Keepalived,一臺(tái)為主服務(wù)器(MASTER),一臺(tái)為備份服務(wù)器(BACKUP),但是對(duì)外表現(xiàn)為一個(gè)虛擬IP,主服務(wù)器會(huì)發(fā)送特定的消息給備份服務(wù)器,當(dāng)備份服務(wù)器收不到這個(gè)消息的時(shí)候,即主服務(wù)器宕機(jī)的時(shí)候,備份服務(wù)器就會(huì)接管虛擬IP,繼續(xù)提供服務(wù),從而保證了高可用性。
? ?keepalived最初的誕生就是為ipvs提供高可用性的,它可以自己調(diào)用ipvs來(lái)生成規(guī)則,并且可以自動(dòng)實(shí)現(xiàn)把用戶設(shè)定好的ip地址轉(zhuǎn)移動(dòng)別的節(jié)點(diǎn)上去的,還可以實(shí)現(xiàn)后端服務(wù)器的健康狀態(tài)檢測(cè),說(shuō)白了就是對(duì)vrrp的實(shí)現(xiàn)而已,那vrrp是什么呢:它叫虛擬冗余路由協(xié)議;vrrp可以把兩個(gè)網(wǎng)關(guān)虛擬成一個(gè)網(wǎng)關(guān)來(lái)使用,當(dāng)一個(gè)網(wǎng)關(guān)不可以用了,另一個(gè)會(huì)取而代之,keepalived其實(shí)就是linux操作系統(tǒng)上實(shí)現(xiàn)vrrp的,keepalived就是這樣來(lái)實(shí)現(xiàn)vip地址轉(zhuǎn)移的,也是實(shí)現(xiàn)的地址的高可用性;
? ?在VRRP協(xié)議中,有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。 VRRP路由器是指運(yùn)行VRRP的路由器,是物理實(shí)體,虛擬路由器是指VRRP協(xié)議創(chuàng)建的,是邏輯概念。一組VRRP路由器協(xié)同工作,共同構(gòu)成一臺(tái)虛擬路由器。該虛擬路由器對(duì)外表現(xiàn)為一個(gè)具有唯一固定IP地址和MAC地址的邏輯路由器。處于同一個(gè)VRRP組中的路由器具有兩種互斥的角色:主控路由器和備份路由器,一個(gè)VRRP組中有且只有一臺(tái)處于主控角色的路由器,可以有一個(gè)或者多個(gè)處于備份角色的路由器。VRRP協(xié)議使用選擇策略從路由器組中選出一臺(tái)作為主控,負(fù)責(zé)ARP相應(yīng)和轉(zhuǎn)發(fā)IP數(shù)據(jù)包,組中的其它路由器作為備份的角色處于待命狀態(tài)。當(dāng)由于某種原因主控路由器發(fā)生故障時(shí),備份路由器能在幾秒鐘的時(shí)延后升級(jí)為主路由器。由于此切換非常迅速而且不用改變IP地址和MAC地址,故對(duì)終端使用者系統(tǒng)是透明的。
keepalived的核心組成:
? ?1、vrrp(Virtual Redundancy Router Protocol)的實(shí)現(xiàn),虛擬冗余路由協(xié)議,它可以把兩個(gè)或多個(gè)網(wǎng)關(guān)虛擬成一個(gè)網(wǎng)關(guān)來(lái)使用,就是在兩個(gè)或多個(gè)路由之前用一種協(xié)議,讓兩個(gè)或多個(gè)路由通過(guò)選舉不決定哪個(gè)是活動(dòng)的路由,當(dāng)活動(dòng)的不再提供服務(wù)了,另一個(gè)將取而代之.
? ?2、virtual server虛擬服務(wù)器
? ?3、vrrp_script
keepalived配置文件分為三段:
? ?第一段:Global configuration全局配置段;
? ? ? ?Global definitions ? ?全局定義;
? ? ? ?Static route ? ?靜態(tài)路由;
? ?第二段:VRRP configuration配置段;
? ? ? ?VRRP synchronization groups同步組,假如在一個(gè)節(jié)點(diǎn)上配置兩個(gè)IP要把VIP同時(shí)轉(zhuǎn)移出去,也就是說(shuō)這兩個(gè)VIP要同步工作,定義成一個(gè)組,而后當(dāng)也一個(gè)資源來(lái)轉(zhuǎn)移;
? ? ? ?VRRP instances實(shí)例,定義虛擬路由器的;要實(shí)現(xiàn)虛擬路由轉(zhuǎn)移時(shí)要轉(zhuǎn)移IP地址;
? ?第三段:LVS configuration配置段;
? ? ? ?virtual server groups,虛擬路由服務(wù)器組,把多個(gè)路由定義在一起同時(shí)使用;
? ? ? ?virtual servers虛擬服務(wù)器,一般都是單獨(dú)定義的;
環(huán)境準(zhǔn)備:
ansible server:192.168.8.40
node2.chinasoft.com:192.168.8.39
node4.chinasoft.com:192.168.8.42
在ansible服務(wù)器中定義keepalived組
# vim /etc/ansible/hosts
[keepalived]
node2.chinasoft.com
node4.chinasoft.com
在兩個(gè)節(jié)點(diǎn)node2和node4上安裝nginx軟件:
# ansible keepalived -m yum -a "name=nginx state=present"
編輯默認(rèn)主頁(yè),將Welcome信息改為各自節(jié)點(diǎn)的hostname:
# vim /usr/share/nginx/html/index.html
keepalived的實(shí)現(xiàn)過(guò)程:
第一步:安裝配置keepalived程序
# ansible keepalived -m yum -a "name=keepalived state=present"
將配置文件發(fā)送一份到node4中,并修改vrrp_instance VI_1 部分的
state 為BACKUP
priority 優(yōu)先級(jí)為 99
重啟keepalived服務(wù)
# ansible keepalived -a "service keepalived restart"
可以看到VIP虛擬地址被node2MASTER獲取,在node2的/etc/keepalived目錄下創(chuàng)建文件down,可以看到虛擬IP就轉(zhuǎn)移到了node4上
將node2中的down文件刪除可以看到VIP又回到了node2MASTER中,訪問(wèn)http://192.168.8.77虛擬IP可以看到nginx服務(wù)在node2上
第二步:編寫(xiě)通告腳本
node2和node4都需要編寫(xiě),當(dāng)某一節(jié)點(diǎn)發(fā)生VIP地址轉(zhuǎn)移時(shí)就會(huì)發(fā)郵件通知管理員,在/etc/keepalived/目錄下創(chuàng)建一個(gè)腳本文件,然后再在腳本文件中調(diào)用這個(gè)腳本就可以了,上面配置文件中已經(jīng)有調(diào)用腳本內(nèi)容了:
# vim /etc/keepalived/notify.sh
第三步:配置LVS的集群服務(wù)
把下面代碼加入到各節(jié)點(diǎn)的/etc/keepalived/keepalived.conf配置文件中即可,默認(rèn)的配置文件中也有示例:
在各節(jié)點(diǎn)上安裝ipvsadm工具
# ansible keepalived -m yum -a "name=ipvsadm state=present"
通過(guò)ipvsadm命令可以看到集群節(jié)點(diǎn)已經(jīng)啟動(dòng)了
即使沒(méi)安裝有ipvsadm,只要配置有keepalived的lvs,啟動(dòng)服務(wù)后就會(huì)自動(dòng)生成LVS規(guī)則,但是如果沒(méi)安裝有ipvsadm就查看不了規(guī)則了
第四步:兩個(gè)節(jié)點(diǎn)都配置有MASTER/BACKUP
定義兩個(gè)實(shí)例,一個(gè)定義為MASTER,另一個(gè)定義為BACKUP就可以了,分別配置不同的VIP,node2上配置了MASTER的VIP為192.168.8.77,BACKUP的VIP為192.168.8.78;node4為上配置了MASTER的VIP為192.168.8.78,BACKUP的VIP為192.168.8.77。
# 這段代碼在node2的節(jié)點(diǎn)上加,同樣加為vrrp實(shí)例就可以了
vrrp_instance VI_2 {
? ? state BACKUP
? ? interface eth0
? ? virtual_router_id 33
? ? priority 99
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.8.78
? ? }
? ? track_script {
? ? ? ? chk_mantaince_down
# ? ? ? chk_nginx
? ? }
? ? notify_master "/etc/keepalived/notify.sh master"
? ? notify_backup "/etc/keepalived/notify.sh backup"
? ? notify_fault "/etc/keepalived/notify.sh fault"
}
# 下面這段代碼加到node4節(jié)點(diǎn)的配置文件上就可以了,就是需要改一個(gè)master和權(quán)重
vrrp_instance VI_2 {
? ? state MASTER
? ? interface eth0
? ? virtual_router_id 33
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.8.78
? ? }
? ? track_script {
? ? ? ? chk_mantaince_down
# ? ? ? chk_nginx
? ? }
? ? notify_master "/etc/keepalived/notify.sh master"
? ? notify_backup "/etc/keepalived/notify.sh backup"
? ? notify_fault "/etc/keepalived/notify.sh fault"
}
再次重啟keepalived服務(wù)
# ansible keepalived -a "service keepalived restart"
結(jié)束:
? ?keepalived的vrrp的大概實(shí)現(xiàn)出來(lái)了,不管是LVS還是高可用VIP地址的自動(dòng)轉(zhuǎn)移,還是服務(wù)的高用,都需要認(rèn)真的配置好,更有需要寫(xiě)好很多的腳本,服務(wù)才會(huì)更高效,更高可用。
轉(zhuǎn)載于:https://www.cnblogs.com/reblue520/p/6239804.html
總結(jié)
以上是生活随笔為你收集整理的CentOS6.5环境使用keepalived实现nginx服务的高可用性及配置详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: select,poll,epoll区别。
- 下一篇: IT行业: 嵌入式工程师的进阶之路