实现环境:
两台虚拟机
192.168.238.128 node1.test.com
192.168.238.129 node2.test.com
实验准备:两台主机可以互相解析主机名,把对方主机名写入hosts文件,设置主机名和uname -n显示的一样,每个虚拟机上面划分一个1G分区做
drbd同步,这里我使用/dev/sda5,分出来的分区不要格式化,只partprobe就行
vi /etc/hosts
192.168.238.128 node1.test.com node1
192.168.238.129 node2.test.com node2
hostname node1.test.com
vi /etc/sysconfig/network 确保主机名和uname -n显示的一样
HOSTNAME=node1.test.com
ssh-keygen -t rsa 配置两个主机不用密码可以互相ssh
ssh-copy-id -i .ssh/id_rsa.pub node2
scp -p /etc/hosts node2:/etc
下载软件包:drbd83-8.3.8-1.el5.centos.i386.rpm,kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
yum localinstall --nogpgcheck * -y
cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc
vi /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 "www.test.com"; 这里是认证密钥配置
}
syncer {
rate 100M;
}
}
vi /etc/drbd.d/web.res 定义一个名为web的资源
resource web {
on node1.test.com {
device /dev/drbd0;
disk /dev/sda5; 这个分区划分出来之后不要格式化,partprobe一下就行
address 192.168.238.128:7789;
meta-disk internal;
}
on node2.test.com {
device /dev/drbd0;
disk /dev/sda5;
address 192.168.238.129:7789;
meta-disk internal;
}
}
scp /etc/drbd.conf node2:/etc
scp /etc/drbd.d/global_common.conf web.res node2:/etc/drbd.d
在两个节点上面都执行资源的初始化,如果磁盘被格式化过了,这里会报错
drbdadm create-md web
在两个节点上面启动服务
service drbd start
使用cat /proc/drbd可以查看启动后的状态信息
使用drbd-overview命令可以看到此时两个节点都处于Secondary/Secondary状态
把node1设置为主节点
drbdsetup /dev/drbd0 primary –o
或者
drbdadm -- --overwrite-data-of-peer primary web
在node2上面执行watch -n 1 'drbd-overview'可以看到已经开始同步了
文件系统的挂载只能在主节点上面执行,在主节点上面挂载之后格式化
mkdir /drbd
mkfs.ext3 /dev/drbd0
mount /dev/drbd0 /drbd
touch test
切换主被节点,现在主节点上面执行卸载操作,然后把主节点设置为备节点,把备节点设为主节点然后执行挂载
在node1上面
umount /drbd
drbdadm secondary web
在node2上面
drbdadm primary web
mkdir /drbd
mount /dev/drbd0 /drbd
ls /drbd 看一下刚才建立的test文件存在,实现了文件同步