实验开始前先做以下准备:
实验环境: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 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.18.202:7789;
meta-disk internal;
}
}
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
同步完成
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
drbdadm primary --force mydrbd
mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd
ls /mnt/drbd
这时我们再到两个节点上添加一个分区sdb3,做成drbd,用于存放网页数据。
资源配置文件如下:
接下来初始化设备,提升状态,创建文件系统都和前面一样,这里略。
两个节点安装配置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状态,挂载文件系统,初始化数据库,测试启动数据库。
drbdadm primary --force mydrbd
./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
导入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
完成后保存,启动php-fpm。
接下来配置Nginx,包含vhost目录下所有以.conf结尾的文件。
在http段中加入:
include vhost/*.conf;
为wordpress博客添加虚拟主机
vim /etc/nginx/vhost/www.tuchao.com.conf
为phpMyAdmin添加虚拟主机。
然后重启nginx服务,访问页面测试。
www.tuchao.com
www.myadmin.com
另一个节点安装好相应的应用程序,把配置文件同步过去。
数据则是通过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 monitor interval="15" timeout="15" \
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" \
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"
定义webdrbd挂载资源,为网站程序提供数据存储。
primitive webstore ocf:heartbeat:Filesystem \
params device="/dev/drbd1" directory="/mnt/http" fstype="ext4" \
op monitor interval="60" timeout="50" \
op start timeout="60" interval="0" \
op stop timeout="60" interval="0"
定义资源组
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 \
meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
排列约束
定义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 整体信息:
查看集群状态信息
我们去节点一检测:
访问博客站点
php-MyAdmin可以正常登录
这时我们把节点一关机,然后查看状态。
服务访问也正常。
实验到这里就完成了,我这里漏了一点,在定义资源监控的时候没有在后面加on-fail="restart" 这个可以实现,资源在运行过程中停止了,资源管理器会自动把资源重启的。
有更好的建议欢迎与我交流QQ:1183710107
本文出自 “突破舒适区” 博客,转载请与作者联系!