天天看點

伺服器叢集之高可用叢集—HA Cluster(High Available)

什麼是高可用HA?

    HA(High Available), 高可用性群集,是保證業務連續性的有效解決方案,避免了因為單點故障帶來的風險,一般有兩個或兩個以上的節點,且分為活動節點及備用節點。通常把正在執行業務的稱為活動節點,而作為活動節點的一個備份的則稱為備用節點,各節點之間會傳遞心跳資訊确認對方是否運作正常。當活動節點出現問題,導緻正在運作的業務(任務)不能正常運作時,備用節點此時就會偵測到,并立即接續活動節點來執行業務。進而實作業務的不中斷或短暫中斷。

Messaging Layer Cluster Infrastucture 叢集的基礎架構層:提供底層的高可用服務。

Cluster Resource Manager 叢集資料總管:通過收集底層的心跳資訊來确定哪個節點依然存活,它能夠接受上層服務的委托,與底層通信,管理哪個服務運作在哪個節點上,它可以實作,想要提供高可用服務實作高可用性,但本身不具備高可用能力,也無法與基礎架構層通信的服務,都作為資源來管理。 需要在各節點轉移的,都可稱為資源,如 IP,Web服務,ftp服務等。

資源限制:

    位置限制:限制資源優先運作在哪個節點上。

    排列限制:用于定義資源與資源間的關系,資源之間能否運作在一起,比如限制當某個資源啟動時,另一個才可以啟動,如果它沒啟動那另一個也一定不會啟動。

    順序限制:定義資源與資源間的啟動順序。

RA(Resource Agent) 資源代理:

    LSB:Linux Standard Base      Linux基礎标準   

    OCF:Open Cluster Framework    開放叢集架構

RA還會實作資源的檢測,當服務運作不正常時,會嘗試重新開機該服務,再不行會通知CRM實施轉移。

DC(Designated Coordinator):

    是節點中自動推舉的協調員,負責收集心跳資訊,協調各個節點。

實驗一、使用heartbeat建構一個Web高可用叢集。

實驗規劃:

    主節點:admin1.tuchao.com 192.168.18.201/24

    備節點:admin2.tuchao.com 192.168.18.202/24

    vip:192.168.18.222/24

    myip:192.168.18.220/24

    NFS伺服器:192.168.18.203/24 

實驗目标:    

    1、主節點上面提供HTTP服務,運作着一個動态Blog站點。備節點上提供了MySQL服務。

    2、當主節點故障時,備節點在運作MySQL的情況下,會自動啟動httpd服務,接續主節點提供Web服務

    3、當備節點故障時,主節點會啟動MySQL服務接續工作,這就實作了兩個節點之間互為主備。

    4、網站程式與MySQL資料目錄,存放至NFS伺服器上,實作共享存儲。

    準備存儲,先配置NFS伺服器:

mkdir /mysqldata --用于存放MySQL資料檔案

mkdir /http --用于存放網站程式

vim /etc/exports --修改配置檔案,加入以下行。

/http      192.168.18.0/24(rw,no_root_squash)

/mysqldata      192.168.18.0/24(rw,no_root_squash)

/etc/init.d/nfs start --啟動nfs服務

useradd -r -u 300 mysql --添加mysql使用者

chown -R mysql.mysql  /mysqldata --給予權限

    主節點admin1.tuchao.com配置:

MySQL的安裝 略

cp support-files/mysql.server  /etc/init.d/mysqld  --複制服務腳本

chkconfig --add mysqld  --添加到系統服務

chkconfig mysqld off  --禁止開機自啟動,注意如果要作為高可用叢集的話,一定要禁止。

mkdir /mydata  --建立挂載點

mount -t nfs 192.168.1.110:/mysqldata /mydata  --挂載共享存儲

mkdir /mydata/data  --建立資料目錄

修改/etc/my.cnf檔案,指定datadir=/mydata/data

初始化MySQL,建立庫,建立使用者,授權使用者。(給網站程式連接配接資料庫時使用)

./scripts/mysql_install_db  --user=mysql --datadir=/mydata/data

service mysqld start

create database wpdb;

create user wpuser;

grant all on wpdb.* to 'wpuser'@'192.168.18.%' identified by '123456';

修改hosts檔案。

vim /etc/hosts

192.168.18.201   admin1.tuchao.com admin1

192.168.18.202   admin2.tuchao.com admin2

安裝PHP,配置httpd服務,解壓網站程式,配置接口。略

首頁可以通路到了,代表Web服務和MySQL配置是沒問題的。

<a href="http://s3.51cto.com/wyfs02/M02/41/4E/wKiom1PSJpCxnKBEAAGIUoWMR_E040.jpg" target="_blank"></a>

現在停止服務解除安裝共享存儲,安裝heartbeat,開始配置高可用叢集:

/etc/init.d/httpd stop

/etc/init.d/mysqld stop

chkconfig httpd off   //這裡注意一旦打算把服務定義為叢集資源,一定不能設定開機啟動。

chkconfig mysqld off

umount /var/www/html

umount /mydata

yum install heartbeat-2.1.4-12.el6.i686.rpm  heartbeat-stonith-2.1.4-12.el6.i686.rpm heartbeat-gui-2.1.4-12.el6.i686.rpm  ipvsadm-1.26-2.el6.i686.rpm  libnet-1.1.6-7.el6.i686.rpm  heartbeat-pils-2.1.4-12.el6.i686.rpm 

複制配置檔案

cd /usr/share/doc/heartbeat-2.1.4/

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

生成随機數,配置authkeys檔案,用于認證。

chmod 600 authkeys

openssl rand -hex 8 &gt;&gt; authkeys

<a href="http://s3.51cto.com/wyfs02/M01/41/4E/wKiom1PSJ82Cz38jAACbBjRAO6I111.jpg" target="_blank"></a>

配置ha.cf檔案,啟動heartbeat服務。

crm respawn,也可以使用crm on,crm yes  //用于啟動額外的crm

#下面是對傳輸的資料進行壓縮,是可選項

compression     bz2

compression_threshold 2

<a href="http://s3.51cto.com/wyfs02/M00/3B/85/wKiom1O-K1jwLpziAADnsEj-V88977.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/3B/85/wKioL1O-Kzni3fUhAAHdHW-KF5s341.jpg" target="_blank"></a>

keepalive 2  //持久連接配接

deadtime 30  //30秒後認為節點死亡

initdead 30  //在某些配置下,重新開機後網絡需要一些時間才能正常工作。這個單獨的”initdead”選項可以處理這種情況。它的取值至少應該為通常deadtime的兩倍。

udpport 694  //偵聽的UDP端口,這個值是預設的。

bcast   eth0 eth1  //廣播接口

auto_failback  on  //是否開啟,節點恢複後資源自動傳回原節點。

啟動heartbeat關閉selinux和防火牆。

service heartbeat start

/etc/init.d/iptables stop

chkconfig iptables off

setenforce 0

備節點admin2.tuchao.com,配置和主節點相同,隻需要安裝好程式,然後把配置檔案拷貝過去就可以了。

scp authkeys ha.cf  admin2:/etc/ha.d

scp /etc/hosts  admin2:/etc/hosts

scp /etc/httpd/conf/httpd.conf  admin2:/etc/httpd/conf/httpd.conf

scp /etc/my.cnf  admin2:/etc

scp /etc/ld.so.conf.d/mysql.conf  admin2:/etc/ld.so.conf.d/mysql.conf

scp /etc/profile.d/mysql.sh  admin2:/etc/profile.d/mysql.sh

ldconfig

. /etc/profile.d/mysql.sh

啟動heartbeat後,需要給hacluster使用者一個密碼,就可以使用hb_gui圖形界面來配置資源。

hb_gui &amp;

echo 123456 |passwd --stdin hacluster 

配置資源

我将資源分為以下兩組:

webserver    運作在主節點

vip:192.168.18.222    cidr_netmask 24

store device:192.168.18.203:/http  directory:/var/www/html fstype:nfs

httpd //這個使用的是LSB标準類型,沒有額外參數。

mysql    運作在備節點

myip:192.168.18.220    cidr_netmask 24

mystore device:192.168.18.203:/mysqldata directory:/mydata fstype:nfs

mysqld //LSB類型

定義完成後,啟動成功如下圖:

<a href="http://s3.51cto.com/wyfs02/M00/41/5C/wKioL1PTjLGSizPqAAKIzLoT6a4358.jpg" target="_blank"></a>

我們通路vip對應解析的域名(www.tuchao.com)

可以正常通路到我們的站點

<a href="http://s3.51cto.com/wyfs02/M02/41/5E/wKioL1PUPYTynD31AAGnQ-mlM4s449.jpg" target="_blank"></a>

模拟故障,這時把我們主節點的network服務給stop。

/etc/init.d/network stop

嘗試用備節點ping 主節點,已經ping不通了。

<a href="http://s3.51cto.com/wyfs02/M01/41/5D/wKiom1PUPmOiWTv4AAHunCbO9qU937.jpg" target="_blank"></a>

這時嘗試下我們的站點還能不能正常通路。

<a href="http://s3.51cto.com/wyfs02/M00/41/5E/wKioL1PUQDmCWzxXAAHITg3cLJQ182.jpg" target="_blank"></a>

哈哈,通路正常,我們明明把提供http服務的admin1節點的網絡功能給停了呀。

我們來看看heartbeat。

<a href="http://s3.51cto.com/wyfs02/M02/41/5D/wKiom1PUQDeSkzMIAAJsT8_vKNI793.jpg" target="_blank"></a>

這裡顯示主節點已關閉,主節點的資源組已經自動切換到備節點上來了。

<a href="http://s3.51cto.com/wyfs02/M01/41/5E/wKioL1PUQ4iB57u3AAMX-kAwDQM192.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/41/5D/wKiom1PUQoiC0I8rAAGxBaBTlY4996.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/41/5E/wKioL1PUQ7_Aj1sJAAJvxH2b9n8636.jpg" target="_blank"></a>

現在我們把主節點網絡功能給恢複,因為這裡開啟了auto_failback on,資源又會自動切換回主節點了。

<a href="http://s3.51cto.com/wyfs02/M00/41/5D/wKiom1PURerhL3QFAAIlPMn4kFA742.jpg" target="_blank"></a>

我們把備節點網絡功能給關掉,主節點也會自動接替備節點的工作。

這就實作了互為主備的高可用模型。

<a href="http://s3.51cto.com/wyfs02/M01/41/5D/wKiom1PUSVTgpmcEAAHK6y-lEU4068.jpg" target="_blank"></a>

實驗二、LVS負載均衡+高可用,使用heartbeat-ldirectord對後端RealServer做健康狀況檢測。

實驗環境:

    RHEL6.4

安裝ipvsadm

yum install ipvsadm -y

安裝heartbeat-ldirectord,複制配置檔案樣列。

yum install heartbeat-ldirectord -y

cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf  /etc/ha.d/

編輯配置檔案:

checktimeout=3  //等待逾時時間

checkinterval=1  //檢查時間間隔

#fallback=127.0.0.1:80  

autoreload=yes  //自動裝載配置檔案

#logfile="/var/log/ldirectord.log"  //定義服務自我管理的日志

#logfile="local0"  //定義日志發送給rsyslog

#emailalert="[email protected]"  //管理者郵箱

#emailalertfreq=3600  //郵件發送頻率

#emailalertstatus=all 

quiescent=yes  //是否以靜默模式工作(當某一個Realserver故障了如何處理,yes表示把realserver權重設定為0,no表示把realserver删除。

virtual=192.168.18.100:80  //定義虛拟IP

        real=192.168.18.191:80 gate  //定義RealServer,gate表示DR模型。

        real=192.168.18.192:80 gate 3

        fallback=127.0.0.1:80 gate  //當RealServer全部故障時,使用本機響應請求。

        service=http  //當檢測類型為協商的時候,指定檢測方式是基于什麼服務實作的。

        request=".test.html"

        receive="OK"

        virtualhost=www.tuchao.com  //虛拟主機

        scheduler=wrr  //指定排程算法

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate  //檢查類型為協商

        checkport=80

配置檔案寫好以後,複制一份到備節點。

啟動圖像界面定義資源

vip

<a href="http://s3.51cto.com/wyfs02/M01/41/60/wKioL1PUiVbSHXxsAAJdsS7jLpc009.jpg" target="_blank"></a>

ldirectord

<a href="http://s3.51cto.com/wyfs02/M00/41/60/wKiom1PUiFvR1YFgAAJWcPWuclc684.jpg" target="_blank"></a>

配置好兩台realserver分别是192.168.18.191,192.168.18.192。

echo 1 &gt; /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 &gt; /proc/sys/net/ipv4/conf/lo/arp_announce

echo 1 &gt; /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 &gt; /proc/sys/net/ipv4/conf/all/arp_announce

ifconfig lo:0 192.168.18.100  broadcast 192.168.18.100 netmask 255.255.255.255 up

route add -host 192.168.18.100 dev lo:0

建立首頁檔案  略

建立檢測檔案

echo "OK" &gt; /var/www/html/.test.hmtl

啟動httpd服務

service httpd start

第二台RealServer配置相同。

啟動資源

<a href="http://s3.51cto.com/wyfs02/M01/41/60/wKioL1PUiwOSkfeSAAF1gow8KQg690.jpg" target="_blank"></a>

資源運作在了節點二上

<a href="http://s3.51cto.com/wyfs02/M01/41/60/wKiom1PUitiBzEXWAAGvEPmKnBM819.jpg" target="_blank"></a>

我們通路下director試試。

<a href="http://s3.51cto.com/wyfs02/M00/41/60/wKiom1PUiv-S6LKmAAEahW23W5A686.jpg" target="_blank"></a>

重新整理一下,這裡為了更好的分别有沒有生效,設定了兩個不同的網頁内容。

<a href="http://s3.51cto.com/wyfs02/M01/41/60/wKiom1PUi0qBjoT6AAEbM2ihwC4880.jpg" target="_blank"></a>

現在模拟節點二故障,在節點二上執行halt。

資源已經自動切換到節點一上來了,負載均衡正常運作。

<a href="http://s3.51cto.com/wyfs02/M00/41/60/wKioL1PUjeDDa9zMAAFTrdwS69Q491.jpg" target="_blank"></a>

配置節點一與節點二httpd服務,實作fallback功能。

echo “Server is repairing”&gt;/var/www/html/index.html

這時候模拟realserver全部都故障了,ldirectord會自動把故障的realserver權重标記為0。

<a href="http://s3.51cto.com/wyfs02/M00/41/60/wKioL1PUkK3w0xrbAAGChzWrdDQ312.jpg" target="_blank"></a>

嘗試下通路,這時director就響應我們了。

<a href="http://s3.51cto.com/wyfs02/M02/41/60/wKiom1PUj9jzYdSCAADKeymUd9g143.jpg" target="_blank"></a>

HA高可用實驗完成,這裡提一個小細節,實際工作中配置heartbeat還是不要啟用auto_failback,當損壞的節點突然好了以後,資源切回來有時會出錯,要手動到clearup一下資源就可以了。

有更好的建議歡迎大家與我多多交流QQ:1183710107

本文轉自qw87112 51CTO部落格,原文連結:http://blog.51cto.com/tchuairen/1436086