介绍:
Distributed Replicated Block Device(DRBD)是基于块设备在不同的高可用服务器对之间同步和镜像数据的软件,通过它可以实现在网络中的两台服务器之间基于块设备级别的实时或异步镜像或同步复制,其实就类似于rsync+inotify这样的架构项目软件。只不过drbd是基于文件系统底层的,即block层级同步,而rsync+inotify是在文件系统之上的实际物理文件的同步,因此,drdb的效率更高,效果更好
提示:上面提到的块设备可以是磁盘分区、LVM逻辑卷、整块磁盘等
DRBD部署:
环境:
Master: OS:Centos6.5 IP: eth0:172.16.50.199 #服务器管理IP eth1:10.0.0.1 Hostname:drbd-master Backup: OS:Centos6.5 IP: eth0:172.16.50.193 #服务器管理IP eth1:10.0.0.2 Hostname:drbd-backup hosts: echo "10.0.0.1 drbd-master" >> /etc/hosts echo "10.0.0.2 drbd-backup" >> /etc/hosts #准备工作 [root@drbd-master /]# /etc/init.d/iptables stop #关闭防火墙 [root@drbd-master /]# setenforce 0 #关闭selinx [root@drbd-master /]# ntpdate time.windows.com #时间同步
安装软件
#加一块硬盘,master 512M,backup 1G #master分区 [root@drbd-master ~]# fdisk /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-512, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-512, default 512): +384 Command (m for help): p Disk /dev/sdb: 536 MB, 536870912 bytes 64 heads, 32 sectors/track, 512 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x99e8115a Device Boot Start End Blocks Id System /dev/sdb1 1 385 394224 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (386-512, default 386): Using default value 386 Last cylinder, +cylinders or +size{K,M,G} (386-512, default 512): Using default value 512 Command (m for help): w The partition table has been altered! 第一个分区384,第二个剩下的全部,格式化第一个分区,第二个不要动 [root@drbd-master ~]# partprobe [root@drbd-master ~]# mkfs.ext4 /dev/sdb1 #格式化 [root@drbd-master ~]# tune2fs -c -1 /dev/sdb1 #backup分区 [root@drbd-backup ~]# fdisk /dev/sdb #跟上面差不多,第一个分区784,第二个剩下的全部,格式化第一个分区,第二个不要动 #安装 #编译安装 [root@drbd-master ~]# wget http://www.drbd.org/download/drbd/8.4/archive/drbd-8.4.4.tar.gz [root@drbd-master ~]# tar zxf drbd-8.4.4.tar.gz [root@drbd-master ~]# cd drbd-8.4.4 [root@drbd-master drbd-8.4.4]# ./configure --prefix=/usr/local/drbd8.4.4 --with-km --with-heartbeat --sysconfdir=/etc//drbd #--with-km 开启内核模块 Enable kernel module #--with-heartbeat 开启heartbeat Enable Heartbeat integration #--sysconfdir 指定配置文件路径 [root@drbd-master drbd-8.4.4]# make KDIR=/usr/src/kernels/2.6.32-696.18.7.el6.x86_64/ [root@drbd-master drbd-8.4.4]# make install #报错解决 1.configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option. 解决方法:yum -y install flex 2.make: *** [check-kdir] Error 1 #看看/usr/src/kernel有没有,有的话就用,没有就yum -y install kernel-devel kernel-headers #以上步骤两个都要做
相关配置列表说明
主机名称 drbd-master drbd-backup 管理IP 172.16.50.199 172.16.50.193 DRBD管理名称 data data DRBD挂载目录 /data /data DRBD逻辑设备 /dev/drbd0 /dev/drbd0 DRBD对接IP eth1:10.0.0.1 eth1:10.0.0.2 DRBD存储设备 /dev/sdb1 /dev/sdb1 DRBD Meta设备 /dev/sdb2[0] /dev/sdb2[0] NFS导出目录 /data /data
配置drbd加载到内核模块
[root@drbd-master drbd-8.4.4]# modprobe drbd [root@drbd-master ~]# depmod 说明:在编译并准备好一个Linux内核加载模块后,modprobe前必须先执行命令depmod,此命令会生成新的modules.dep。 [root@drbd-master drbd-8.4.4]# lsmod |grep drbd drbd 327018 0 libcrc32c 1246 1 drbd #报错解决 FATAL: Module drbd not found. 原因:这是因为系统默认的内核并不支持此模块,所以需要更新内核 更新内核的方法: #解决办法 yum -y install kernel kernel-devel kernel-headers 然后重启
配置文件参数讲解及实际配置
#刚才我们已经指定了配置文件地址 [root@drbd-master drbd-8.4.4]# ls /etc/drbd/ bash_completion.d drbd.conf drbd.d ha.d rc.d udev xen [root@drbd-master drbd]# cat drbd.conf global { usage-count no; #全局配置,允不允许官方统计你的安装 } common { syncer { rate 100M; #同步速度 verify-alg crc32c; #验证方法 } } #primary for drbd1 resource data { protocol C; #确保两个数据的一个协议,C disk { on-io-error detach; #磁盘出现io错误的处理 } on drbd-master { #机器名字 device /dev/drbd0; #drbd设备 disk /dev/sdb1; #对应分区,刚才我们新建的db1 address 10.0.0.1:7788; #地址、端口 meta-disk /dev/sdb2[0]; #数据分区 } on drbd-backup { device /dev/drbd0; disk /dev/sdb1; address 10.0.0.2:7788; meta-disk /dev/sdb2[0]; } } #两个都要做
主从同步配置
1.初始化 [root@drbd-master drbd]# drbdadm create-md data Writing meta data... initializing activity log NOT initializing bitmap New drbd meta data block successfully created. #成功 2.启动服务 [root@drbd-master drbd]# mkdir -p /usr/local/drbd8.4.4/var/run/drbd [root@drbd-master drbd]# drbdadm up data #配置的数据名,drbd.conf里 [root@drbd-master /]# cat /proc/drbd version: 8.4.4 (api:1/proto:86-101) GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@drbd-master, 2018-01-18 12:41:57 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:262128 #两边都是Secondary/Secondary即可,表示两端都是从,处于无主(primary)的状态 #报错解决 [root@drbd-master drbd]# drbdadm up data 0: Failure: (119) No valid meta-data signature found. ==> Use 'drbdadm create-md res' to initialize meta-data area. <== Command 'drbdsetup attach 0 /dev/sdb1 /dev/sdb2 0 --on-io-error=detach --resync-rate=100M' terminated with exit code 10 #可能会出现这个问题,有可能是前面分区没有更新,所以删掉分区重新分区,重启即可 #同步DRBD数据到对端server,使数据保持一致 指定一个要同步的资源,同步到数据对端 [root@drbd-master /]# drbdadm -- --overwrite-data-of-peer primary data #--overwrite-data-of-peer 覆盖对端数据,本地作为主, root@drbd-master data]# cat /proc/drbd version: 8.4.4 (api:1/proto:86-101) GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@drbd-master, 2018-01-18 12:41:57 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:262143 nr:0 dw:15 dr:263141 al:2 bm:16 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 #master端已经变成主(Primary) #注意事项:1.如果为空硬盘,可以随便执行操作不需要考虑数据 2.如果两边数据不一样,就一定要注意同步数据的方向 3.一个资源只能在一端执行同步数据到对端的命令 #挂载测试数据库 #master [root@drbd-master /]# mkdir /data [root@drbd-master drbd]# mount /dev/drbd0 /data/ [root@drbd-master /]# cd /data/ [root@drbd-master data]# touch `seq 10` [root@drbd-master data]# ls 1 10 2 3 4 5 6 7 8 9 lost+found #backup [root@drbd-backup ~]# mount /dev/drbd0 /data/ mount: you must specify the filesystem type #这里backup不让挂载,因为drbd在挂载它,所以备节点无法使用 [root@drbd-backup data]# drbdadm down data [root@drbd-backup data]# mount /dev/sdb1 /data/