羣: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以上的新配置語法)
二、如何實現故障遷移以後,節點還能提供一致的服務和內容
能夠適當地根據項目和應用的特色選擇使用共享存儲
變化頻率低的數據: 能夠採用手工同步的方法實現
例如:網站應用的代碼文件
變化頻率高的數據: 採用共享存儲
例如:用戶上傳的附件
數據庫的數據: 使用同一個數據庫服務器