一、配置主節點的heartbeat
Heartbeat的主要配置文件有ha.cf、haresources、authkeys,在Heartbeat安裝後,默認並沒有這三個文件,可以從官方網站下載得到,也可以直接從解壓的源碼目錄中找到,在上面的安裝過程中,我們已經將這三個文件放到了/etc/ha.d目錄下,下面分別詳細介紹。
1.主配置文件(/etc/ha.d/ha.cf)
下面對ha.cf文件的每個選項進行詳細介紹,其中“#”號後面的內容是對選項的注釋說明。
#debugfile /var/log/ha-debug
logfile /var/log/ha-log #指名heartbeat的日志存放位置。
#crm yes #是否開啟Cluster Resource Manager(集群資源管理)功能。
bcast eth1 #指明心跳使用以太網廣播方式,並且是在eth1接口上進行廣播。
keepalive 2 #指定心跳間隔時間為2秒(即每兩秒鐘在eth1上發送一次廣播)。
deadtime 30 #指定備用節點在30秒內沒有收到主節點的心跳信號後,則立即接管主節點的服務資源。
warntime 10 #指定心跳延遲的時間為十秒。當10秒鐘內備份節點不能接收到主節點的心跳信號時,就會往日志中寫入一個警告日志,但此時不會切換服務。
initdead 120 #在某些系統上,系統啟動或重啟之後需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔。取值至少為deadtime的兩倍。
udpport 694 #設置廣播通信使用的端口,694為默認使用的端口號。
baud 19200 #設置串行通信的波特率。
#serial /dev/ttyS0 #選擇串行通信設備,用於雙機使用串口線連接的情況。如果雙機使用以太網連接,則應該關閉該選項。
#ucast eth0 192.168.1.2 #采用網卡eth0的udp單播來組織心跳,後面跟的IP地址應為雙機對方的IP地址。
#mcast eth0 225.0.0.1 694 1 0 #采用網卡eth0的Udp多播來組織心跳,一般在備用節點不止一台時使用。Bcast、ucast和mcast分別代表廣播、單播和多播,是組織心跳的三種方式,任選其一即可。
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 node1 #主節點主機名,可以通過命令“uanme –n”查看。
node node2 #備用節點主機名。
ping 192.168.60.1 #選擇ping的節點,ping 節點選擇的越好,HA集群就越強壯,可以選擇固定的路由器作為ping節點,但是最好不要選擇集群中的成員作為ping節點,ping節點僅僅用來測試網絡連接。
respawn hacluster /usr/lib/heartbeat/ipfail #該選項是可選配置,列出與heartbeat一起啟動和關閉的進程,該進程一般是和heartbeat集成的插件,這些進程遇到故障可以自動重新啟動。最常用的進程是ipfail,此進程用於檢測和處理網絡故障,需要配合ping語句指定的ping node來檢測網絡的連通性。其中hacluster表示啟動ipfail進程的身份。
2.資源文件(/etc/ha.d/haresources)
Haresources文件用於指定雙機系統的主節點、集群IP、子網掩碼、廣播地址以及啟動的服務等集群資源,文件每一行可以包含一個或多個資源腳本名,資源之間使用空格隔開,參數之間使用兩個冒號隔開,在兩個HA節點上該文件必須完全一致,此文件的一般格式為:
node-name network <resource-group>
node-name表示主節點的主機名,必須和ha.cf文件中指定的節點名一致,network用於設定集群的IP地址、子網掩碼、網絡設備標識等,需要注意的是,這裡指定的IP地址就是集群對外服務的IP地址,resource-group用來指定需要heartbeat托管的服務,也就是這些服務可以由heartbeat來啟動和關閉,如果要托管這些服務,必須將服務寫成可以通過start/stop來啟動和關閉的腳步,然後放到/etc/init.d/或者/etc/ha.d/resource.d/目錄下,heartbeat會根據腳本的名稱自動去/etc/init.d或者/etc/ha.d/resource.d/目錄下找到相應腳步進行啟動或關閉操作。
下面對配置方法進行具體說明:
node1 IPaddr::192.168.60.200/24/eth0/ Filesystem::/dev/sdb5::/webdata::ext3 httpd tomcat
其中,node1是HA集群的主節點,IPaddr為heartbeat自帶的一個執行腳步,heartbeat首先將執行/etc/ha.d/resource.d/IPaddr 192.168.60.200/24 start的操作,也就是虛擬出一個子網掩碼為255.255.255.0,IP為192.168.60.200的地址,此IP為heartbeat對外提供服務的網絡地址,同時指定此IP使用的網絡接口為eth0,接著,heartbeat將執行共享磁盤分區的掛載操作,“Filesystem::/dev/sdb5::/webdata::ext3”相當於在命令行下執行mount操作,即“mount –t ext3 /dev/sdb5 /webdata”,最後依次啟動httpd和tomcat服務。
注意:主節點和備份節點中資源文件haresources要完全一樣。
3.認證文件(/etc/ha.d/authkeys)
authkeys文件用於設定heartbeat的認證方式,共有三種可用的認證方式:crc、md5和sha1,三種認證方式的安全性依次提高,但是占用的系統資源也依次增加。如果heartbeat集群運行在安全的網絡上,可以使用crc方式,如果HA每個節點的硬件配置很高,建議使用sha1,這種認證方式安全級別最高,如果是處於網絡安全和系統資源之間,可以使用md5認證方式。這裡我們使用crc認證方式,設置如下:
auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password
需要說明的一點是:無論auth後面指定的是什麼數字,在下一行必須作為關鍵字再次出現,例如指定了“auth 6”,下面一定要有一行“6 認證類型”。
最後確保這個文件的權限是600(即-rw-------)。
二、 配置備份節點的heartbeat
在備份節點上也需要安裝heartbeat,安裝方式與在主節點安裝過程一樣,這裡不再重述,依次安裝libnet和heartbeat源碼包,安裝完畢,在備份節點上使用scp命令把主節點配置文件傳輸到備份節點。
[root@node2 ~]#scp –r node1:/etc/ha.d/* /etc/ha.d/
其中,node1是主節點的主機名。
三、設置主節點和備份節點時間同步
在雙機高可用集群中,主節點和備份節點的系統時間也非常重要,因為節點之間的監控都是通過設定時間來實現的,主備節點之間的系統時間相差在十秒以內是正常的,如果節點之間時間相差太大,就有可能造成HA環境的故障。解決時間同步的辦法有兩個,一個是找一個時間服務器,兩個節點通過ntpdate命令定時與時間服務器進行時間校准,另一個辦法是讓集群中的主節點作為ntp時間服務器,讓備份節點定時去主節點進行時間校驗。
四、 啟動Heartbeat
1.啟動主節點的Heartbeat
Heartbeat安裝完成後,自動在/etc/init.d目錄下生成了啟動腳步文件heartbeat,直接輸入/etc/init.d/heartbeat可以看到heartbeat腳本的用法,如下所示:
[root@node1 ~]# /etc/init.d/heartbeat
Usage: /etc/init.d/heartbeat {start|stop|status|restart|reload|force-reload}
因而啟動heartbeat可以通過如下命令進行:
[root@node1 ~]#service heartbeat start
或者通過
[root@node1 ~]#/etc/init.d/heartbeat start
這樣就啟動了主節點的heartbeat服務,為了讓heartbeat能在開機自動運行以及關機自動關閉,可以手動創建以下軟連接:
[root@node1 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc0.d/K05heartbeat
[root@node1 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc3.d/S75heartbeat
[root@node1 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc5.d/S75heartbeat
[root@node1 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc6.d/K05heartbeat
Heartbeat啟動時,通過“tail –f /var/log/ messages”查看主節點系統日志信息,輸出如下:
[root@node1 ~]# tail -f /var/log/messages
Nov 26 07:52:21 node1 heartbeat: [3688]: info: Configuration validated. Starting heartbeat 2.0.8
Nov 26 07:52:21 node1 heartbeat: [3689]: info: heartbeat: version 2.0.8
Nov 26 07:52:21 node1 heartbeat: [3689]: info: Heartbeat generation: 3
Nov 26 07:52:21 node1 heartbeat: [3689]: info: G_main_add_TriggerHandler: Added signal manual handler
Nov 26 07:52:21 node1 heartbeat: [3689]: info: G_main_add_TriggerHandler: Added signal manual handler
Nov 26 07:52:21 node1 heartbeat: [3689]: info: glib: UDP Broadcast heartbeat started on port 694 (694) interface eth1
Nov 26 07:52:21 node1 heartbeat: [3689]: info: glib: UDP Broadcast heartbeat closed on port 694 interface eth1 - Status: 1
Nov 26 07:52:21 node1 heartbeat: [3689]: info: glib: ping heartbeat started.
Nov 26 07:52:21 node1 heartbeat: [3689]: info: G_main_add_SignalHandler: Added signal handler for signal 17
Nov 26 07:52:21 node1 heartbeat: [3689]: info: Local status now set to: 'up'
Nov 26 07:52:22 node1 heartbeat: [3689]: info: Link node1:eth1 up.
Nov 26 07:52:23 node1 heartbeat: [3689]: info: Link 192.168.60.1:192.168.60.1 up.
Nov 26 07:52:23 node1 heartbeat: [3689]: info: Status update for node 192.168.60.1: status ping
此段日志是Heartbeat在進行初始化配置,例如,heartbeat的心跳時間間隔、UDP廣播端口、ping節點的運行狀態等,日志信息到這裡會暫停,等待120秒之後,heartbeat會繼續輸出日志,而這個120秒剛好是ha.cf中“initdead”選項的設定時間。此時heartbeat的輸出信息如下:
Nov 26 07:54:22 node1 heartbeat: [3689]: WARN: node node2: is dead
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Comm_now_up(): updating status to active
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Local status now set to: 'active'
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Starting child client "/usr/lib/heartbeat/ipfail" (694,694)
Nov 26 07:54:22 node1 heartbeat: [3689]: WARN: No STONITH device configured.
Nov 26 07:54:22 node1 heartbeat: [3689]: WARN: Shared disks are not protected.
Nov 26 07:54:22 node1 heartbeat: [3689]: info: Resources being acquired from node2.
Nov 26 07:54:22 node1 heartbeat: [3712]: info: Starting "/usr/lib/heartbeat/ipfail" as uid 694 gid 694 (pid 3712)
在上面這段日志中,由於node2還沒有啟動,所以會給出“node2: is dead”的警告信息,接下來啟動了heartbeat插件ipfail,由於我們在ha.cf文件中沒有配置STONITH,所以日志裡也給出了“No STONITH device configured”的警告提示。
繼續看下面的日志:
Nov 26 07:54:23 node1 harc[3713]: info: Running /etc/ha.d/rc.d/status status
Nov 26 07:54:23 node1 mach_down[3735]: info: /usr/lib/heartbeat/mach_down: nice_failback: foreign resources acquired
Nov 26 07:54:23 node1 mach_down[3735]: info: mach_down takeover complete for node node2.
Nov 26 07:54:23 node1 heartbeat: [3689]: info: mach_down takeover complete.
Nov 26 07:54:23 node1 heartbeat: [3689]: info: Initial resource acquisition complete (mach_down)
Nov 26 07:54:24 node1 IPaddr[3768]: INFO: Resource is stopped
Nov 26 07:54:24 node1 heartbeat: [3714]: info: Local Resource acquisition completed.
Nov 26 07:54:24 node1 harc[3815]: info: Running /etc/ha.d/rc.d/ip-request-resp ip-request-resp
Nov 26 07:54:24 node1 ip-request-resp[3815]: received ip-request-resp 192.168.60.200/24/eth0 OK yes
Nov 26 07:54:24 node1 ResourceManager[3830]: info: Acquiring resource group: node1 192.168.60.200/24/eth0 Filesystem::/dev/sdb5::/webdata::ext3
Nov 26 07:54:24 node1 IPaddr[3854]: INFO: Resource is stopped
Nov 26 07:54:25 node1 ResourceManager[3830]: info: Running /etc/ha.d/resource.d/IPaddr 192.168.60.200/24/eth0 start
Nov 26 07:54:25 node1 IPaddr[3932]: INFO: Using calculated netmask for 192.168.60.200: 255.255.255.0
Nov 26 07:54:25 node1 IPaddr[3932]: DEBUG: Using calculated broadcast for 192.168.60.200: 192.168.60.255
Nov 26 07:54:25 node1 IPaddr[3932]: INFO: eval /sbin/ifconfig eth0:0 192.168.60.200 netmask 255.255.255.0 broadcast 192.168.60.255
Nov 26 07:54:25 node1 avahi-daemon[1854]: Registering new address record for 192.168.60.200 on eth0.
Nov 26 07:54:25 node1 IPaddr[3932]: DEBUG: Sending Gratuitous Arp for 192.168.60.200 on eth0:0 [eth0]
Nov 26 07:54:26 node1 IPaddr[3911]: INFO: Success
Nov 26 07:54:26 node1 Filesystem[4021]: INFO: Resource is stopped
Nov 26 07:54:26 node1 ResourceManager[3830]: info: Running /etc/ha.d/resource.d/Filesystem /dev/sdb5 /webdata ext3 start
Nov 26 07:54:26 node1 Filesystem[4062]: INFO: Running start for /dev/sdb5 on /webdata
Nov 26 07:54:26 node1 kernel: kjournald starting. Commit interval 5 seconds
Nov 26 07:54:26 node1 kernel: EXT3 FS on sdb5, internal journal
Nov 26 07:54:26 node1 kernel: EXT3-fs: mounted filesystem with ordered data mode.
Nov 26 07:54:26 node1 Filesystem[4059]: INFO: Success
Nov 26 07:54:33 node1 heartbeat: [3689]: info: Local Resource acquisition completed. (none)
Nov 26 07:54:33 node1 heartbeat: [3689]: info: local resource transition completed
上面這段日志是進行資源的監控和接管,主要完成haresources文件中的設置,在這裡是啟用集群虛擬IP和掛載磁盤分區。
此時,通過ifconfig命令查看主節點的網絡配置,可以看到,主節點已經自動綁定了集群的IP地址,在HA集群之外的主機上通過ping命令檢測集群IP地址192.168.60.200,已經處於可通狀態,也就是該地址變的可用。
同時查看磁盤分區的掛載情況,共享磁盤分區/dev/sdb5已經被自動掛載。
2.啟動備份節點的Heartbeat
啟動備份節點的Heartbeat,與主節點方法一樣,使用如下命令:
[root@node2 ~]#/etc/init.d/heartbeat start
或者執行
[root@node2 ~]#service heartbeat start
這樣就啟動了備用節點的heartbeat服務,為了讓heartbeat能在開機自動運行以及關機自動關閉, 創建以下軟連接:
[root@node2 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc0.d/K05heartbeat
[root@node2 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc3.d/S75heartbeat
[root@node2 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc5.d/S75heartbeat
[root@node2 ~]#ln -s /etc/init.d/heartbeat /etc/rc.d/rc6.d/K05heartbeat
備用節點的heartbeat日志輸出信息與主節點相對應,通過“tail -f /var/log/messages”可以看到如下輸出:
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Link node1:eth1 up.
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Status update for node node1: status active
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Link node1:eth0 up.
Nov 26 07:57:15 node2 harc[2123]: info: Running /etc/ha.d/rc.d/status status
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Comm_now_up(): updating status to active
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Local status now set to: 'active'
Nov 26 07:57:15 node2 heartbeat: [2110]: info: Starting child client "/usr/lib/heartbeat/ipfail" (694,694)
Nov 26 07:57:15 node2 heartbeat: [2110]: WARN: G_CH_dispatch_int: Dispatch function for read child took too long to execute: 70 ms (> 50 ms) (GSource: 0x8f62080)
Nov 26 07:57:15 node2 heartbeat: [2134]: info: Starting "/usr/lib/heartbeat/ipfail" as uid 694 gid 694 (pid 2134)
備份節點檢測到node1處於活動狀態,沒有可以接管的資源,因此,僅僅啟動了網絡監聽插件ipfail,監控主節點的心跳。
本文出自 “技術成就夢想” 博客,請務必保留此出處http://ixdba.blog.51cto.com/2895551/548625