在上一篇文章基础上,在两台服务器上添加DRBD,并通过corosync+pacemaker来启动:
先说明一下:实验中用的操作系统为CentOS 6.4 (内核版本为2.6.32-358.e16.x86_64),并没有自带drbd内核模块(2.6.33开始才有自带),需要自己添加。而网上找到的rpm包对CentOS 6.4的识别有问题,一直提示需要2.6.32-358.e16.x86_64的内核(实际上本身就是这个版本),网上也有其它人说在CentOS6.4上装有问题。所以下面的例子就不通过rpm包安装了,而是直接从官网下载源码编译安装。
在两台服务器上
1.各新加一块磁盘/dev/sdb.
2.创建新分区sdb1:
fdisk /dev/sdb
partprobe /dev/sdb1
3.安装内核开发相关工具包:
yum -y install kernel-devel kernel-headers flex gcc
4.解压缩源码、编译并添加为服务:
tar zxf drbd-8.4.3.tar.gz
cd drbd-8.4.3
./configure --with-km
make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64
make install
mkdir -p /usr/local/var/run/drbd # 必须加这个目录
cp /usr/local/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
#与rpm安装不同的是,源码安装后相应的配置文件路径为/usr/local/etc/……
chkconfig --add drbd
chkconfig drbd on
cd drbd
make clean
make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64
cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
modprobe drbd
6.查看模块是否已添加:
lsmod | grep drbd
在其中一台上
1.添加修改文件:
vim/usr/local /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 "thisissecret";
}
syncer {
rate 500M;
}
}
2.添加资源文件:
vim /usr/local/etc/drbd.d/drbdweb.res
resource drbdweb {
device /dev/drbd0;
disk /dev/sdb1;
meta-disk internal;
on node1.test.net {
address 192.168.1.2:7789;
}
on node2.test.net {
address 192.168.1.3:7789;
}
}
3.将配置文件拷到另一台上:
scp -r /usr/local/etc/drbd.* 192.169.1.3:/usr/local/etc/
两服务器上初始化资源并启动服务,并查看状态:
drbdadm create-md drbdweb
service drbd start
cat /proc/drbd
drbd-overview
在其中一台上:
1.设置成primary:
drbdadm -- --overwrite-data-of-peer primary drbdweb
2.进行格式化并挂载
mkfs.ext4 /dev/drbd0
mkdir /drbd
mount /dev/drbd0 /drbd
3.随便创建一个文件、卸载、设置成secondary
touch /drbd/something
umount/drbd
drbdadm secondary drbdweb
在另一台上升级为primary,挂载并查看是否有刚才创建的文件:
drbdadm primary drbdweb
drbd-overview
mkdir /drbd
mount /dev/drbd0 /drbd
ls /drbd
至此,DRBD实验就已经完成了。
这里顺便插入说一下:在下面的实验过程中如果某些操作有问题导致DRBD脑裂(split-brain)时,需要手工解决才能继续使用,方法如下:
1.选择其中一个节点丢弃:
drbdadm secondary <resource>
drbdadm connect --discard-my-data <resource>
2.另一个节点:
drbdadm connect <resource>
更详细内容可参考官方文档:http://drbd.linbit.com/users-guide/s-resolve-split-brain.html
下面是进行corosync+pacemaker来接管DRBD:
在两台服务器
1.卸载和服务停止:
umount /mnt/drbd
service drbd stop
chkconfig drbd off
2.更改配置文件:
vim /etc/corosync/corosync.conf
实际上就是在上个实验的配置文件上添加以下内容:
# 定义corosnyc的工作用户,需要使用root用户
aisexec {
user: root
group: root
}
3.启动服务
service corosync start
在其中一台上:
1.查看资源代理
crm ra list ocf linbit
crm ra info ocf:linbit:drbd
2.添加资源和约束:
crm
configure primitive resdrbdweb ocf:linbit:drbd params drbd_resource=drbdweb op start timeout=240s op stop timeout=100s
configure ms ms_bdrbdweb resdrbdweb meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1
configure primitive drbdfs ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/drbd" fstype="ext4" op start timeout=60s op stop timeout=60s
configure colocation drbdfs_and_ms_drbdweb inf: drbdfs ms_drbdweb:Master
configure order ms_drbdweb_before_drbdfs Mandatory: ms_drbdweb:promote drbdfs:start
3.最终结果如下:
configure show
上图中的 reshttpd 和resip是上个实验的配置,这里可忽略
自切换测试:
1.查看状态:
crm status
2.在主节点上创建文件,并切换成standby:
touch /drbd/another
crm node standby
3.在另一台上查看状态切换及文件同步:
crm status
ls /drbd/
4.将刚才设置成standby的服务器再次上线:
crm node online