1. 程式人生 > >Heartbeat實現web服務器高可用

Heartbeat實現web服務器高可用

2-2 修改文件權限 util tde 信號 .html 報文 群集 api

一、Heartbeat概述:

  Heartbeat的工作原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測可以通過網絡鏈路和串口進行,而且支持冗余鏈路,它們之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那麽就認為對方失效,這時需啟動資源接管模塊來接管運行在對方主機上的資源或者服務。

Heartbeat-3.X版本以後被分為了4個模塊,這些安裝包都可以從官網:
  http://www.linux-ha.org/wiki/Downloads下載得到:
目前的這些版本是:
  ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz #集群實驗資源代理

  Heartbeat-3-0-7e3a82377fa8.tar.bz2 # 心跳主程序包
  pacemaker-1.1.9-1512.el6.src.rpm # 起搏器
  Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2 #可重復使用的群集組件

端口號:694
[root@xuegod62 ~]# cat /etc/services | grep 694
ha-cluster 694/tcp # Heartbeat HA-cluster
ha-cluster 694/udp # Heartbeat HA-cluster

擴展: 誰管理著TCP/UDP公共服務的端口定義
  IANA 就是指(Internet Assigned Numbers Authority) ,Internet號分配的機構。負責對IP地址分配規劃以及對TCP/UDP公共服務的端口定義。
  IANA的所有任務可以大致分為三個類型:
    一、域名。IANA管理DNS域名根和.int,.arpa域名以及IDN(國際化域名)資源。
    二、數字資源。IANA協調全球IP和AS(自治系統)號並將它們提供給各區域Internet註冊機構。
      註: AS自治系統號,是BGP路由協議中的號。
    三、協議分配。IANA與各標準化組織一同管理協議編號系統。

  官網:http://www.iana.org/

二、實戰:使用Heartbeat實現web服務器高可用

1.Heartbeat 拓撲圖

技術分享圖片

  xuegod63   主web
  xuegod64    從web
  xuegod62    NFS

2.準備工作:xuegod63,xuegod64

1. 修改主機名,永久生效 
# vim /etc/sysconfig/network
HOSTNAME=xuegod63.cn
2. 解析  
# vim /etc/hosts
192.168.1.63   xuegod63.cn
192.168.1.64   xuegod64.cn

3. 關防火墻,關掉selinux
# iptables -F
# getenforce 

3.配置xuegod62為NFS服務器,提供存儲資源  

[root@xuegod62 ~]# yum -y install nfs-utils 
[root@xuegod62 ~]# mkdir /wwwdir
[root@xuegod62 ~]# echo ‘Heartbeat web test‘> /wwwdir/index.html
[root@xuegod62 ~]# cat !$
cat /wwwdir/index.html
Heartbeat web test
[root@xuegod62 ~]# vim /etc/exports
[root@xuegod62 ~]# cat !$
cat /etc/exports
/wwwdir	192.168.1.0/24(rw)
[root@xuegod62 ~]# chmod 777 -R /wwwdir/
[root@xuegod62 ~]# ll -d /wwwdir/
drwxrwxrwx 2 root root 24 Jul  3 15:19 /wwwdir/
[root@xuegod62 ~]# systemctl start nfs
[root@xuegod62 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@xuegod62 ~]# showmount -e
Export list for xuegod70.cn:
/wwwdir 192.168.1.0/24

4.xuegod63,64測試nfs 存儲掛載並安裝httpd web服務器(基本操作是一致)

[root@xuegod63 ~]# yum install nfs-utils httpd -y
[root@xuegod63 ~]# systemctl start nfs
[root@xuegod63 ~]# showmount -e 192.168.1.62
Export list for 192.168.1.62:
/wwwdir 192.168.1.0/24
[root@xuegod63 ~]# mount -t nfs 192.168.1.62
mount: 在 /etc/fstab 中找不到 192.168.1.62
[root@xuegod63 ~]# mount -t nfs 192.168.1.62:/wwwdir /var/www/html/
[root@xuegod63 ~]# df -h
文件系統               容量  已用  可用 已用% 掛載點
/dev/sda3               19G  1.9G   17G   11% /
devtmpfs               479M     0  479M    0% /dev
tmpfs                  489M     0  489M    0% /dev/shm
tmpfs                  489M  6.7M  482M    2% /run
tmpfs                  489M     0  489M    0% /sys/fs/cgroup
/dev/sr0               4.3G  4.3G     0  10% /mnt
/dev/sda1              497M  113M  385M   23% /boot
tmpfs                   98M     0   98M    0% /run/user/0
192.168.1.62:/wwwdir   19G  1.5G   18G    8% /var/www/html
[root@xuegod63 ~]# vim /etc/httpd/conf/httpd.conf 
[root@xuegod63 ~]# systemctl restart httpd
[root@xuegod63 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@xuegod63 ~]# elinks --dump 192.168.1.62   #測試掛載情況
   Heartbeat web test
#卸載資源:後期這些資源通過heartbeat直接加載
[root@xuegod63 ~]# umount /var/www/html/
[root@xuegod63 ~]# systemctl stop httpd
[root@xuegod63 ~]# systemctl disable httpd

5.xuegod63安裝heartbeat

heartbeat在Ceontos7下編譯步驟

下載:http://www.linux-ha.org/wiki/Downloads,從官方下載最新的HeartBeat版本:
  Heartbeat 3.0.6
  Cluster Glue 1.0.12
  Resource Agents 3.9.6

1.配置基礎環境(配置好網絡yum源)
安裝依賴包
#yum install -y bzip2 bzip2-devel gcc gcc-c++ autoconf automake libtool e2fsprogs-devel glib2-devel libxml2 libxml2-devel libtool-ltdl-devel asciidoc libuuid-devel docbook
如果LTDL包安裝不成功,下載rpm包安裝:
#rpm -ivh libtool-ltdl-devel-2.4.2-22.el7_3.x86_64.rpm

2.編譯Cluster Glue
# tar jxf Reusable-Cluster-Components-glue.tar.bz2
# cd Reusable-Cluster-Components-glue--0a7add1d9996/
# groupadd haclient  創建用戶組
# useradd -g haclient hacluster   創建用戶
# ./autogen.sh 
# ./configure --prefix=/usr/local/heartbeat/
# make && make install

3.編譯Resource Agents
# tar -zxf resource-agents-3.9.6.tar.gz
# cd resource-agents-3.9.6
# ./autogen.sh
# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS=‘/lib64/libuuid.so.1‘
# make
# make install

4.編譯Heartbeat
# tar -jxvf Heartbeat-3.0.6.tar.bz2
# cd Heartbeat-3-0-958e11be8686/
# ./bootstrap
# export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS=‘/lib64/libuuid.so.1‘
# make 
# make install

5.生成配置文件:

# cd /usr/local/heartbeat/etc/ha.d/
# cp /root/Heartbeat-3-0-958e11be8686/doc/{ha.cf,haresources,authkeys} .
# chkconfig --add heartbeat
# chkconfig heartbeat on
# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
# mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
# cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
#
# ln -sv /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
6、Heartbeat配置
Heartbeat的配置主要涉及到ha.cf、haresources、authkeys這三個文件。
    ha.cf:  主配置文件,
    haresource:  用來配置要讓Heartbeat托管的服務,
    authkey:  是用來指定Heartbeat的認證方式。
    (1) 配置ha.cf----主配置文件
# vim /usr/local/heartbeat/etc/ha.d/ha.cf (註:前面數字是行號)
24 debugfile /var/log/ha-debug           ##用於記錄heartbeat的調試信息
29 logfile/var/log/ha-log                ##用於記錄heartbeat的日誌信息
34 logfacilitylocal0                    ##設置heartbeat的日誌,這裏用的是系統日誌
48 keepalive 2                              ##設定心跳(監測)時間時間為2秒
56 deadtime 30         ##指定若備用節點在30秒內未收到主節點心跳信號,則接管主服務器資源
61 warntime 10           ##指定心跳延遲的時間為10秒,10秒內備節點不能接收主節點心跳信號,
                                  即往日誌寫入警告日誌,但不會切換服務
71 initdead 60         ##系統啟動或重啟後預留的忽略時間段,取值至少為deadtime的兩倍
76 udpport  694                         ##廣播/單播通訊使用的Udp端口
91 #bcast ens32   # Linux             ##使用網卡eno32發送心跳檢測
113 #mcast eth0 225.0.0.1 694 1 0    ##采用網卡eth0的Udp多播來組織心跳,一般在備用節點
Bcast、ucast和mcast分別代表廣播、單播和多播,是組織心跳的的方式,任選其一
121 ucast ens32 192.168.1.64   ##采用網卡eth32的udp單播來組織心跳,後面跟的IP地址為雙機對方IP地址
157 auto_failback on                 ##定義當主節點恢復後,是否將服務自動切回
211 node xuegod63.cn                     ##主節點名稱
212 node xuegod64.cn                     ##備用節點名稱
220 ping 192.168.1.1                ##通過ping網關檢測心跳是否正常,僅用來測試網絡
253 respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail   ##指定和heartbeat一起啟動、關閉的進程
259 apiauth ipfail gid=haclient uid=hacluster     ##設置啟動IPfail的用戶和組

    (2) 配置haresources-----資源文件
Haresources文件用於指定雙機系統的主節點、集群IP、子網掩碼、廣播地址及啟動服務集群資源,文件每一行可包含一個或多個資源腳本名,資源間使用空格隔開,
參數間使用兩個冒號隔開,主節點和備份節點中資源文件haresources要完全一樣 一般格式為: node-name network <resource-group> node-name表示主節點的主機名,必須和ha.cf文件中指定的節點名一致。network用於設定集群的 IP地址、子網掩碼和網絡設備標識等。resource-group用於指定需Heartbeat托管的服務(即這些 服務可由Heartbeat來啟動和關閉)。 註意:這裏指定的IP地址就是集群對外服務的IP地址 如要托管這些服務,必須將服務寫成可通過start/stop來啟動或關閉的腳本,放到/etc/init.d/ 或/etc/ha.d/resource.d/目錄下,Heartbeat會根據腳本名稱自動去/etc/init.d或者 /etc/ha.d/resource.d目錄下找到相應腳本進行啟動或關閉操作。 例: # vim /usr/local/heartbeat/etc/ha.d/haresources (註:前面數字為行號) 44 xuegod63.cn IPaddr::192.168.2.111/24/ens32 Filesystem::192.168.2.62:/wwwdir::/va r/www/html::nfs httpd xuegod71.cn IPaddr::192.168.10.111/24/ens33 Filesystem::192.168.10.70:/wwwdir::/var/www/html::nfs httpd 註:xuegod63.cn是主服務器的主機名, xuegod64上不需要修改。這樣資源默認會加一這個主機上。當xuegod63壞了,xuegod64會再接管。 IPaddr::192.168.1.111/24/eth32 #指定VIP及綁定到哪個網卡上 Filesystem::192.168.1.62:/wwwdir::/var/www/html::nfs #指定要掛載的存儲 httpd #指定要啟動的服務。這個服務必須是在/etc/init.d下或者/usr/local/heartbeat/etc/ha.d/resource.d目錄下 (3) 配置authkeys-----心跳密im鑰驗證文件 #vim /usr/local/heartbeat/etc/ha.d/authkeys auth 3 3 md5 Hello! 註:auth後填序號,可任意填寫,但第二行開頭必須為序號名,然後為驗證方式,支持三種( crc md5 sha1 )方式驗證,最後面是自定義密鑰。我應該選哪種驗證? 如果Heartbeat運行於安全網絡之上,如本例中的交叉線,可以使用crc,從資源的角度來看,這是代價最低的方法。如果網絡並不安全,但也希望降低CPU使用,則使用md5。
最後,如果想得到最好的認證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。 (4) 編寫httpd啟動腳本 # vim /usr/local/heartbeat/etc/ha.d/resource.d/httpd #!/bin/bash /bin/systemctl $1 httpd # chmod 755 !$ ⑸ 復制配置文件至備機 # scp -rp /usr/local/heartbeat/etc/ha.d/* [email protected]:/usr/local/heartbeat/etc/ha.d/  

三、測試

1.手動加載VIP 192.168.1.111到ens32上

[root@xuegod63 ~]# cd /usr/local/heartbeat/etc/ha.d/resource.d
[root@xuegod63 resource.d]# ./IPaddr 192.168.1.111/24/ens32 start
IPaddr[7116]: INFO:  Success
INFO:  Success
查看 VIP:
[root@xuegod63 ~]# ifconfig    #可以看到 ens32:1  的IP為:192.168.1.111

2.手動加載NFS存儲資源到/var/www/html (加載需要fuser支持,yum install psmisc -y)

[root@xuegod63 resource.d]# ./Filesystem 192.168.1.62:/wwwdir /var/www/html/ nfs start 
Filesystem[23567]: INFO:  Success
INFO:  Success 
[root@xuegod63 ~]# ls /var/www/html/index.html 
/var/www/html/index.html
[root@xuegod63 ~]# df  -h
………
192.168.2.62:/wwwdir    18G  1.1G   17G    6% /var/www/html

手動啟動httpd服務
[root@xuegod63 ~]# systemctl start httpd

測試打開主服務頁面http://192.168.1.63

3.xuegod64上配置heartbeat

修改文件權限:
[root@xuegod64 ~]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys  #此文件必須是600權限 否則heartbeat啟動不成功
修改單播地址:
[root@xuegod64 ~]# vim /usr/local/heartbeat/etc/ha.d/ha.cf
改:
ucast ens32 192.168.1.64
為:
ucast ens32 192.168.1.63

掛載需要fuser支持,yum install psmisc -y

4.兩機器啟動heartbeat服務

[root@xuegod63 ~]# /etc/init.d/heartbeat restart
[root@xuegod64 ~]# /etc/init.d/heartbeat restart

查看端口號:
[root@xuegod63 ~]# netstat -antup | grep 694
udp        0      0 0.0.0.0:694        0.0.0.0:*           6895/heartbeat: wr
查看端口號:
[root@xuegod64 ~]# netstat -antup | grep 694
udp        0      0 0.0.0.0:694        0.0.0.0:*           6895/heartbeat: wri

5.查看集群  

在xuegod63查看集群資源:
[root@xuegod63 ~]# ifconfig  #查看VIP加載
ens32:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.111  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 00:0c:29:f0:fc:2c  txqueuelen 1000  (Ethernet) [root@xuegod63 ~]# df -h

[root@xuegod63 ~]# df  -h #查看掛載
………
192.168.2.62:/wwwdir    18G  1.1G   17G    6% /var/www/html

[root@xuegod63 ~]# netstat -anput | grep httpd   #查看httpd

xuegod64上查看,沒有任務資源:
[root@xuegod64 ~]# ifconfig
[root@xuegod64 ~]# df -h
[root@xuegod64 ~]# netstat -anput | grep httpd

通過VIP測試:
兩臺主機都開啟時,所有請求到轉到了xuegod63上。訪問:http://192.168.1.111/ 正常

6.故障設定  

當掉xuegod63,關閉網卡,等30秒鐘,所有請求都轉到xuegod64上了
[root@xuegod63 ha.d]# ifdown ens32
[root@xuegod64 ~]# ifconfig 
...
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:48:80:95  
          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0
[root@xuegod64 ~]# df -h
...
192.168.1.62:/wwwdir  9.7G  3.4G  5.8G  37% /var/www/html
[root@xuegod64 ~]#systemctl status httpd
httpd (pid  6375) is running...


xuegod63上把ens32網卡再次開啟:
[root@xuegod63 ~]# ifup ens32
等30秒後,查看:
[root@xuegod63 ~]# df -h
...
192.168.1.62:/wwwdir  9.7G  3.4G  5.8G  37% /var/www/html    #已經加載了httpd資源
[root@xuegod63 ~]# systemctl status httpd
httpd (pid  27097) is running...
[root@xuegod63 ~]# ifconfig 
。。。
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:12:EC:1E  
          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0
資源已經回切過來。
在xuegod64上查看釋放資料:
[root@xuegod64 ~]# ifconfig   #查看不到ens32:0  192.168.1.111這個IP地址
[root@xuegod64 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.7G  3.7G  5.5G  41% /
tmpfs                 569M     0  569M   0% /dev/shm
/dev/sda1             194M   28M  157M  15% /boot
/dev/sr0              3.4G  3.4G     0 100% /mnt
[root@xuegod64 ~]# service httpd status
httpd is stopped

擴展:
heartbeat自帶的斷網切換的工具-ipfail
  ipfail斷網切換的原理

  關於ipfail這個斷網切換的原理很簡單,首先heartbeat要判斷自己的網絡是否正常其實就是通過ping某個ip,如果可以ping的通,說明網絡是通的,如果ping不通了,說明是網絡斷了,或者是主服務器的網卡壞了,然後執行切換的動作。

ping一個group的ipfail配置:

ping_group group1 172.16.103.254 172.16.103.212

Heartbeat實現web服務器高可用