高可用(HA)集羣

1、HA集羣介紹

HA即(high available)高可用,又被叫做雙機熱備,用於關鍵性業務。可以這樣理解,有兩臺機器A和B,正常情況下,A提供服務,B待命閒置,當A宕機或服務宕掉,會切換至B機繼續提供該服務。常用實現高可用的開源軟件有heartbeat和keepalived,其中keepalived有負載均衡的功能。

wKiom1hwedvh0_HwAAHhcxZkQCI069.png

如圖所示爲一個HA架構,一個交換機下面有兩臺機器Web1和Web2,其中Web1爲主節點,正常使它提供服務,而Web2備用節點是閒置的。Web1和Web2中間有一根心跳線,檢查對方的存活狀態。流動IP,也叫vip是對外提供服務的ip,正常情況下配置在Web1上,當Web1宕機後,Web2會自動配置該vip,對外提供服務。


2、前期準備

準備兩臺機器,一個使用了centos6.5,另一個centos6.3,系統版本不同不影響實驗

網卡eth0 ip如下

master 192.168.1.165

slave 192.168.1.163

下面操作在兩個機器上都要操作:

(1)設置hostname,分別爲主master和從slave

主上設置:

# hostname  master

# vim /etc/sysconfig/network

HOSTNAME=localhost.localdomain

修改爲

HOSTNAME=master

從上設置

# hostname  slave

# vim /etc/sysconfig/network

HOSTNAME=localhost.localdomain

修改爲

HOSTNAME=slave

(2)關閉防火牆,主從都操作

# iptables -F

# service iptables save

# getenforce 0

# vim /etc/selinux/config

SELINUX=enforcing

修改爲

SELINUX=disabled

(3)配置host,主從操作一樣

# vim  /etc/host

192.168.1.165 master

192.168.1.163 slave


3、heartbeat安裝

主機和從機都需要安裝heartbeat,同時需要libnet,主機從機執行同樣的命令

# yum install -y heartbeat

# yum install -y libnet

如果沒有包,則需要安裝一個擴展yum源,heartbeat在epel源中。

# yum install -y epel-release


4、主節點配置

需要先將3個相關的配置文件放置在heartbeat的配置目錄下

# cd /usr/share/doc/heartbeat-3.0.4/

# cp authkeys ha.cf haresources /etc/ha.d/

之後便可以開始修改配置文件了,先修改驗證文件

# cd /etc/ha.d/

# vim authkeys # 用來驗證,主從通過通信驗證對方是否存活,需要加密

auth 3 # 此處打開,數字表示選擇哪種加密方式

#1 crc # 最簡單

#2 sha1 HI! # 最複雜

3 md5 Hello! # 處於中間等級的加密方式

# chmod 600 /etc/ha.d/authkeys

# 如果不修改權限,heartbeat啓動不了

第二個配置haresources文件,只需要編輯一行。因爲當前在ha.d目錄下,直接vim。如果不是,用絕對路徑或者cd

# vim haresources

#node1  10.0.0.170  Filesystem::/dev/sda1::/data1::ext2

#找到上面一行,改成下面,需要去掉#

master  192.168.1.186/24/eth0:0 nginx

# master是主的主機名;192.168.1.186是vip,/24指定網段,網卡eth0:0(這裏採用了虛擬網卡);nginx提供服務,如果主宕掉,從啓動。

最後一個配置ha.cf,裏邊基本全是註釋,這裏選擇刪掉重新寫入,當前依舊在/etc/ha.d目錄下

# > 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.1.163

auto_failback on

node    master

node    slave

ping 192.168.1.1

respawn hacluster /usr/lib/heartbeat/ipfail

配置說明:

debugfile /var/log/ha-debug:該文件保存heartbeat的調試信息

logfile /var/log/ha-log:heartbeat的日誌文件

logfacility     local0 :日誌級別

keepalive 2:心跳的時間間隔,默認單位秒

deadtime 30:超出該時間未收到對方節點的心跳,則認爲對方死亡

warntime 10:超出該時間未收到對方節點的心跳,則發出警告並記錄到日誌

initdead 60:在某些系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔。最少爲deadtime的兩倍

udpport 694:設置廣播通信使用的端口,694爲默認端口號

ucast eth0 192.168.1.163:ucast指定對方ip,bcast形式尋找;eth0心跳檢測自己的網卡,ip對方的ip

auto_failback on:heartbeat的兩臺主機分別爲主節點和從節點。主節點正常情況下佔用資源運行所有服務,遇到故障把資源交給從節點由從節點運行服務。選項爲on情況下,一旦主節點恢復運行,則自動獲取資源並取代從節點運行服務。

node    master:指定主

node    slave:指定從

ping 192.168.1.1

respawn hacluster /usr/lib/heartbeat/ipfail:指定與heartbeat一同啓動和關閉的進程,該進程被自動監視,遇到故障則重新啓動。最常用的進程是ipfail,該進程用於檢測和處理網絡故障,需要配合ping語句指定的pingnode來檢測網絡連接。如果系統是64位,將地址中的lib改爲lib64

然後安裝一個nginx,用於後邊測試

# yum install -y nginx


5、從節點配置

把主上的三個配置拷貝到從上,使用scp命令;並且只需要在從上修改ha.cf文件一個地方即可

# scp authkeys ha.cf haresources slave:/etc/ha.d/

# vim /etc/ha.d/ha.cf

ucast eth0 192.168.1.163改爲ucast eth0 192.168.1.165

也安裝一個nginx,用於後邊測試

# yum install -y nginx


6、heartbeat測試

啓動heartbeat,順序很重要,先主後從

# service heartbeat start

檢查測試(主),第一次會需要等待一段時間,耐心

# ifconfig

看是否有eth0:0

# ps aux | grep nginx

看是否有nginx進程

測試(1)

因爲主從指間的心跳實質是通過ping來連通,so主故意禁掉ping,死掉

# iptables -D INPUT -p icmp -j DROP

如果失敗,查看日誌發現卡在這裏不動

Dec 08 18:56:53 master heartbeat: [9590]: WARN: node 192.168.1.1: is dead

Dec 08 18:56:53 master heartbeat: [9590]: info: Link 192.168.1.1:192.168.1.1 dead.

Dec 08 18:56:53 master ipfail: [9619]: info: Status update: Node 192.168.1.1 now has status dead

harc(default)[10097]: 2016/12/08_18:56:53 info: Running /etc/ha.d//rc.d/status status

Dec 08 18:56:54 master ipfail: [9619]: info: NS: We are dead. :<

Dec 08 18:56:54 master ipfail: [9619]: info: Link Status update: Link 192.168.1.1/192.168.1.1 now has status dead

Dec 08 18:56:55 master ipfail: [9619]: info: We are dead. :<

Dec 08 18:56:55 master ipfail: [9619]: info: Asking other side for ping node count.

嘗試解決方法

將從上的ha.cf配置文件中的ucast修改如下

bcast  eth0

然後重新測試





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章