歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

CentOS linux 高可用集群之heartbeat

Heartbeat 項目是 Linux-HA 工程的一個組成部分,它實現了一個高可用集群系統。心跳服務和集群通信是高可用集群的兩個關鍵組件,在 Heartbeat 項目裡,由 heartbeat 模塊實現了這兩個功能。   Heartbeat是Linux-HA工程的一個組件,自1999年開始到現在,發布了眾多版本,是目前開源Linux-HA項目最成功的一個例子,在行業內得到了廣泛的應用. 隨著Linux在關鍵行業應用的逐漸增多,它必將提供一些原來由IBM和SUN這樣的大型商業公司所提供的服務,這些商業公司所提供的服務都有一個關鍵特性,就是高可用集群。   heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測可以通過網絡鏈路和串口進行,而且支持冗余鏈路,它們之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那麼就認為對方失效,這時需啟動資源接管模塊來接管運行在對方主機上的資源或者服務。   高可用集群是指一組通過硬件和軟件連接起來的獨立計算機,它們在用戶面前表現為一個單一系統,在這樣的一組計算機系統內部的一個或者多個節點停止工作,服務會從故障節點切換到正常工作的節點上運行,不會引起服務中斷。從這個定義可以看出,集群必須檢測節點和服務何時失效,何時恢復為可用。這個任務通常由一組被稱為“心跳”的代碼完成。在Linux-HA裡這個功能由一個叫做heartbeat的程序完成。     下面使用hearbeat做高可用集群HA,nginx服務作為高可用集群HA的服務對象,即主服務器的nginx宕機或者無法提供服務,就切換到從服務上對外提供服務。     系統環境: Master(主服務器): hostname:masternginx、eth0:192.168.171.50  、eth1:192.168.17.50   Slave(從服務器): hostname:slavenginx、eth0:192.168.171.51、eth1:192.168.17.51   流動的IP(Virtual IP):192.168.171.100(即對外提供服務的IP)   nginx在系統安裝的時候安裝或者後期自行安裝。   1)、安裝前的准備工作: (1)分別設置主從服務器的hostname,   主服務器:vim/etc/sysconfig/network 修改:HOSTNAME=masternginx   從服務器:vim/etc/sysconfig/network 修改:HOSTNAME=slavenginx   (2)、分別在主從服務器上關閉SELinux    sed–I ‘s/SELINUXE=enforcing/SELINUX=disabled/’ /etc/selinux/config   (3)、分別在主從的服務器上配置/etc/hosts對應的ip和主機名:     192.168.17.51   slavenginx     192.168.17.50   masternginx   2)、分別在主服務器和從服務器上安裝heartbeat軟件,同時需要安裝libnet。 yum install libnet heartbeat    #yum安裝可以解決依賴關系   源碼下載: libnet:http://libnet.sourceforge.net/   heartbeat:http://www.linux-ha.org/wiki/Downloads   3)、修改heartbeat的配置 (1)首先在主服務器上修改配置,主要是以下三個文件: (heartbeat的安裝樣例目錄下/usr/share/doc/beartbeat-*)  authkeys:用於驗證通信的,看對方是否還存活  haresources:用於配置流動IP的服務信息和需要做HA的服務  ha.cf:heartbeat的配置文件   (2)在主服務器上,從heartbeat的安裝樣例目錄下/usr/share/doc/beartbeat拷貝三個文件到 /etc/ha.d目錄下   cd /usr/share/doc/heartbeat-3.0.4/ cp     authkeys  ha.cf  haresources /etc/ha.d/   (3)修改配置文件   主服務上修改:    vim/etc/ha.d/authkeys            #編輯驗證通信方式                   auth3                                            #默認都是有 # 號注釋,用哪一張認證方式 #1 crc #2 sha1 HI! 3 md5 Hello!                            #去掉#號,            保存退出,修改權限:chmod600 /etc/ha.d/authkeys    vim/etc/ha.d/haresources   #用於配置流動IP的服務信息和需要做HA的服務,默認是全部注釋   masternginx192.168.171.100/24/eth0:0 nginx                  vim/etc/ha.d/ha.cf                         #heartbeat主配置文件     debugfile /var/log/ha-debug           #排查故障的日志 logfile /var/log/ha-log          #日志的存放位置 logfacility     local0        #日志的級別 keepalive 2               #2秒的周期探測一次 deadtime 30             #.30秒沒有回應,就認為死亡了 warntime 10          #如果超過10秒沒有回應會發生警告 initdead 60         #.重啟的預留時間 udpport 694              #心跳線通信端口 ucast eth1 192.168.17.51        #..心跳線接口和對方IP auto_failback on          #.主切換到從,或者主恢復是,會自動切換 node   masternginx      #.主服務器的主機名 node   slavenginx       #.從服務器的主機名 ping 192.168.17.1          #用於仲裁的服務器IP respawn hacluster/usr/lib64/heartbeat/ipfail    #以hacluster運行腳本,檢查網絡的連通性。     把剛剛修改的三個配置文件復制到從服務器上的同一目錄。做一下修改: cd /etc/ha.d/ scp authkeys haresources ha.cfslavenginx:/etc/ha.d/     從服務器上修改: authkeys和haresources的配置內容不需要更改,只需要修改ha.cf配置文件    vim/etc/ha.d/ha.cf                     #heartbeat主配置文件     debugfile /var/log/ha-debug            #排查故障的日志 logfile /var/log/ha-log            #日志的存放位置 logfacility     local0        #日志的級別 keepalive 2                #2秒的周期探測一次 deadtime 30              #.30秒沒有回應,就認為死亡了 warntime 10               #如果超過10秒沒有回應會發生警告 initdead 60            #.重啟的預留時間 udpport 694            #心跳線通信端口 ucast eth1 192.168.17.50      #..心跳線接口和對方IP auto_failback on          #.主切換到從,或者主恢復是,會自動切換 node   masternginx       #.主服務器的主機名 node   slavenginx      #.從服務器的主機名 ping 192.168.17.1           #用於仲裁的服務器IP respawn hacluster/usr/lib64/heartbeat/ipfail   #以hacluster運行腳本,檢查網絡的連通性。   裡面的內容基本都不需要更改,只是要修改心跳的IIP地址修改為對方的IP (ucast eth1 192.168.171.50)     測試:   如果開啟了防火牆需要對udp 694端口放行。 -A INPUT -m state --state NEW -m udp -p udp--dport 694 -j ACCEPT     1)、啟動heartbeat服務,但是必須要先在主服務器上開啟了,然後才能在從服務器上開啟。   service heartbeat start   2)、檢查測試: ifconfig 查看是否有eth0:0 ps aux |grep nginx  看是否有nginx進程   3)、模擬故障測試 為了測試方便,我們在主服務器和從服務器的nginx服務的默認網站下建立一個測試網頁:   主服務器的內容: echo “1111111111111master server” >/usr/share/nginx/html/index.html   從服務器的內容: echo “222222222222 slave server” >/usr/share/nginx/html/index.html     模擬故障 測試1:在主服務器上禁止ping iptables -I INPUT -p icmp -j DROP          #拒絕icmp包,模擬故障   iptables -D INPUT -p icmp -j DROP         #解除故障   測試是否主服務器上發生故障,從服務器是否接管服務;主服務器恢復工作了,從服務器是否釋放接管權。   測試2:主服務器直接停止heartbeat服務,模擬heartbeat發生故障 service heartbeat stop             service heartbeat start   測試3:在主從上都模擬心跳線線段了 ifdown eth1
Copyright © Linux教程網 All Rights Reserved