開源高可用性HA之Heartbeat服務
開源Heartbeat服務的安裝:
準備材料:
heartbeat-libs-3.0.4-2.el6.x86_64.rpm ldirectord-3.9.5-3.1.x86_64.rpm
heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-devel-3.0.4-2.el6.x86_64.rpm
工作機制:
Heartbeat最核心的兩部分就是:心跳檢測和資源監管。心跳檢測一般是通過以太網交叉線來連接集羣中的節點,作爲心跳監控,其他還有串口線也可以用來做心跳監控,心跳監控通過集羣主機之間相互發送報文來告訴對方自己運行的狀態,如果在指定的時間內未收到對方發送報文,那麼就認爲對方失效,這時Heartbeat就啓動資源接管模塊將對方主機上運行的服務資源接管過來,從而保證服務運行的可靠性。
步驟:
#yum install -y mysql-server #server50 server51上均安裝mysql服務,後面雙機集羣就在上面運行此服務.
#/etc/init.d/mysqld start #初始化數庫據服務;
#/etc/init.d/mysqld stop
#yum install -y heartbeat-libs-3.0.4-2.el6.x86_64.rpm heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-3.0.4-2.el6.x86_64.rpm ####server50 server51上均安裝heartbeat服務.
#cd /etc/ha.d/
#cp authkeys ha.cf haresources /etc/ha.d/
# vim ha.cf
29 logfile /var/log/ha-log #指明heartbeat的日誌存放位置
34 logfacility local0 #如果未定義上述的日誌文件,那麼日誌信息將送往local0(對應的/var/log/messages裏面)
48 keepalive 2 #發送報文的間隔,默認爲2s
56 deadtime 30 #指定若備用節點唉30s內沒有收到主節點的心跳信號,則立即接管主節點的服務資源。
61 warntime 10 #指定心跳的延時時間爲10s,當10s內備份節點不能收到主機誒到哪的心跳就會往日誌中寫入一個警告日誌,當此時不會切換服務。
71 initdead 60 #在某些系統上,系統啓動或重啓之後需要經過一段時間才能正常工作,該選項用於解決這種問題。
76 udpport 694 #設置廣播、單播通信使用的端口號
80 baud 19200 #設置串行通信的波特率
91 bcast eth0 #單播
157 auto_failback on #用來定義主節點回復後,是否回切
211 node server50.example.com #定義爲主節點
212 node server51.example.com #定義爲輔節點
220 ping 172.25.45.250 #ping真機的網關,能ping通,代表主節點沒壞。
253 respawn hacluster/usr/lib64/heartbeat/ipfail #ipfail 用於檢測和處理網絡故障,需要配合ping和ping_group來配合。
259 apiauth ipfail gid=haclient uid=hacluster #指定對客戶端api的訪問控制,這裏指定了有權限訪問的/ipfail的用戶和用戶組。
注意:我在配置時,忘了更改253行的lib64,因爲我的電腦是64位的,所以一直報錯,錯誤提示爲:”ERROR:Client child command [/usr/lib/heartbeat/ipfail] is not executable”說ipfail這個文件是不可執行的,因爲我64位系統不能執行32位的文件,嗯,記住這個錯誤哈!
#vimharesources
150 server50.example.comIPaddr::172.25.45.100/24/eth0 mysqld
#vim authkeys
23 auth 1 #密碼爲明文
24 1 crc
#chmod 600 authkeys 記住:一定要更改認證文件的權限,否則heartbeat服務無法起來。
#scp ha.cf haresources authkeys [email protected]:/etc/ha.d/
#/etc/init.d/heartbeat start #server50上開啓heartbeat服務;
# /etc/init.d/heartbeat start #server51上開啓heartbeat服務;
#tail -f /var/log/messages 可以查看相關啓動日誌;
共享遠程存儲,使得heartbeat+遠程存儲+mysql服務結合起來;
首先開一個虛擬機提供遠程存儲,將存儲快共享給指定ip的主機;
Server3: #yum install -y scsi-target-utils.x86_64
#vim /etc/tgt/targets.conf
38 <targetiqn.2016-06.com.example:server.disk>
39 backing-store /dev/vdc
40 initiator-address 172.25.45.50
41 initiator-address 172.25.45.51
42 </target>
#/etc/init.d/tgtd restart
配置雙機集羣:server50 server51
#yum install -yiscsi-initiator-utils.x86_64
#iscsiadm -t st -mdiscovery -p 172.25.45.22
#iscsiadm -m node -l
#fdisk /dev/sda #
#mkfs.ext4 /dev/sda1
#mount /dev/sda1 /mnt
#cp -rp /var/lib/mysql/* /mnt
#chown mysql.mysql /mnt
#umount /mnt
#vim /etc/ha.d/haresources
150 server50.example.com IPaddr::172.25.45.100/24/eth0Filesystem::/dev/sda1::/var/lib/mysql::ext4 mysqld
#/etc/init.d/heartbeat stop
# /etc/init.d/heartbeat start
注意:標紅色部分均需要在集羣的兩臺主機上進行操作,,黑色部分之用在其中一臺主機(server50)進行操作就好了,,強調一點,就是server50做完分區過後,server51一定要同步分區表:partprobe!
驗證:在server50上df查看掛在情況,可以看到遠程存儲塊掛載在/var/lib/mysql上,可以直接打開mysql,還可以命令ip addrshow可以查看虛擬ip地址在哪臺主機上,就說明服務運行在哪臺主機.
作磁盤陣列:使兩個虛擬機都分4個G虛擬硬盤;相當於做一個RAID1陣列,數據塊同步,使得掛載時,都能看到另外一個虛擬機的操作,剛好也符合heartbeat的工作機制;
下載好:drbd-8.4.3.tar.gz
步驟:
#tar zxf drbd-8.4.3.tar.gz
#yum install -y gcc
#yum install -y flex
#./configure --with-km --enable-spec
#cd drbd-8.4.3
#yum install -y kernel-devel
# cp drbd-8.4.3.tar.gz /root/rpmbuild/SOURCES/
#rpmbuild -bb drbd.spec #將源碼.spec文件編譯成二進制文件(-bb)
# rpmbuild drbd-km.spec #同上
#cd /root/rpmbuild/RPMS/x86_64/
#rpm -ivh * #安裝裏面所有rpm包
#vim /etc/drbd.d/example.res
#scp example.res [email protected]:/etc/drbd.d/
#drbdadm create-md sqldata
#/etc/init.d/drbd start
#cat /proc/drbd
#drbdadm primery sqldata --force
# mkfs.ext4 /dev/drbd1
#mount /dev/drbd1 /mnt
#cp -rp /var/lib/mysql/* /mnt
#chown mysql.mysql /mnt
#umount /mnt
#drbdadm secondary sqldata
#vim /etc/ha.d/haresources
150 server50.example.com IPaddr::172.25.45.100/24/eth0drbddisk::sqldata Filesystem::/dev/drbd1::/var/lib/mysql ::ext4 mysqld
#scp -r/etc/ha.d/haresources [email protected]:/etc/dha.d/
#/etc/init.d/heartbeat start
Server51主機:
#cd /root/
#rpm -ivh drbd-*
#rbdadm create-md sqldata
# /etc/init.d/drbd start
#cat /proc/drbd
#/etc/init.d/heartbeat start
##df查看/dev/drbd1 自動掛載在/var/lib/mysql上面,且能夠打開mysql