高可用集群(HA)
1. 准備工作
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
配置hostname
雖然我們口頭上約定好了node1 node2,但是若是主機名和這個不一致,會導致heartbeat啟動不了。所以還得在每台機器上配置hostname。
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包
wget http://syslab.comsenz.com/downlo ... -icc-glibc23.tar.gz
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 執行:
需先安裝epel擴展源:
yum install -y epel-release
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