heartbeat+nginx搭建高可用HA集羣

前言:

 HA即(high available)高可用,又被叫作雙機熱備,用於關鍵性業務。簡單理解就是,有2臺機器 A 和 B,正常是 A 提供服務,B 待命閒置,當 A 宕機或服務宕掉,會切換至B機器繼續提供服務。常見的實現高可用的開源軟件有 heartbeat 和 keepalived。node

    這樣,一臺 web 服務器一天24小時提供web服務,不免會存在 web 服務掛掉或服務器宕機宕機的狀況,那麼用戶就訪問不了服務了,這固然不是咱們指望的。若是這樣,有2臺服務器,A對外提供 web 服務,B做爲備用,若是A掛掉,那麼B馬上替代A的位置去提供 web 服務,這樣對用戶來講是透明的。可是有個問題,服務器A的 ip 是 10.0.0.100,服務器B的 ip 是 10.0.0.101,顯然向用戶提供A或B的ip地址是不可行的,由於用戶總不能去切換ip來訪問的吧。這時heartbeat或keepalived能夠提供一個虛擬IP:10.0.0.102,用戶只須要訪問 10.0.0.102,當A提供服務時,VIP 會設置在A服務器上,當B提供服務時,VIP會設置在B服務器上,這樣就可讓用戶經過訪問 10.0.0.102 來獲取web服務,即便A或B服務器切換也不影響用戶的正常訪問。linux

 

名詞解釋:

HA=high availablenginx

VIP=虛擬IPweb

 

準備環境:

服務器DBMaster:vim

主機名:dbmaster
操做系統:CentOS6.5
eth0 IP0:192.168.150.3
eth0 IP1:192.168.150.33tomcat

服務器DBSlave:服務器

主機名:slave
操做系統:CentOS6.5
eth0 IP0:192.168.150.4
eth0 IP1:192.168.150.44網絡

 

漂移VIP:192.168.150.253(也就是要訪問的IP)測試

 

S1:設置主機名:

dbmaster節點設置hostnamespa

#hostname dbmaster
#vim /etc/sysconfig/network
編輯配置文件:
HOSTNAME=dbmaster

  

dbslave節點設置hostname

# hostname dbslave
# vim /etc/sysconfig/network
編輯配置文件:
HOSTNAME=dbslave

 

S2:關閉防火牆和selinux(2臺節點都要操做)

關閉iptables

 

# iptables -F
# service iptables save
# service iptables stop

關閉selinux:

# setenforce 0
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

 

S3:配置hosts文件(2臺節點都操做)

# vim /etc/hosts
增長內容以下:
192.168.150.3 dbmaster
192.168.150.4 dbslave

 

S4:安裝epel擴展源 (2臺都操做)

# yum install -y epel-release

 

S5:安裝heartbeat (2臺都操做)

# yum install -y heartbeat* libnet nginx

 

S4+S5或可爲以下操做 

#rpm -ivh http://www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm
yum list|grep heartbeat
yum -y install  heartbeat*
安裝資源包nginx和heartbeat的依賴包libnet和libxml
yum -y install nginx
yum -y install libnet*

 

 

S6:主dbmaster節點配置

一、拷貝配置文件:

 

# cd /usr/share/doc/heartbeat-3.0.4/
# cp authkeys ha.cf haresources /etc/ha.d/
# cd /etc/ha.d

二、修改authkeys

# vim authkeys
更改或增長以下內容:
auth 3
3 md5 Hello!
而後修改其權限
# chmod 600 authkeys

三、編輯haresources文件

# vim haresources
加入下面一行:
dbmaster 192.168.150.253/24/eth0:0 nginx

說明:dbmaster爲主節點hostname,192.168.150.253爲飄vip,/24爲掩碼爲24的網段,eth0:0爲vip的設備名,nginx爲heartbeat監控的服務,也是兩臺機器對外提供的核心服務。

 

四、編輯ha.cf

# vim ha.cf
修改成以下內容:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 192.168.150.44
auto_failback on
node dbmaster
node dbslave
ping 192.168.150.253
respawn hacluster /usr/lib64/heartbeat/ipfail

五、配置說明:

debugfile /var/log/ha-debug該文件保存heartbeat的調試信息。
logfile /var/log/ha-logheartbeat的日誌文件。
keepalive 2:心跳的時間間隔,默認時間單位爲秒s。
deadtime 30:超出該時間間隔未收到對方節點的心跳,則認爲對方已經死亡。
warntime 10:超出該時間間隔未收到對方節點的心跳,則發出警告並記錄到日誌中。
initdead 60:在某系統上,系統啓動或重啓以後須要通過一段時間網絡才能正常工做,該選項用於解決這種狀況產生的時間間隔,取值至少爲deadtime的2倍。
udpport 694:設置廣播通訊使用的端口,694爲默認使用的端口號。
ucast eth0 192.168.150.44:設置對方機器心跳檢測的網卡和IP。
auto_failback on:heartbeat的兩臺主機分別爲主節點和從節點。主節點在正常狀況下佔用資源並運行全部的服務,遇到故障時把資源交給從節點由從節點運行服務。在該選項設爲on的狀況下,一旦主節點恢復運行,則自動獲取資源並取代從節點,不然不取代從節點。

ping 192.168.150.253:設置的漂移IP。
respawn heartbeat /usr/lib/heartbeat/ipfail:指定與heartbeat一同啓動和關閉的進程,該進程被自動監視,遇到故障則從新啓動。最經常使用的進程是ipfail,該進程用於檢測和處理網絡故障,須要配合ping語句指定的ping node來檢測網絡鏈接。若是你的系統是64bit,請注意該文件的路徑。

 

S7:把主節點上的三個配置文件拷貝到從節點

# cd /etc/ha.d
# scp authkeys ha.cf haresources dbslave:/etc/ha.d

 

S8:從節點dbslave編輯ha.cf

# vim /etc/ha.d/ha.cf
只須要更改一個地方以下:以下IP爲對方機器的心跳IP
ucast eth0 192.168.150.33

 

S9:啓動heartbeat服務

配置完畢後,先master啓動,後slave啓動。啓動後要稍後5-10秒左右能夠看到nginx的進程。

# service heartbeat start

 

S10:檢查測試

# ifconfig
看是否有接口 eth0:0

# ps aux | grep nginx
看是否有nginx進程

主節點中止heartbeat服務

# service heartbeat stop

 

總結:

一、我是在兩臺服務器上分別部署了tomcat,同樣的部署方式及同樣的程序,僅是首頁的出現的問題一個是dbmaster另外一個是dbslave,使用第三臺機器訪問「http://192.168.150.253:端口/項目名時能夠發現首頁的文字是dbmaster,當停掉master服務器的heartbeat時,再刷新頁面會發現已是slave字樣。

二、若是啓動heartbeat過程當中出現 Resource is stopped 能夠忽略。

相關文章
相關標籤/搜索