天天看點

HA叢集

内容概要: 

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,如需轉載請自行聯系原作者

繼續閱讀