實驗開始前先做以下準備:
實驗環境:RHEL6.4
節點1:admin1.tuchao.com 192.168.18.201
節點2:admin2.tuchao.com 192.168.18.202
首先兩個節點安裝DRBD,準備相同大小的分區。
yum install drbd-8.4.3-33.el6.i686.rpm drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.i686.rpm -y
分區 (略)
接下來操作admin1.tuchao.com
1、配置/etc/drbd.d/global-common.conf
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
#wfc-timeout 120;
#degr-wfc-timeout 120;
disk {
on-io-error detach;
#fencing resource-only;
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
syncer {
rate 1000M;
2、定義資源
vim /etc/drbd.d/mydrbd.res
resource mydrbd {
on admin1.tuchao.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.18.201:7789;
meta-disk internal;
on admin2.tuchao.com {
address 192.168.18.202:7789;
3、将配置檔案同步到另一個節點
scp global_common.conf mydrbd.res admin2:/etc/drbd.d/
4、在兩個節點上初始化已定義的資源并啟動服務
drbdadm create-md mydrbd
/etc/init.d/drbd start
檢視狀态,也可以使用drbd-overview指令來檢視
cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 06:20:13
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:4 dw:4 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
由此看出,目前兩個節點都是(secondary)備用狀态。
将admin1節點提升為(primary)主狀态
drbdadm primary --force mydrbd
<a href="http://s3.51cto.com/wyfs02/M02/43/5F/wKioL1PZ-M7ittS0AAGVU1gKATM160.jpg" target="_blank"></a>
同步完成
0:mydrbd/0 Connected Primary/Secondary UpToDate/UpToDate C r-----
建立檔案系統在一個節點上操作就可以了,挂載。
mkfs.ext4 /dev/drbd0
mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd
drbd基本配置完成,我們在裡面建立一個檔案夾。
mkdir /mnt/drbd/mydata
解除安裝/dev/drbd0,将狀态轉為備。
umount /dev/drbd0
drbdadm secondary mydrbd
在admin2上,把狀态提升為primary
ls /mnt/drbd
<a href="http://s3.51cto.com/wyfs02/M02/43/5F/wKiom1PZ-0jzjqwQAADmrbG3tI8969.jpg" target="_blank"></a>
這時我們再到兩個節點上添加一個分區sdb3,做成drbd,用于存放網頁資料。
資源配置檔案如下:
<a href="http://s3.51cto.com/wyfs02/M02/43/6E/wKioL1Pa8xCCx83QAAJNL5aqkZQ342.jpg" target="_blank"></a>
接下來初始化裝置,提升狀态,建立檔案系統都和前面一樣,這裡略。
兩個節點安裝配置corosync+pacemaker(略)這個過程我在早期文章有詳細介紹這裡不再重複。
請參考:http://tchuairen.blog.51cto.com/3848118/1439759
Nginx,PHP安裝過程(略),這個内容較多,不是這篇文章的重點,我早期文章也有介紹。
請參考http://tchuairen.blog.51cto.com/3848118/1437530
MySQL安裝配置(略)請參考http://tchuairen.blog.51cto.com/3848118/1422258
drbd資源mydrbd:
/dev/drbd0 挂載至 /mnt/drbd
/mnt/drbd/mydata --用于存放MySQL資料。
drbd資源webdrbd:
drbd1 挂載至 /mnt/http
/mnt/http/wordpress --用于存放部落格站點資料
/mnt/http/myadmin --用于存放phpMyAdmin
提升primary狀态,挂載檔案系統,初始化資料庫,測試啟動資料庫。
./scripts/mysql_install_db --user=mysql --datadir=/mnt/drbd/mydata/
/etc/init.d/mysqld start
建立wpdb庫,授權連接配接使用者,用做部落格站點。
create database wpdb;
grant all privileges on wpdb.* to 'wpuser'@'127.0.0.1' identified by '123456';
停止資料庫,解除安裝drbd0,狀态轉為備用。
到另一個節點,提升為primary狀态,挂載檔案系統,啟動服務。
注意這裡不需要再次初始化資料庫了,在一個節點上做了就可以了,資料會同步過來的。
要保證節點提升為primary挂載檔案系統正常,MySQL能啟動,MySQL這邊就差不多完事了。
webdrbd資源提升primary,挂載檔案系統,導入部落格站點資料。
drbdadm primary --force webdrbd
mkdir /mnt/http
mkfs.ext4 /dev/drbd1
mount /dev/drbd1 /mnt/http/
tar zxvf wordpress-3.9-zh_CN.tar.gz
mkdir /mnt/http/wordpress
mkdir /mnt/http/myadmin
mv wordpress/* /mnt/http/wordpress/
配置wordpress 資料庫接口。
cp config.sample.inc.php config.inc.php
vim config.inc.php
<a href="http://s3.51cto.com/wyfs02/M02/43/77/wKioL1PbLErQAXHzAAFWdnG5Ew8060.jpg" target="_blank"></a>
導入phpMyAdmin資料。
unzip phpMyAdmin-4.0.5-all-languages.zip
cd phpMyAdmin-4.0.5-all-languages
mv phpMyAdmin-4.0.5-all-languages/* /mnt/http/myadmin/
生成一串随機數加入到config.inc.php檔案。
配置php-fpm
vim /usr/local/php/etc/php-fpm.conf
<a href="http://s3.51cto.com/wyfs02/M00/43/78/wKiom1PbMMuBriAPAAGCsUBOweE241.jpg" target="_blank"></a>
完成後儲存,啟動php-fpm。
接下來配置Nginx,包含vhost目錄下所有以.conf結尾的檔案。
在http段中加入:
include vhost/*.conf;
為wordpress部落格添加虛拟主機
vim /etc/nginx/vhost/www.tuchao.com.conf
<a href="http://s3.51cto.com/wyfs02/M00/43/78/wKioL1PbL2yBCOslAAElkTl150s689.jpg" target="_blank"></a>
為phpMyAdmin添加虛拟主機。
<a href="http://s3.51cto.com/wyfs02/M02/43/77/wKiom1PbLrqzk0h9AAEQy9rCjYo796.jpg" target="_blank"></a>
然後重新開機nginx服務,通路頁面測試。
www.tuchao.com
<a href="http://s3.51cto.com/wyfs02/M02/43/78/wKioL1PbMSqxG6mUAAFw4N2Olic582.jpg" target="_blank"></a>
www.myadmin.com
<a href="http://s3.51cto.com/wyfs02/M02/43/78/wKiom1PbMCXg27gbAAFwSz6RbA0937.jpg" target="_blank"></a>
另一個節點安裝好相應的應用程式,把配置檔案同步過去。
資料則是通過drbd切換過去,然後把服務都啟動起來測試一下能否正常工作,這裡一定要測試。
這裡我測試都工作正常,部落格和php-MyAdmin都可以正常通路,操作和前面差不多,我就省略了。
資源定義有常用的兩個工具,crmsh和pcs,這裡介紹下pcs簡單用法。
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
pcs resource create vip ocf:heartbeat:IPaddr params ip=192.168.18.254 cidr_netmask=24
pcs resource create //建立資源
pcs constraint order vip then webstore then httpd //定義順序限制
pcs resource group add myservice <res> <res> ... //定義資源組
在定義php-fpm為叢集資源出錯時,解決方法請參考:http://tchuairen.blog.51cto.com/3848118/1534231
接下來進入正題,定義資源,實作兩個節點高可用。
我們需要定義的資源:
vip:192.168.18.254
mydrbd //需要定義為主從,當主節點出現故障後,從節點自動提升為主節點,實作高可用。
webdrbd //同上
為mydrbd定義檔案系統挂載點,為MySQL提供存儲。
為webdrbd定義檔案系統挂載點,為站點程式提供存儲。
mysqld //MySQL服務
nginx //nginx服務
php-fpm //php-fpm服務
檢視資源代理使用幫助資訊
crm ra meta ocf:linbit:drbd
pcs resource describe ocf:linbit:drbd
由于我們沒有stonith裝置,是以要關閉stonith不然會報錯。
crm configure property stonith-enabled=false
由于我們隻有兩個節點,配置忽略票數。
crm configure property no-quorum-policy=ignore
定義主從drbd參數。
master-max 有多少個可以提升為主節點的。
master-node-max 在單個節點上最多可以運作幾個主資源
clone-max 最多可以運作多少個clone
clone-node-max 單個節點最多可以運作多少個clone
notify 是否啟用通知機制
定義mydrbd資源代理
primitive mydrbd ocf:linbit:drbd \
params drbd_resource="mydrbd" \
op monitor role="Master" interval="10" timeout="20" \
op monitor role="Slave" interval="20" timeout="20" \
op start timeout="240" interval="0" \
op stop timeout="100" interval="0"
定義mysqld
primitive mysqld lsb:mysqld \
op monitor interval="15" timeout="15" \
op start timeout="30" interval="0" \
op stop timeout="30" interval="0"
定義drbd0挂載資源,為mysql提供資料存儲。
primitive mystore ocf:heartbeat:Filesystem \
params device="/dev/drbd0" directory="/mnt/drbd" fstype="ext4" \
op monitor interval="60" timeout="50" \
op start timeout="60" interval="0" \
op stop timeout="60" interval="0"
定義nginx
primitive nginx lsb:nginx \
op start timeout="15" interval="0" \
op stop timeout="15" interval="0"
定義php-fpm
primitive php-fpm lsb:php-fpm
定義vip
primitive vip ocf:heartbeat:IPaddr \
params ip="192.168.18.254" cidr_netmask="24" \
op monitor interval="10" timeout="20" on-fail="restart" \
op start timeout="20" interval="0" \
op stop timeout="20" interval="0"
定義webdrbd資源代理
primitive webdrbd ocf:linbit:drbd \
params drbd_resource="webdrbd" \
定義webdrbd挂載資源,為網站程式提供資料存儲。
primitive webstore ocf:heartbeat:Filesystem \
params device="/dev/drbd1" directory="/mnt/http" fstype="ext4" \
定義資源組
group webserver mysqld nginx vip php-fpm
将mydrbd定義為主從類型
ms ms_mydrbd mydrbd \
meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
将webdrbd定義為主從類型
ms ms_webdrbd webdrbd \
排列限制
定義mysql與mystore在同一節點運作
colocation mysqld_with_mystore inf: mystore mysqld
定義mystore與ms_mydrbd的主節點在同一節點運作
colocation mystore_with_ms_mydrbd inf: ms_mydrbd:Master mystore
定義webstore與ms_webdrbd的主節點在同一節點運作
colocation webstore_with_ms_webdrbd inf: webstore ms_webdrbd:Master
定義nginx與webstore在同一節點運作
colocation webstore_with_nginx inf: webstore nginx
順序限制
定義先啟動mystore,再啟動mysqld。
order mysqld_after_mystore inf: mystore mysqld
定義先啟動ms_mydrbd,再啟動mystore。
order mystore_after_ms_mydrbd inf: ms_mydrbd:promote mystore:start
定義先啟動webstore,再啟動nginx。
order nginx_after_webstore inf: webstore nginx
定義先啟動ms_webdrbd,再啟動webstore。
order webstore_after_ms_webdrbd inf: ms_webdrbd:promote webstore:start
以下是crm configure show 整體資訊:
<a href="http://s3.51cto.com/wyfs02/M01/43/CA/wKioL1PcmPfwnibsAAMu0XI4LQc584.gif" target="_blank"></a>
檢視叢集狀态資訊
<a href="http://s3.51cto.com/wyfs02/M01/43/CA/wKioL1Pcmm2QK-eIAARj7Ghm63E395.jpg" target="_blank"></a>
我們去節點一檢測:
<a href="http://s3.51cto.com/wyfs02/M00/43/CA/wKioL1PcnHOTSjBUAAHyCbj1uXk157.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/43/C9/wKiom1Pcm2PgnzOSAAGGMYwiQws027.jpg" target="_blank"></a>
通路部落格站點
<a href="http://s3.51cto.com/wyfs02/M02/43/C9/wKiom1PcnCTQabsrAAHPLjcMZXE460.jpg" target="_blank"></a>
php-MyAdmin可以正常登入
<a href="http://s3.51cto.com/wyfs02/M01/43/CA/wKioL1PcnWCAE8uIAAKtdoq9Jjc533.jpg" target="_blank"></a>
這時我們把節點一關機,然後檢視狀态。
<a href="http://s3.51cto.com/wyfs02/M00/43/CA/wKioL1Pcn9zAZ1w4AARcgsy939w122.jpg" target="_blank"></a>
服務通路也正常。
實驗到這裡就完成了,我這裡漏了一點,在定義資源監控的時候沒有在後面加on-fail="restart" 這個可以實作,資源在運作過程中停止了,資料總管會自動把資源重新開機的。
有更好的建議歡迎與我交流QQ:1183710107
本文轉自qw87112 51CTO部落格,原文連結:http://blog.51cto.com/tchuairen/1534215