實驗環境:
VIP:192.168.198.200
data1-1:
eth0:192.168.198.140 #用于外網管理IP
eth1:10.0.0.7 #傳遞心跳信息,drbd數據同步。
data1-2:
eth0:192.168.198.150
eth1:10.0.0.8
1、heartbeat安裝配置
準備:兩節點都執行
yum install epel* -y yum install -y heartbeat ntpdate 202.120.2.101
1.1配置IP
#雙節點 iptables -I INPUT -s 192.168.198.0/24 -j ACCEPT #來自內網的請求全部接受。 iptables -I INPUT -s 10.0.0.0/24 -j ACCEPT #data1-1 ifconfig eth1 10.0.0.7/24 up route add -host 10.0.0.8 dev eth1 #data1-2 ifconfig eth1 10.0.0.8/24 up route add -host 10.0.0.7 dev eth1 #永久有效可以修改ifcfg-eth1文件
1.2修改主機名
#雙節點
cat >> /etc/hosts <<EOF 10.0.0.7 data1-1 10.0.0.8 data1-2 EOF
#data1-1 hostname data1-1 sed -i "/^H/d" /etc/sysconfig/network sed -i "/^/a\HOSTNAME=data1-1" /etc/sysconfig/network #data1-2 hostname data1-2 sed -i "/^H/d" /etc/sysconfig/network sed -i "/^/a\HOSTNAME=data1-2" /etc/sysconfig/network
1.3提供相同的配置文件
#data1-1 #cd /usr/share/doc/heartbeat-3.0.4/ #cp ha.cf haresources authkeys /etc/ha.d/ #把文件復制過去。 cd /etc/ha.d vim authkeys #編輯認證文件 auth 1 1 sha1 HI! chmod 600 authkeys vim ha.cf #配置文件 debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 30 warntime 10 initdead 120 udpport 694 mcast eth1 225.0.100.2 694 1 0 auto_failback on watchdog /dev/watchdog node data1-1 node data1-2 crm off vim haresources #資源文件 data1-1 IPaddr::192.168.198.200/24/eth0 scp /etc/ha.d/{authkeys,haresources,ha.cf} data1-2:/etc/ha.d/ #雙方提供相同的配置文件
2、drbd安裝配置
#下面都是在兩臺節點執行相同的操作 yum groupinstall -y "Development tools" #可選 yum install -y kernel kernel-devel kernel-headers #后期內核版本和drbd不兼容問題,可選,安裝好之后不要忘記重啟。
vim /etc/drbd.conf #編輯drbd配置文件 global { usage-count no; } common { syncer { # rate 10M; verify-alg crc32c; } } resource data { protocol C; disk { on-io-error detach; } on data1-1 { device /dev/drbd0; disk /dev/sda5; address 10.0.0.7:7788; meta-disk /dev/sda6; } on data1-2 { device /dev/drbd0; disk /dev/sda5; address 10.0.0.8:7788; meta-disk /dev/sda6; } }
提前對磁盤做好分區。
#兩節點 mkfs.ext4 /dev/sda5 drbdadm create-md data mkdir -p /usr/local/var/run/drbd drbdadm up data
在data1-1上面: drbdadm -- --overwrite-data-of-peer primary data mkdir /data mount /dev/drbd0 /data/ cat /proc/drbd #查看同步信息
vim /etc/ha.d/haresources data1-1 IPaddr::192.168.198.200/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4
scp /etc/ha.d/haresources data1-2:/etc/ha.d/
重啟heartbeat測試
3、安裝配置mysql。
#兩邊節點操作 groupadd mysql useradd -g mysql mysql
#主節點data1-1操作 mkdir -pv /data/3306/{data,binlog} chown -R mysql.mysql /data/ cd /usr/local/src/ wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.45.tar.gz tar -xf mysql-5.5.45.tar.gz cd mysql-5.5.45 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci make gmake make install cd /usr/local/mysql/ scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/ cp support-files/my-small.cnf /data/3306/my.cf
vim /data/3306/my.cf .... socket = /data/3306/mysql.sock .... datadir=/data/3306/data server-id = 3306 log-bin=/data/3306/binlog/mysql-bin binlog_format=mixed log-error=/data/3306/data/mysql-err
vim /data/3306/mysql.sh #提供啟動腳本 #!/bin/bash # MYSQL=/usr/local/mysql/bin PORT=3306 DEFAULTSFILE=/data/$PORT/my.cf CMD=shutdown SOCKET=/data/${PORT}/mysql.sock start_mysql () { echo "Starting MySQL.." ${MYSQL}/mysqld_safe --defaults-file=${DEFAULTSFILE} & } stop_mysql () { echo "Stopping MySQL.." ${MYSQL}/mysqladmin -S $SOCKET $CMD } case $1 in start) start_mysql ;; stop) stop_mysql ;; restart) stop_mysql sleep 2 start_mysql ;; *) echo "Usage:`basename $0` {start|stop}" esac
chmod +x /data/3306/mysql.sh mv /data/3306/mysql.sh /data/3306/mysql cp mysql /etc/ha.d/resource.d/ #提供mysql資源文件
vim /etc/ha.d/haresources data1-1 IPaddr::192.168.198.200/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 mysql
scp -r /etc/ha.d/ data1-2:/etc/
4、測試,查看輸出信息是否正確
ip addr show #查看VIP cat /proc/drbd #查看drbd狀態 ss -tnl | grep 330 #查看mysql是否啟動
5、總結
1、為什么叫快速部署方案呢?因為下次再次部署這個方案的時候,直接復制粘貼過去就可以了。
2、在mysql上可以在增加從庫,實現主從同步,參考 http://www.www58058.com/8496
3、這個方案還有很多需要完善的地方。
附錄:
關于裂腦
導致裂腦的原因
1、高可用服務器之間心跳鏈路故障,導致無法通信。
網線直連為例: 斷線,老鼠咬了,老化了,網卡壞了,驅動壞了。IP配置及沖突問題。
心跳線間連接的設備故障(網卡,交換機壞了)。
仲裁的機器出問題了。
2、高可用服務器上面開啟了防火墻阻擋了心跳信息傳輸。
3、高可用網卡信息配置不正確。
4、其他服務配置不當,如心跳方式,心跳廣播沖突。
防止裂腦:
裂腦危害是非常大的。有時候可能是致命的,以后用高可用的時候,先去想想高可用的危害,做高可用是有代價的。
以下幾個方面防止裂腦的問題的發生。
1、同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路。
2、檢測到裂腦時強行關閉一個心跳節點,這個功能需要特殊設備支持,stonith fence。備節點發現心跳故障,發送關機命令到主節點
3、做好裂腦的監控報警(郵件及手機短信),在問題發生時候人為第一時間介入仲裁,降低損失,當然在實施高可用方案時,要根據業務實際需要確定是否能容忍這樣的損失,對于一般的網站業務,這個損失是可控的。
4、報警報在服務器接管之前,給人員處理留足夠空間。一分鐘內報警了,但是服務器此時沒有接管,而是5分鐘接管。數據不會丟,導致用戶無法寫。
5、報警后不自動接管,而是認為人員控制接管。
6、增加仲裁機制,確定誰該獲得資源。
6.1 列入設置參考IP,當心跳線斷開時候,誰ping一下餐開IP,能夠相互通信的一方就接管。ping不通的一方可以自我重啟,以徹底釋放資源。
6.2 第三方軟件。
裂腦發生了,影響是比較大的,盡量不讓它發生。而不是已經發生再去解決。
drbd裂腦,參考:http://itindex.net/detail/50197-drbd
故障處理:
[root@data1-1 ~]# cat /proc/drbd version: 8.4.4 (api:1/proto:86-101) GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data1-1, 2015-10-05 08:52:17 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r----- ns:1057605 nr:8 dw:24 dr:1059271 al:1 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
在從節點執行
drbdadm connect --discard-my-data data
[root@data1-1 ~]# cat /proc/drbd version: 8.4.4 (api:1/proto:86-101) GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@data1-1, 2015-10-05 08:52:17 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:1057605 nr:8 dw:24 dr:1059271 al:1 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
原創文章,作者:艾賀,如若轉載,請注明出處:http://www.www58058.com/8608