drbd -- 数据同步

数据同步
drbd
rsync:两个服务器的实时目录同步
server1-----server2
/dir1 /dir2
drbd:两个服务器的存储(块设备)实时同步
server1-----server2
/dev/vdb1 /dev/vdb1
drbd
(distributed replicated block device) ,号称“网络raid-1“,开源,由linbit公司开发。
架构图:
准备两台虚拟机(centos7.3平台)
172.16.2.10 172.16.2.11
本地磁盘 本地磁盘
/dev/vdb1------- /dev/vdb1
 主 drbd技术 备
   vm1.cluster.com vm2.cluster.com
第一步:在两台虚拟机上都加一块磁盘 /dev/vdb ,大小自定义(1G大小就ok)
并使用fdisk /dev/vdb  分一个/dev/vdb1出来,不用去格式化;两边的vdb1最好一样大
或者不分/dev/vdb1也可以,那么后面就直接对/dev/vdb来做drbd
第二步:安装前准备
1,主机名
# hostnamectl set-hostname --static vm1.cluster.com
# vim /etc/hosts
172.16.2.10 vm1.cluster.com
172.16.2.11 vm2.cluster.com
2,静态ip
3,关闭iptables,selinux
4,时间同步
5,准备安装包
如果要配yum源的话,需要配置elrepo源(官网为elrepo.org;本地镜像源,epel源,163源等里面没有相关的包)
elrepo源的做法:
如果不使用公网的话,可以直接在我这里下载软件包,路径为
笔记目录/arch/drbd_soft
drbd84-utils-8.9.8-1.el7.elrepo.x86_64.rpm
drbd84-utils-sysvinit-8.9.8-1.el7.elrepo.x86_64.rpm
kmod-drbd84-8.4.9-1.el7.elrepo.x86_64.rpm
第三步:
在两台服务器上安装drbd相关软件包
# yum install drbd84* kmod-drbd84
# modprobe drbd
# lsmod |grep drbd --确认模块存在
drbd 405376 0
libcrc32c 12644 2 xfs,drbd
第四步:
在两台服务器上配置(两边的配置一样)
# cat /etc/drbd.conf --此文件保持默认,不用修改
include "drbd.d/global_common.conf"; --通用选项参数的子配置文件
include "drbd.d/*.res"; --resource资源子配置文件
# vim /etc/drbd.d/global_common.conf
global {
usage-count no; --用户统一,我们实验而已,改为no;此配置文件其它参数都不改,保持默认就ok
}
# vim /etc/drbd.d/r0.res --新建一个资源文件,我这里取名为r0.res,并配置下面的一段(你们复制后改一个主机名,ip,设备名就可以了)
resource r0 {
on vm1.cluster.com {
device /dev/drbd0;
disk /dev/vdb1;
address 172.16.2.10:7788;
meta-disk internal;
}
on vm2.cluster.com {
device /dev/drbd0;
disk /dev/vdb1;
address 172.16.2.11:7788;
meta-disk internal;
}
}
第五步:
创建meta data,并启动服务
# drbdadm create-md r0 --两台服务器都要做
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
# systemctl start drbd.service  --两台服务器要一起启动才能启起来
# systemctl status drbd.service
# systemctl enable drbd.service
# ps -ef |grep drbd |grep -v grep --确认两台服务器上有相关进程
root 12870 2 0 10:09 ? 00:00:00 [drbd-reissue]
root 13507 2 0 10:41 ? 00:00:00 [drbd0_submit]
root 13514 2 0 10:41 ? 00:00:00 [drbd_w_r0]
root 13518 2 0 10:41 ? 00:00:00 [drbd_r_r0]
root 13527 2 0 10:41 ? 00:00:00 [drbd_a_r0]
root 13528 2 0 10:41 ? 00:00:00 [drbd_as_r0]
# cat /proc/drbd --确认两边磁盘的状态,现在都为Secondary,表示目前没有主从之分
version: 8.4.9-1 (api:1/proto:86-101)
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1047484
第六步:
定义主从磁盘
在vm1.cluster.com上操作下面这句
# drbdadm primary r0 --定义为r0资源的主,但报错,那么换下面一句命令
0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup-84 primary 0' terminated with exit code 17
# drbdadm -- --overwrite-data-of-peer primary r0
# cat /proc/drbd --再次在vm1.cluster.com上看到为Primary/Secondary;但在vm2.cluster.com上看到的为Secondary/Primary
第七步:
现在可以把主服务器(vm1.cluster.com)的DRBD设备格式化并挂载使用,但是备服务器(vm2.cluster.com)的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作
在主(vm1.cluster.com)上的操作
# mkfs.xfs /dev/drbd0 --只在primary这台服务器上这里格式化就可以了,另一台服务器不用格式化
# mount /dev/drbd0 /mnt/
# echo '123' > /mnt/123
# echo '456' > /mnt/456  --创建两个文件,用于测试
这时在从(vm2.cluster.com)上操作
# mount /dev/drbd0 /mnt
# mount /dev/vdb1 /mnt --这两个操作都不可行;现在版本systemctl stop drbd停掉服务,也不能挂载;验证了做Secondary的服务器是不能挂载使用的
第8步:
为了验证上面的两个文件可以同步到secondary从服务器上,需要把原来的primary降级为secondary,把原来的secondary升级primary(实际生产环境可以结合HA高可用集群来实现,下面为了测试,我们手动实现)
在主(vm1.cluster.com)上的操作
# umount /mnt/
# drbdadm secondary r0 --降级
在从(vm2.cluster.com)上的操作
# drbdadm primary r0 --升级
# mount /dev/drbd0 /mnt/
# ls /mnt --验证两个文件确实同步过来了
原文地址:https://www.cnblogs.com/skyzy/p/9201460.html