linux高可用羣集(一)

羣:html

高可用(HA)集羣:node

解決架構中的單點故障。mysql

有Heartbeat,rhcslinux

負載均衡集羣:web

解決架構中壓力過大的問題。sql

高性能集羣:數據庫

Hadoopvim


須要瞭解的一些HA集羣的概念:api


主節點:在HA集羣中,優先成爲活動節點而且提供服務服務器

備用節點:在HA集羣中,若是主節點出現故障,該節點會自動平滑地取代主節點成爲活動節點提供服務

活動節點: 在HA集羣中,當前得到了資源而且正在提供服務的節點

資源: 爲了可以爲客戶提供服務而啓動一些系統服務或者程序,常見的資源: 浮動IP,各類服務(httpd,vsftpd,mysqld等,只要是經過腳本啓動的服務或程序都能叫作資源)

浮動IP: 當節點成爲活動節點的時候須要綁定的IP,若是節點出現故障,該IP就會讓替換該故障節點的備用節點所綁定。因此該IP實在HA集羣中的節點之間浮動綁定的。

單點故障: 只要架構中存在某個點出現故障(包括服務器硬件、軟件故障),整個架構就中斷服務,那麼該點股站就是單點故障。

故障遷移: HA集羣中,某個故障出現了,備用節點取代故障節點,這個過程就叫故障遷移。


心跳: 用於集羣節點之間傳播集羣狀態信息和節點的健康狀態信息。



HA集羣的通用架構圖:



例子:使用heartbeat實現簡單的web高可用集羣



客戶端請求http://vip/ 或者 http://domain-name --> vip

|||

vip

 |---------------|   <---- 生產網絡

server1 server2    

 |---------------|    <---- 心跳網絡







要求:

系統採用rhel6


server1 (主節點)

server1.josen365.net

eth0 192.168.1.52/24  <---- 生產網絡

        eth0:0 192.168.33.52/24  <---- 生產網絡

eth1 192.168.100.52/24 <---- 心跳網絡

gw 192.168.1.254 <---設定爲生產網絡


server2 (備用節點)

server2.josen365.net

eth0 192.168.1.50/24

        eth0:0 192.168.33.50/24

eth1 192.168.100.50/24

gw 192.168.1.254  <---設定爲生產網絡



vip 192.168.33.53

誰對外提供服務,誰綁定該IP(集羣套件自動綁定,不是手工綁定)。

客戶端就是使用該IP訪問服務,或者域名解析該IP



準備:

靜態IP,FQDN主機名

相互綁定主機名到hosts文件





配置過程:


# cat /etc/hosts

...

...

192.168.100.50 server1.upl.com  《---選擇心跳網絡的IP綁定主機名

192.168.100.52 server2.upl.com


關閉NetworkManager服務,設定開機不啓動

關閉iptables、selinux



軟件倉庫:

[Base]

name=Base

baseurl=ftp://192.168.100.1/el65/

enabled=1

gpgcheck=0


[HighAvailability]    《---rhel6須要原來這個分組

name=HighAvailability

baseurl=ftp://192.168.100.1/el65/HighAvailability

enabled=1

gpgcheck=0


1、集羣節點都安裝集羣軟件heartbeat



# yum install ./heartbeat-3.0.4-2.el6.x86_64.rpm  ./heartbeat-libs-3.0.4-2.el6.x86_64.rpm -y  --nogpgcheck




rhel6u5系統得另外執行:

# ln -s /usr/lib64/heartbeat/*  /usr/libexec/heartbeat/

6u5會錯誤地去/usr/libexec/heartbeat/找可執行文件



2、配置集羣



一、在其中一個集羣節點進行配置


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



配置主配置文件

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


logfile /var/log/ha-log

logfacility     local0

keepalive 2

deadtime 12

warntime 6

initdead 40

udpport 694  <---使用網絡發送心跳使用的udp協議的端口


ucast eth1 192.168.100.52  使用本機eth1接口發送心跳給192.168.100.52

把配置文件同步到對端節點要修改IP


auto_failback on  主節點故障修復上線以後,會自動把資源搶回來成爲活動節點


node    server1.upl.com   必須寫節點的完整主機名(uname -n)

node    server2.upl.com


ping  192.168.100.1 選擇心跳網絡中最穩定通常不會出問題的設備的IP

用於輔助節點判斷節點自身的網絡健康狀況


respawn hacluster /usr/lib64/heartbeat/ipfail  《--64位系統要把lib修改爲lib64

apiauth ipfail gid=haclient uid=hacluster




編輯心跳加密配置文件

# vim /etc/ha.d/authkeys

auth 2

2 sha1 HI8sadkjfh23!


# chmod 600 /etc/ha.d/authkeys  必須保證權限正確



編輯HA集羣中資源

vip --> httpd

格式:  主節點 資源1::參數1::參數2  資源2  資源3::參數


定義資源的時候,要根據資源的綁定順序,從左到要右綁定資源

釋放資源是從右到左


資源腳本的查找路徑 /etc/ha.d/resources.d , /etc/rc.d/init.d/


# vim /etc/ha.d/haresources 

server1.upl.com   IPaddr::192.168.100.53/24/eth0  httpd


二、同步配置文件到其他節點

# scp /etc/ha.d/{ha.cf,authkeys,haresources}  server2.upl.com:/etc/ha.d/


同步以後記得修改ha.cf中心跳對端IP

ucast eth1 192.168.100.50



3、充分測試好各類資源


vip  : 肯定網絡中沒有其餘設備佔用了該IP

肯定vip的掩碼要正確



httpd: 肯定安裝了httpd,而且人工啓動肯定工做正常後,再必須手工關閉



# yum install httpd -y


要了更好看到「故障遷移」的效果,咱們故意讓兩個節點的頁面內容不同:

server1 # echo "server1" >> /var/www/html/index.html

server2 # echo "server2" >> /var/www/html/index.html


# service httpd start


找客戶端測試是否可以訪問到該頁面,若是能夠,@@@@就關閉httpd@@@@

爲何要關閉? 由於http已經做爲HA集羣中的資源,是由HA集羣套件來決定是否須要啓動




4、啓動集羣


全部集羣節點都應該依次同時啓動:

# service heartbeat start




驗證:

一、若是集羣啓動成功,全部節點都健康的狀況下,主節點優先得到資源成爲活動節點

# lsof -i:80 -n

# ip addr show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:1d:e2:f5 brd ff:ff:ff:ff:ff:ff

    inet 192.168.110.101/24 brd 192.168.110.255 scope global eth0

    inet 192.168.100.53/24 brd 192.168.110.255 scope global secondary eth0

    inet6 fe80::5054:ff:fe1d:e2f5/64 scope link 

       valid_lft forever preferred_lft forever



客戶端使用vip訪問

# elinks 192.168.100.53


二、手工友好地切換資源


活動節點把資源讓出去:

# /usr/share/heartbeat/hb_standby

活動節點經過心跳包告訴對端節點:我要把資源讓給你,你作好準備了,而後活動節點會首先(從右到左)釋放全部資源,釋放成功以後,告訴對端節點能夠綁定資源了。最後對端節點纔會去綁定資源成爲新的活動節點


非活動節點主動搶資源:

# /usr/share/heartbeat/hb_takeover



三、直接把活動節點硬關機

模擬活動節點死機了

若是故障的節點是集羣中主節點,那麼該節點修復上線以後,會怎麼樣?


分析:

一、什麼緣由會致使故障遷移的發生?

通常是由於活動節點的心跳存在問題,致使備用節點接受不了活動節點的心跳,若是存在電源設備,那麼備用節點會使用電源設備把故障的活動節點進行電源重置(重啓),而後纔會綁定資源成爲活動節點,完成故障遷移。

若是設定中,沒有存在電源設備,備用節點在接受不到活動節點的心跳的時候,會直接綁定資源。這樣會有可能致使「腦裂」。由於有可能,活動節點的心跳沒法正常接受,不必定是活動節點的問題,有可能網絡的問題,致使活動節點和備用節點之間的心跳不正常。


要解決腦裂:最根本的方法就是使用電源設備。

若是沒有電源設備,能夠經過增長心跳網絡來下降腦裂出現的機率。


有寫HA集羣套件還能支持基於資源的故障遷移: 若是活動節點的資源,例如httpd由於故障死掉了,不能提供服務,集羣套件會及時發現,而且把相關資源都釋放,讓備用節點去綁定資源,進行故障遷移。若是要使用heartbeat來實現,必須使用style2(版本2以上的新配置語法)




二、如何實現故障遷移以後,節點還能提供一致的服務和內容

能夠適當地根據項目和應用的特色選擇使用共享存儲


變化頻率低的數據: 能夠採用手工同步的方法實現

例如:網站應用的代碼文件

變化頻率高的數據: 採用共享存儲

例如:用戶上傳的附件



數據庫的數據:  使用同一個數據庫服務器

相關文章
相關標籤/搜索