CentOS_6.7高可用服務Heartbeat_v3.0.4安裝以及配置node
集羣系統主要就2種:linux
高可用(High Availability)HA集羣: 使用Heartbeat/keepalived等軟硬件實現;也會稱爲」雙機熱備」, 「雙機互備」, 「雙機」。
負載均衡羣集(Load Balance Cluster):使用LinuxVirtual Server(LVS)/haproxy/nginx等軟硬件實現;nginx
Heartbeat項目是 Linux-HA 工程的一個組成部分,它實現了一個高可用集羣系統。心跳服務和集羣通訊是高可用集羣的兩個關鍵組件,在 Heartbeat 項目裏,由 heartbeat 模塊實現了這兩個功能。c++
高可用集羣是指一組經過硬件和軟件鏈接起來的獨立計算機,它們在用戶面前表現爲一個單一系統,在這樣的一組計算機系統內部的一個或者多個節點中止工做,服務會從故障節點切換到正常工做的節點上運行,不會引發服務中斷。從這個定義能夠看出,集羣必須檢測節點和服務什麼時候失效,什麼時候恢復爲可用。這個任務一般由一組被稱爲「心 跳」的代碼完成。在Linux-HA裏這個功能由一個叫作heartbeat的程序完成。web
heartbeat (Linux-HA)的工做原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測能夠經過網絡鏈路和串口進行,並且支持冗餘鏈路,它們之間相互發送報文來告訴對方本身當前的狀態,若是在指定的時間內未受到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運行在對方主機上的資源或者服務。算法
消息通訊模型vim
Heartbeat包括如下幾個組件:安全
heartbeat – 節點間通訊校驗模塊服務器
CRM - 集羣資源管理模塊網絡
CCM - 維護集羣成員的一致性
LRM - 本地資源管理模塊
StonithDaemon - 提供節點重啓服務
logd - 非阻塞的日誌記錄
apphbd - 提供應用程序級的看門狗計時器
Recovery Manager - 應用故障恢復
CTS – 集羣測試系統,集羣壓力測試
這裏主要分析的是Heartbeat的集羣通訊機制,因此這裏主要關注的是heartbeat模塊
heartbeat模塊由如下幾個進程構成:
master進程(masterprocess)
FIFO子進程(fifochild)
read子進程(readchild)
write子進程(writechild)
在heartbeat裏,master進程把本身的數據或者是客戶端發送來的數據,經過IPC發送到write子進程,write子進程把數據發送到網絡;同時read子進程從網絡讀取數據,經過IPC發送到master進程,由master進程處理或者由master進程轉發給其客戶端處理。
Heartbeat啓動的時候,由master進程來啓動FIFO子進程、write子進程和read子進程,最後再啓動client進程。
系統:CentOS 6.7 x86_64(兩臺虛擬機)
安全:SElinux disabled
Iptables disabled
Heartbeat版本:v3.0.4
Cluster Gule版本:v1.0.5
Resource Agents版本:v3.9.5
軟件包安裝方式:yum安裝
Heartbeat3.0之後是由 gule、heartbeat、agents 三部分組成。所以,須要分別安裝。
1、準備工做
1. 配置hosts文件(vim /etc/hosts):
10.0.0.50 db1
192.168.0.205 db1
10.0.0.52 db2
192.168.0.201 db2
注:
1)hostname帶後綴的域名(HA25pxdschool.org)會出報錯。
2. 安裝依賴:
# yum installgcc gcc-c++ autoconfautomake libtool glib2-devel libxml2-devel bzip2-devel e2fsprogs-devellibxslt-devel libtool-ltdl-devel make wget docbook-dtds docbook-style-xsl -y #源碼安裝時必須安裝的依賴
3. 添加運行 heartbeat的用戶和組 (源碼安裝,在主備服務器上同時操做)
# groupadd -r haclient
# useradd -r -g haclient -M -s /sbin/nologin hacluster
4. 換yum源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
5. 調整時區並對時
# ntpdate 10.0.0.254 #db1與db2上分別對時
7 May 22:33:02 ntpdate[2729]: adjust timeserver 10.0.0.254 offset -0.001976 sec
2、安裝
# yum -y install heartbeat* httpd #最小化安裝的系統大約有26個左右的包要安裝
3、配置並啓動Heartbeat
1. 主上(db1)的配置:
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d
vi authkeys #打開下面兩項:一共有三種認證方式供選擇,第一種是CRC循環冗餘校驗,第二種是SHA1哈希算法,第三種是MD3哈希算法,其中他們的密碼能夠任意設置,可是兩邊密碼必須保持一致。
auth 3
3 md5 Hello!
chmod 600 authkeys #給認證文件受權爲600
vi haresources #編輯資源文件,加入以下語句
db1 10.0.0.210/24/eth0 httpd #設定虛擬IP和對應的接口,而且指定啓動虛擬IP時啓動httpd服務,這裏的httpd服務必須是可以直接在/etc/init.d/目錄下啓動的服務。
注意:主節點和備節點中資源文件haresources要徹底同樣。
# ha.cf文件主要參數註釋:
debugfile /var/log/ha-debug #設定debug文件目錄
logfile /var/log/ha-log #設定日誌文件目錄
logfacility local0 #利用系統日誌打印日誌
keepalive 1 #設定檢查時間間隔爲1s
deadtime 10 #設定在10s內沒有心跳信號,則當即切換服務
warntime 5 #設定告警時間爲5s(5s內沒有收到對方的迴應就報警)
initdead 60 #設定初始化時間爲60s
udpport 694 #設定集羣節點間的通訊協議及端口爲udp694監聽端口(該端口能夠修改)
ucast eth1 192.168.0.201 #設定心跳方式使用單播方式,而且是在eth1接口上進行單播,ip地址爲對方心跳端口的IP
auto_failback on/off #當主節點恢復後,是否自動切回,通常都設爲off
node db1 #指定兩個節點
node db2
ping 192.168.0.1 #指定一個第三方的仲裁節點
respawn hacluster /usr/lib64/heartbeat/ipfail #使用這個腳本去偵聽對方是否還活着(使用的是ICMP報文檢測)
# egrep -v "^#|^$"ha.cf //這次試驗的配置文件
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth1 192.168.0.201
auto_failback off
node db1
node db2
ping 192.168.0.1
respawn hacluster /usr/lib64/heartbeat/ipfail
2. 把主上的三個配置拷貝到從(db2)上:
cd /etc/ha.d/
scp –P52668 -p authkeys ha.cf haresources root@db2:/etc/ha.d/
3. 到從上(db2) 編輯ha.cf
vi /etc/ha.d/ha.cf #只須要更改一個地方, IP修改成對端主機的IP地址(192.168.0.205)
ucast eth1 192.168.0.201 改成 ucast eth1 192.168.0.205
4. 啓動heartbeat
先主,後從
service heartbeat start
5. 測試高可用
db1:
[root@db1 ha.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:db:31:f7 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.50/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.210/24 brd 10.0.0.255 scopeglobal secondary eth0
inet6 fe80::20c:29ff:fedb:31f7/64 scope link
valid_lft forever preferred_lft forever
3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWNqlen 1000
link/ether 00:0c:29:db:31:01 brd ff:ff:ff:ff:ff:ff
inet 191.168.0.205/24 brd 191.168.0.255 scope global eth1
inet6 fe80::20c:29ff:fedb:3101/64 scope link
valid_lft forever preferred_lft forever
db2:
[root@db1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
link/ether 00:0c:29:db:31:f7 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.52/24 brd 10.0.0.255 scope global eth0
inet6 fe80::20c:29ff:fedb:31f7/64 scope link
valid_lft forever preferred_lft forever
3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWNqlen 1000
link/ether 00:0c:29:db:31:01 brd ff:ff:ff:ff:ff:ff
inet 191.168.0.201/24 brd 191.168.0.255 scope global eth1
inet6 fe80::20c:29ff:fedb:3101/64 scope link
valid_lft forever preferred_lft forever
[root@db1 ~]# curl 10.0.0.210
web1 page
# 停掉db1上的網卡服務或關機後,再次在db2上查看VIP和服務是否切換成功
[root@db1 ~]# service heartbeat stop
Stopping High-Availability services: Done.
db2:
[root@db1 ~]# curl 10.0.0.210
web2 page