内容概要:
1. 準備工作
注:heartbeat3 在centos6.4上不好用,是以我的實驗環境時centos5.9,版本為heartbeat2
HA的心跳監測可以通過序列槽連接配接監測也可以通過網線監測,前者需要伺服器有一個序列槽,後者需要有一個空閑網卡。
HA架構中需要有一個共享的儲存設備
首先需要在兩台機器上安裝mysql服務,并架設好共享存儲資源(NFS), 共享的目錄應該是datadir
HA需要兩台機器配置一個相同的vip
理論上每台機器要配置三個ip,一個是vip(eth0:0),一個是心跳線監測使用的ip(eth1),還有一個是服務使用的ip(eth0)
我們設定如下環境:
vip(eth0:0): 192.168.0.100
機器1 eth0:192.168.0.21 eth1: 192.168.200.128
機器2 eth0:192.168.0.22 eth1: 192.168.200.129
機器1 我們簡稱node1, 機器2我們簡稱node2
配置hosts, 兩台機器一樣:
192.168.0.21 node1
192.168.0.22 node2
node1 & node2 關閉防火牆,關閉selinux
2. 配置NFS安裝mysql
NFS由第三台機器(192.168.0.11)提供
NFS上:vim /etc/exports //内容如下
/data/share 192.168.0.0/24(rw,sync,no_root_squash)
NFS上: /etc/init.d/rpcbind start; /etc/init.d/nfs start
node1 & node2上以下步驟同:
mkdir -p /data/mysql
mount -t nfs 192.168.0.11:/data/share/ /data/mysql/
groupadd -g 27 mysql
useradd -u 27 -g mysql mysql
chown -R mysql:mysql /data/mysql
下載下傳免編譯的二進制mysql包
tar zxvf mysql-5.1.40-linux-i686-icc-glibc23.tar.gz; mv mysql-5.1.40-linux-i686-icc-glibc23 /usr/local/mysqlcd /usr/local/mysql
cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld //更改datadir 以及 basedir
node1上指定,node2 上不用執行這一步
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
node1 上先啟動mysql,node2上暫時先不啟動
/etc/init.d/mysqld start
如果想啟動node2上的mysql,必須先停掉node1上的mysql,因為這兩個mysql共同用一個datadir有共享的資源,會産生沖突,而在heartbeat服務中,如果node1正常則node2預設就停止mysql服務,隻有當node1當機,node2才會自動啟動mysql服務
3. 安裝配置heartbeat
node1 & node2 : yum install -y heartbeat
yum install -y heartbeat-* libnet
以下配置在node1:
cd /usr/share/doc/heartbeat-2.1.3/; cp authkeys haresources ha.cf /etc/ha.d/
cd /etc/ha.d
vim authkeys// 增加:
auth 3
3 md5 Hello! 儲存後更改它的權限:
chmod 600 authkeys
vim haresources //增加一行:
node1 192.168.0.100/24/eth0:0 mysqld
vim ha.cf //更改或增加如下内容
logfile /var/log/ha.log
#bcast eth1 #心跳使用以太網廣播方式,eth1為廣播位址
ucast eth1 192.168.200.129 #單點傳播形式與對方機器通信,與上者二選一
keepalive 2 #每2秒發一次廣播
warntime 10 # 這個時間為警告時間,10s鐘内沒有收到對方節點的信号,則會發警告資訊記錄到日志裡
deadtime 30 #30s内沒有收到對方節點的信号則認為對方節點當機,然後立即接管對方節點的服務
initdead 120 #這個時間是給重新開機系統留出來的等待時間,如果系統重新開機了那麼網絡服務不會立即正常使用
udpport 694 # 廣播通信使用的端口
auto_failback on # 如果是on, 則當主節點故障恢複後,服務還會切換回來
node node1 #主節點主機名
node node2 #從節點主機名
ping 192.168.0.1 #仲裁節點,最好是一個比較強健的裝置,比如說交換機
respawn hacluster /usr/lib/heartbeat/ipfail #當heartbeat啟動時也會随着一起啟動的程序放到這裡,ipfail是用來檢測網絡連通性的工具,hacluster為啟動該程式的使用者
debugfile /var/log/ha-debug.log
把node1上的三個配置檔案拷貝至node2
node1上執行: cd /etc/ha.d; scp ha.cf haresources authkeys node2:/etc/ha.d/
node2上修改 vim /etc/ha.d/ha.cf //把
ucast eth1 192.168.200.129改為 ucast eth1 192.168.200.128
啟動heartbeat, node1 & node2 :
service heartbeat start
4. 測試heartbeat
node1 上把icmp禁止:
iptables -I input -p icmp -j DROP
tail -f /var/log/ha-log.log
ifconfig 看,已經沒有了 eth0:0
node2 上ifconfig 開啟了eth0:0
在node1上解除防火牆
iptables -D input -p icmp -j DROP
tail -f /var/log/ha-log.log
ifconfig 看eth0:0 會開啟,而node2上eth0:0會自動關閉
在node1上killall heartbeat, node2上也會自動開啟eth0:0
本文轉自 linuxpp 51CTO部落格,原文連結:http://blog.51cto.com/1439337369/1717762,如需轉載請自行聯系原作者