DRBD是一个基于软件的、无共享、复制存储解决方案,它在主机之间镜像块设备(硬盘、分区、逻辑卷等)的内容。DRBD的核心功能是通过Linux内核模块实现的。
管理工具:
drbdadmDRBD-utils程序套件的高级管理工具。
drbdsetup配置加载到内核中的DRBD模块。
drbdmeta允许创建、转储、还原和修改DRBD元数据结构。
资源角色:Primary 或 Secondary
primary :可以不受限制地用于读写操作。它可用于创建和装载文件系统、原始或直接I/O到块设备等。
secondary :接收来自对等节点设备的所有更新,但在其他情况下完全不允许访问。
它不能被应用程序使用,也不能用于读写访问。不允许对设备进行只读访问的原因是必须保持缓存一致性。
DRBD特征:
1、单主(Single-primary)模式
2、双主(Dual-primary)模式
3、复制(Replication)模式
允许三种程度的复制同步性:
Protocol A
异步复制协议。一旦本地磁盘写入完成,并且复制数据包已放置在本地TCP发送缓冲区中,则认为主节点上的本地写入操作已完成。
Protocol B
内存同步(半同步)复制协议。一旦本地磁盘写入发生,并且复制数据包已到达对等节点,则认为主节点上的本地写入操作已完成。
Protocol C
同步复制协议。只有在确认本地和远程磁盘写入之后,主节点上的本地写入操作才被视为完成。因此,单个节点的丢失不会导致任何数据丢失。
案例配置
主机名及IP地址 | 角色 |
---|---|
node1:192.168.16.11 | 主 |
node2:192.168.16.12 | 备 |
内核版本 | 3.10.0-1062.el7.x86_64 |
发行版 | CentOS Linux release 7.7.1908 (Core) |
node1,node2都添加一块10G大小的硬盘
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
sr0 11:0 1 942M 0 rom
DRBD配置
配置流程:
1、关闭防火墙,禁用SElinux
# systemctl stop firewalld
# iptables -F
# sed -i '/^SELINUX=/ cSELINUX=disabled' /etc/selinux/config
# setenforce 0
2、配置hosts解析
# vim /etc/hosts
192.168.16.11 node1
192.168.16.12 node2
3、双机免秘钥互信配置
# ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ''
[root@node1 ~]# ssh-copy-id node2
[root@node2 ~]# ssh-copy-id node1
4、配置扩展源下载安装包
# vim /etc/yum.repos.d/elrepo.repo
[elrepo]
name=ELRepo.org Community Enterprise Linux Repository - el7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/elrepo/elrepo/el7/x86_64/
enabled=1
gpgcheck=0
# yum install -y drbd84-utils kmod-drbd84
5、加载模块
# modprobe drbd
modprobe: FATAL: Module drbd not found. #出现这个错误说明linux内核版本过低
升级linux内核版本,升级完成必须重启生效
# yum -y install kernel-devel kernel kernel-headers
# reboot
6、查看模块是否加载
[root@node1 ~]# lsmod | grep drbd
drbd 397041 0
libcrc32c 12644 4 xfs,drbd,nf_nat,nf_conntrack
配置文件:/etc/drbd.conf
,包含全局配置文件drbd.d/
目录下以.res
结尾的文件
# vim /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
~
7、编辑`/etc/drbd.d/global_common.conf`文件
global {
usage-count no; #
# Decide what kind of udev symlinks you want for "implicit" volumes
# (those without explicit volume <vnr> {} block, implied vnr=0):
# /dev/drbd/by-resource/<resource>/<vnr> (explicit volumes)
# /dev/drbd/by-resource/<resource> (default for implict)
udev-always-use-vnr;