歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> CentOS linux 高可用集群之heartbeat

CentOS linux 高可用集群之heartbeat

日期:2017/3/1 12:21:02   编辑:關於Linux
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