heartbeat v1的架構是:heartbeat + haresource 來實現高可用的。heartbeat 做爲message layer層,haresource做爲CRM管理資源,RA能夠有LSB,OSF,heartbeat legacy提供。 ######################################一、Heartbeat的控制信息: 「心跳」信息: (也稱爲狀態信息)僅150 bytes大小的廣播、組播或多播數據包。可爲以每一個節點配 置其向其它節點通報「心跳」信息的頻率,以及其它節點上的heartbeat進程爲了確認主節點出節點出 現了運行等錯誤以前的等待時間。 集羣變更事務(transition)信息:ip-request和ip-request-rest是相對較常見的兩種集羣變更信息 ,它們在節點間須要進行資源遷移時爲不一樣節點上heartbeat進程間會話傳遞信息。好比,當修復了主 節點而且使其從新「上線」後,主節點會使用ip-request要求備用節點釋放其此前從因主節點故障而 從主節點那裏接管的資源。此時,備用節點則關閉服務並使用ip-request-resp通知主節點其已經再也不 佔用此前接管的資源。主接點收到ip-request-resp後就會從新啓動服務。 重傳請求:在某集羣節點發現其從其它節點接收到的heartbeat控制信息「失序」(heartbeat進程使 用序列號來確保數據包在傳輸過程當中沒有被丟棄或 出現錯誤)時,會要求對方從新傳送此控制信息。 Heartbeat通常每一秒發送一次重傳請求,以免洪泛。 上面三種控制信息均基於UDP協議進行傳送,能夠在/etc/ha.d/ha.cf中指定其使用的UDP端口或者多播 地址(使用以太網鏈接的狀況下)。 此外,除了使用「序列號/確認」機制來確保控制信息的可靠傳輸外,Heartbeat還會使用MD5或SHA1爲 每一個數據包進行簽名以確保傳輸中的控制信息的安全性。 ######################################二、Heartbeat的配置文件: /etc/ha.d/ha.cf 定義位於不一樣節點上的heartbeat進程間如何進行通訊; /etc/ha.d/haresources 定義對某個資源來講哪一個服務器是主節點, 以及哪一個節點應該擁有客戶端訪問資源時的目標IP地址。 /etc/ha.d/authkeys 定義Heartbeat包在通訊過程當中如何進行加密。 當ha.cf或authkeys文件發生改變時,須要從新加載它們就可使用之生效; 而若是haresource文件發生了改變,則只能重啓heartbeat服務方可以使之生效。 儘管Heartbeat並不要求主從節點間進行時鐘同步,但它們彼此間的時間差距不能超過1分鐘, 不然一些配置爲高可用的服務可能會出異常。 Heartbeat當前也不監控其所控制的資源的狀態,好比它們是否正在運行,是否運行良好以 及是否可供客戶端訪問等。要想監控這些資源,要使用額外的Mon軟件包來實現。 ######################################三、ha.cf配置文件部分參數詳解: autojoin none #集羣中的節點不會自動加入 logfile /var/log/ha-log #指名heartbaet的日誌存放位置 keepalive 2 #指定心跳使用間隔時間爲2秒(即每兩秒鐘在eth1上發送一次廣播) deadtime 30 #指定備用節點在30秒內沒有收到主節點的心跳信號後,則當即接管主節點的服 務資源 warntime 10 #指定心跳延遲的時間爲十秒。當10秒鐘內備份節點不能接收到主節點的心跳 信號時,就會往日誌中寫入一個警告日誌,但此時不會切換服務 initdead 120 #在某些系統上,系統啓動或重啓以後須要通過一段時間網絡才能正常工做, 該選項用於解決這種狀況產生的時間間隔。取值至少爲deadtime的兩倍。 udpport 694 #設置廣播通訊使用的端口,694爲默認使用的端口號。 baud 19200 #設置串行通訊的波特率 #bcast eth0 # Linux 指明心跳使用以太網廣播方式,而且是在eth0接口上進行廣播。 #mcast eth0 225.0.0.1 694 1 0 #採用網卡eth0的Udp多播來組織心跳,通常在備用節點不止一臺 時使用。Bcast、ucast和mcast分別表明廣播、單播和多播,是組織心跳的三種方式,任選其一便可。 #ucast eth0 192.168.1.2 #採用網卡eth0的udp單播來組織心跳,後面跟的IP地址應爲雙機對方的IP 地址 auto_failback on #用來定義當主節點恢復後,是否將服務自動切回,heartbeat的兩臺主機 分別爲主節點和備份節點。主節點在正常狀況下佔用資源並運行全部的服務,遇到故障時把資源交 給備份節點並由備份節點運行服務。在該選項設爲on的狀況下,一旦主節點恢復運行,則自動獲取 資源並取代備份節點,若是該選項設置爲off,那麼當主節點恢復後,將變爲備份節點,而原來的備 份節點成爲主節點 #stonith baytech /etc/ha.d/conf/stonith.baytech # stonith的主要做用是使出現問題的節點從集 環境中脫離,進而釋放集羣資源,避免兩個節點爭用一個資源的情形發生。保證共享數據的安全性 和完整性。 #watchdog /dev/watchdog #該選項是可選配置,是經過Heartbeat來監控系統的運行狀態。使用該特 性,須要在內核中載入"softdog"內核模塊,用來生成實際的設備文件,若是系統中沒有這個內核 模塊,就須要指定此模塊,從新編譯內核。編譯完成輸入"insmod softdog"加載該模塊。而後輸入 "grep misc /proc/devices"(應爲10),輸入"cat /proc/misc |grep watchdog"(應爲130)。最後 ,生成設備文件:"mknod /dev/watchdog c 10 130" 。便可使用此功能 node node2.example.com #主節點主機名,能夠經過命令「uname –n」查看。 node node3.example.com #備用節點主機名 ping 172.16.0.1 #選擇ping的節點,ping 節點選擇的越好,HA集羣就越強壯,能夠選擇固定的路由 器做爲ping節點,可是最好不要選擇集羣中的成員做爲ping節點,ping節點僅僅用來測試網絡鏈接 #ping_group group1 192.168.12.120 192.168.12.23 #相似於ping ping一組ip地址 apiauth pingd gid=haclient uid=hacluster respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s #該選項是可選配置,列出與heartbeat一塊兒啓動和關閉的進程,該進程通常是和heartbeat集成的插 件,這些進程遇到故障能夠自動從新啓動。最經常使用的進程是pingd,此進程用於檢測和監控網卡 狀態,須要配合ping語句指定的ping node來檢測網絡的連通性。其中hacluster表示啓動pingd 進程的身份。 #下面的配置是關鍵,也就是激活crm管理,開始使用v2 style格式 # crm respawn #注意,還可使用crm yes的寫法,但這樣寫的話,若是後面的cib.xml配置有問題 #會致使heartbeat直接重啓該服務器,因此,測試時建議使用respawn的寫法 #下面是對傳輸的數據進行壓縮,是可選項 compression bz2 compression_threshold 2 ####################################四、haresources配置文件介紹 主從節點上的/etc/ra.d/raresource文件必須徹底相同。文件每行一般包含如下組成部分: 一、服務器名字:指正常狀況下資源運行的那個節點(即主節點),後跟一個空格或tab; 這裏指定的名字必須跟某個節點上的命令"uname -n"的返回值相同; 二、IP別名(即額外的IP地址,可選):在啓動資源以前添加至系統的附加IP地址, 後跟空格或tab;IP地址後面一般會跟一個子網掩碼和廣播地址,彼此間用「/」隔開; 三、資源腳本:即用來啓動或中止資源的腳本,位於/etc/init.d/或/etc/ha.d/resourcd.d目錄中; 若是須要傳遞參數給資源腳本,腳本和參數之間須要用兩個冒號分隔,多個參數時彼此間也須要用兩個冒號分隔;若是有 多個資源腳本,彼此間也須要使用空格隔開; 格式以下: primary-server [IPaddress[/mask/interface/broadcast]] resource1[::arg1::arg2] \ resource2[::arg1::arg2] 例如: node2.example.com 172.16.10.20/16/eth0/172.16.255.255 \ Filesystem::172.16.10.9:/mysqldata::/var/lib/mysql::nfs mysqld ######################################五、authkeys配置文件介紹 auth 1 # 指明認證類型 1 md5 6c781b5034b1f6b9379b # 指明對應的認證類型和隨機字符串 ######################################六、補充資料:組播IP地址 組播IP地址用於標識一個IP組播組。IANA(internet assigned number authority)把D類地址 空間分配給IP組播,其範圍是從224.0.0.0到239.255.255.255。以下圖所示(二進制表示), IP組播地址前四位均爲1110八位組⑴ 八位組⑵ 八位組⑶ 八位組⑷1110 XXXX XXXXXXXX XXXXXXXX XXXXXXXX組播組能夠是永久的也能夠是臨時的。組播組地址中, 有一部分由官方分配的,稱爲永久組播組。永久組播組保持不變的是它的ip地址,組中的成 員構成能夠發生變化。永久組播組中成員的數量均可以是任意的,甚至能夠爲零。那些沒有 保留下來供永久組播組使用的ip組播地址,能夠被臨時組播組利用。 224.0.0.0~224.0.0.255爲預留的組播地址(永久組地址),地址224.0.0.0保留不作分配,其它地址 供路由協議使用。 224.0.1.0~238.255.255.255爲用戶可用的組播地址(臨時組地址),全網範圍內有效。 239.0.0.0~239.255.255.255爲本地管理組播地址,僅在特定的本地範圍內有效。經常使用的預留組播地 址列表以下: 224.0.0.0 基準地址(保留) 224.0.0.1 全部主機的地址 224.0.0.2 全部組播路由器的地址 224.0.0.3 不分配 224.0.0.4dvmrp(Distance Vector Multicast Routing Protocol,距離矢量組播路由協議)路由器 224.0.0.5 ospf(Open Shortest Path First,開放最短路徑優先)路由器 224.0.0.6 ospf dr(Designated Router,指定路由器) 224.0.0.7 st (Shared Tree,共享樹)路由器 224.0.0.8 st主機 224.0.0.9 rip-2路由器 224.0.0.10 Eigrp(Enhanced Interior Gateway Routing Protocol,加強網關內部路由線路協議)路 由器 224.0.0.11 活動代理 224.0.0.12 dhcp服務器/中繼代理 224.0.0.13 全部pim (Protocol Independent Multicast,協議無關組播)路由器 224.0.0.14 rsvp (Resource Reservation Protocol,資源預留協議)封裝 224.0.0.15 全部cbt 路由器 224.0.0.16 指定sbm(Subnetwork Bandwidth Management,子網帶寬管理) 224.0.0.17 全部sbms 224.0.0.18 vrrp(Virtual Router Redundancy Protocol,虛擬路由器冗餘協議) 239.255.255.255 SSDP協議使用
#########################在172.16.10.9上: #################提供nfs服務 1、安裝nfs管理工具 yum install nfs-utils -y 2、建立共享目錄並共享 mkdir /mysqldata # vim /etc/exports 添加如下內容: /mysqldata/ 172.16.0.0/16(rw,no_root_squash) setfacl -m u:26:rwx /mysqldata (uid=26是使用rpm方式安裝的mysql時的mysql用戶的uid) # 注意:上面的 no_root_squash 選項是爲了在安裝 mysql 時方便,安裝完成後,應去掉此選項。 3、啓動nfs服務 /etc/init.d/nfs start ############################################配置主節點和備節點 第一步:設置主機名 #########################在172.16.10.22上: # vim /etc/sysconfig/netwoek中的HOSTNAME: HOSTNAME=node2.example.com #########################在172.16.10.33上: # vim /etc/sysconfig/netwoek中的HOSTNAME: HOSTNAME=node3.example.com 第二步:設置主機名解析 #########################在172.16.10.22上: # vim /etc/hosts文件,添加: 172.16.10.22 node2.example.com node2 172.16.10.33 node3.example.com node3 #########################在172.16.10.33上: # vim /etc/hosts文件,添加: 172.16.10.22 node2.example.com node2 172.16.10.33 node3.example.com node3 第三步:實現 node2 和 node3 之間基於ssh祕鑰認證 #########################在172.16.10.22上: ssh-keygen -t rsa -P '' ssh-copy-id -i ~/.ssh/id_rsa.pub node3.example.com #########################在172.16.10.33上: ssh-keygen -t rsa -P '' ssh-copy-id -i ~/.ssh/id_rsa.pub node2.example.com 第四步:node2 和 node3 之間實現時間同步 一、可使用相同的時間服務器來同步時間 二、能夠手動設置是時間同步
驗證以上配置結果:node
上面的配置正確的話,能夠繼續進行以下配置:mysql
第一步:安裝 mysql 服務,並配置 #########################在172.16.10.22上: yum install mysql mysql-server mount -t nfs 172.16.10.9:/mysqldata /var/lib/mysql chown -R mysql.mysql /var/lib/mysql # 啓動 mysql 並初始化 mysql,設置用戶密碼等 /etc/init.d/mysqld start #########################在172.16.10.33上: yum install mysql mysql-server mount -t nfs 172.16.10.9:/mysqldata /var/lib/mysql /etc/init.d/mysqld start
驗證以上配置結果:sql
注意:以上結果在測試時,mysqld服務只能在一個節點上啓動。固然,這裏須要受權給遠程用戶172.16.10.20的權限。完成這些配置後,能夠繼續進行如下配置。vim
第一步:安裝heartbeat以前的工做 #########################在172.16.10.22,172.16.10.33上: mysql>GRANT ALL ON *.* TO root@'172.16.10.20' IDENTIFIED BY 'guoting'; /etc/init.d/mysqld stop umount /var/lib/mysql chkconfig mysqld off 第二步:安裝heartbeat v1版本軟件 #########################在172.16.10.22,172.16.10.33上: yum install perl-TimeDate net-snmp-libs libnet PyXML # 注意:libnet是在epel倉庫中的,須要實現配置好。也能夠手動編譯,下載地址:http://search.cpan.org/dist/libnet/ rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm # 這是由heartbeat 本身製做的rpm包 第三步:配置heartbeat #########################在172.16.10.22 cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} /etc/ha.d/ # vim /etc/ha.d/ha.cf 修改如下內容: mcast eth0 226.10.10.10 694 1 0 auto_failback on node node2.example.com node node3.example.com ping 172.16.0.1 # vim /etc/ha.d/haresources 添加如下內容: node2.example.com 172.16.10.20/16/eth0/172.16.255.255 \ Filesystem::172.16.10.9:/mysqldata::/var/lib/mysql::nfs mysqld # vim /etc/ha.d/authkeys 添加如下內容: auth 1 1 md5 6c781b5034b1f6b9379b chmod 600 /etc/ha.d/authkeys #########################在172.16.10.33 scp -p node2.example.com:/etc/ha.d/{ha.cf,haresources,authkeys} /etc/ha.d 第四步:啓動服務 #########################在172.16.10.22 /etc/init.d/heartbeat start;ssh node3 '/etc/init.d/heartbeat start'
驗證以上結果:api
此時模擬,主節點出現故障:安全
此時,從節點能夠正常接管資源,用戶能夠正常訪問。bash
此時,若是主節點從新上線,主節點會接管現有資源。(auto_failback on的原因)服務器
實驗拓撲圖和上面一致。網絡
第一步:修改ha.cf配置文件 #########################在172.16.10.22上: crm on scp /etc/ha.d/ha.cf node3:/etc/ha.d/ 第二步:修改ha.cf配置文件 #########################在172.16.10.2二、172.16.10.33上: rpm -ivh rpm -ivh heartbeat2/heartbeat-gui-2.1.4-12.el6.x86_64.rpm 第三步:啓動heartbeat服務 #########################在172.16.10.2二、172.16.10.33上: /etc/init.d/heartbeat start
配置完成後,能夠驗證結果:
架構
以上結果正確後,能夠繼續如下實驗:
第一步:在主節點上設置ha_gui圖形化管理接口的密碼 # 默認登錄帳號是 hacluster 本地帳號 passwd hacluster 第二步:啓動圖形化接口工具配置 hb_gui &
圖形化管理接口界面:
添加組資源:
在組中添加vip,storage,mysqld資源:
客戶端測試:
實現資源遷移:
固然,這裏也可使用資源約束來定義資源的粘性,啓動順序等。
至此,配置已所有完成。
以上內容是本身對知識的理解,若有誤差,歡迎指正。