openEuler 20.03 LTS SP1发行版本DRBD初体验

简介
DRBD(Distributed Replicated Block Device,分布式复制块设备)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。DRBD是镜像块设备,是按数据位镜像成一样的数据块。

通常将两个节点的整块磁盘(或者分区,LVM逻辑卷等设备)规划为DRBD设备。
如果primary节点宕机,secondary节点可以在高可用集群中提升成为primary节点。
当接收到数据,内核判断是发往到drbd设备的数据,存储到本机,同时将一份副本网络传输到secondary节点。
传输过程包括三种方式:异步(A),半同步(B),同步(C)。

通常作为双节点环境保持数据一致性的一种解决方案。

一 环境准备

1 操作系统
准备两个操作系统环境

建议使用多块网卡环境,将drbd的网络流量独立出来减缓业务网卡压力。
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.90.172 test1
172.16.90.174 test2

192.168.1.11  test11
192.168.1.13  test22

# cat /etc/openEuler-release
openEuler release 20.03 (LTS-SP1)
# uname -a
Linux test3 4.19.90-2012.5.0.0054.oe1.x86_64 #1 SMP Tue Dec 22 15:58:47 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/yum.repos.d/openEuler.repo
[everything]
name=everything
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler

[EPOL]
name=EPOL
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/EPOL/$basearch/
enabled=1
gpgcheck=1

# dnf install -y drbd drbd-kernel drbd-utils drbd-pacemaker drbd-udev drbd-xen drbd-bash-completion
# rpm -qa |grep drbd
drbd-bash-completion-9.5.0-5.oe1.x86_64
drbd-utils-9.5.0-5.oe1.x86_64
drbd-udev-9.5.0-5.oe1.x86_64
drbd-xen-9.5.0-5.oe1.x86_64
drbd-9.5.0-5.oe1.x86_64
drbd-kernel-9.0.27-1.oe1.x86_64
drbd-pacemaker-9.5.0-5.oe1.x86_64

# cat /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted

# systemctl stop firewalld
# systemctl disable firewalld

2 磁盘
每个操作系统中存在一个单独的磁盘用于DRBD,本文档中均为/dev/sdb设备,大小为1G
# fdisk -l /dev/sdb
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

二 配置

说明:
磁盘设备:         /dev/sdb  1G
DRBD设备:         /dev/drbd
DRBD resource名称:r0
DRBD设备挂载点:   /test


/etc/drbd.d目录中,创建一个以.res结尾的资源文件,本文档中为/etc/drbd.d/r0.res。
两个节点上DRBD相关配置文件内容保持一致,本文档中仅增加了r0.res资源文件。
# cat /etc/drbd.d/r0.res
resource r0 {
    on test1 {
        device /dev/drbd0;
        disk /dev/sdb;
        address 192.168.1.11:7789;
        meta-disk internal;
    }
    on test3 {
        device /dev/drbd0;
        disk /dev/sdb;
        address 192.168.1.13:7789;
        meta-disk internal;
    }
}
注意:文件中使用的test1和test3分别是主机名称。

 

分别在两个节点初始化元数据信息
# drbdadm create-md r0
initializing activity log
initializing bitmap (32 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

注意:
如果设备非首次使用,初始化之前使用如下命令进行清理。
# dd if=/dev/zero of=/dev/sdb bs=1M count=100

# systemctl is-enabled drbd
disabled
注意:
如果是在类似pacemaker的场景中使用DRBD作为集群资源,drbd服务的启动停止等由pacemaker控制,保持drbd服务开机自启动为disabled状态。
如果是在单独使用drbd的场景中,设置drbd服务为enable状态。

# systemctl start drbd
# systemctl status drbd

# lsmod | grep drbd
drbd_transport_tcp     24576  1
drbd                  532480  2 drbd_transport_tcp
libcrc32c              16384  4 nf_conntrack,nf_nat,drbd,sctp

通过命令 drbdsetup show 可以直接查看资源配置情况


在其中一个节点上执行如下命令,强制设置为primary,使其开始同步:
# drbdsetup primary r0 --force

primary节点上状态:
# drbdsetup status
r0 role:Primary
  disk:UpToDate
  test3 role:Secondary
    peer-disk:UpToDate

secondary节点状态:
# drbdadm status
r0 role:Secondary
  disk:UpToDate
  test1 role:Primary
    peer-disk:UpToDate

primary节点上状态:
# mkfs.xfs -f /dev/drbd0
meta-data=/dev/drbd0             isize=512    agcount=4, agsize=65532 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=262127, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1566, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

两个节点上创建挂载目录:
mkdir -p /test

primary节点上:
# mount /dev/drbd0 /test
# mount |grep test
/dev/drbd0 on /test type xfs (rw,relatime,attr2,inode64,noquota)
# echo "hello" > /test/a.txt
# cat /test/a.txt
hello

# umount /dev/drbd0      
# drbdsetup secondary r0

secondary节点上执行操作提升为primary节点:
# drbdsetup primary r0
# drbdsetup status
r0 role:Primary
  disk:UpToDate
  hatest1 role:Secondary
    peer-disk:UpToDate

# mount /dev/drbd0 /test
# cat /test/a.txt
hello

至此,DRBD设备可以确认正常工作。

上一篇:Ubuntu18.04LTS Manual


下一篇:解决wsl2下ubuntu 20.04 LTS apt update很慢的问题