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)測試
dbmaster節點設置hostnamespa
#hostname dbmaster #vim /etc/sysconfig/network 編輯配置文件: HOSTNAME=dbmaster
dbslave節點設置hostname
# hostname dbslave # vim /etc/sysconfig/network 編輯配置文件: HOSTNAME=dbslave
關閉iptables
# iptables -F # service iptables save # service iptables stop
關閉selinux:
# setenforce 0 # sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# vim /etc/hosts 增長內容以下: 192.168.150.3 dbmaster 192.168.150.4 dbslave
# yum install -y epel-release
# yum install -y heartbeat* libnet nginx
#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*
一、拷貝配置文件:
# 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-log:heartbeat的日誌文件。
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,請注意該文件的路徑。
# cd /etc/ha.d # scp authkeys ha.cf haresources dbslave:/etc/ha.d
# vim /etc/ha.d/ha.cf 只須要更改一個地方以下:以下IP爲對方機器的心跳IP ucast eth0 192.168.150.33
配置完畢後,先master啓動,後slave啓動。啓動後要稍後5-10秒左右能夠看到nginx的進程。
# service heartbeat start
# 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 能夠忽略。