• 简介


DRBD(Distributed Replicated Block Device)是一款基于Linux平台实现分布式复制存储系统,DRBD可以理解为就是Linux内核的驱动程序通过用户空间的管理工具实现管理,广泛用于高可用集群

DRBD内核驱动程序向Linux内核提供虚拟的块设备文件,他是DRBD的重要组成部分,用于实现读写数据到本地块设备和(1个或多个)远程镜像节点。

DRBD存在于文件系统和内核底层的I/O协议栈附近,当有io操作请求需要写入本地磁盘设备的时候,优先经过DRBD内核程序,通过其特定的算法实现数据过滤从而实现基于块设备数据同步解决方案

DRBD(Distributed Replicated Block Device)_DRBD

协议A:异步复制协议

一旦本地磁盘发生写操作,同步的数据已经放置本地的tcp发送的缓冲区,则主节点的本地写操作就认为完成,继续处理新的请求

优点:效率高

缺点:当发生强制故障转移,易容易丢失数据

 

协议B:半同步复制协议

一旦本地本地磁盘发生写操作,且同步的数据已经通过本地的tcp/ip协议栈通道发送到Scondary节点则主节点认为本地写操作已经完成

优点:效率相对较高,丢失数据的概率低于异步方式

缺点:还是会产生数据库丢失的可能性

 

协议C:同步复制协议

主要当本地磁盘设备和远程的磁盘设备同时完成数据写操作之后,主节点才认为这一次的数据本地写操作成功

优点:数据安全性高,易失性小,当然如果两块磁盘在写的过程中同时发生不可逆故障则还是会产生数据丢失的可能性。

缺点:效率低

 

关于DRBD的主备节点(Primary/Secondary)

Primary节点对外可以实现文件系统格式化挂载,读写操作。

Scondary节点对外不能提供任何操作。不能直接进行挂载访问(除非角色切换)

参考官方文档:https://www.linbit.com/drbd-user-guide/drbd-guide-9_0-cn/


  • 实验环境准备

序列号操作系统主机名ip地址磁盘设备(DRBD)备注
1CentOS Linux release 7.4DRBD_NODE75192.168.3.75/dev/sdb复制盘
2CentOS Linux release 7.4DRBD_NODE76192.168.3.76/dev/sdb复制盘


  • 两台机初始化【两台相同操作】

1丶关闭防火墙Selinux
[root@localhost ~]# yum install epel-release -y
[root@localhost ~]# yum install bash-completion bash-completion-extras -y
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# sed -i '/^[^#].*/s/enf.*$/disabled/'i /etc/selinux/config

2丶设置时间同步
[root@localhost ~]# echo "*/5 * * * * /sbin/ntpdate ntp.api.bz &>/dev/null &" >>/var/spool/cron/root

3丶设置主机名解析
[root@localhost yum.repos.d]# echo -e "192.168.3.75\tDRBD_NODE75" >>/etc/hosts
[root@localhost yum.repos.d]# echo -e "192.168.3.76\tDRBD_NODE76" >>/etc/hosts

4丶配置DRBD源
[root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@localhost ~]# rpm -Uvh 

5丶查看rpm包
[root@localhost yum.repos.d]# yum list all|grep drbd 

6丶安装DRBD
[root@localhost yum.repos.d]# yum install -y drbd90-utils.x86_64 kmod-drbd90.x86_64

7丶安装内核包
[root@localhost yum.repos.d]# yum install kernel-devel kernel kernel-deaders   -y

8丶安装完成后重启服务器查看(不重启还不能载入drbd模块)
[root@localhost ~]# modprobe drbd


  • 75机器操作【Secondary】


1丶配置互信

[root@DRBD_NODE75 drbd.d]# ssh-keygen -t rsa

[root@DRBD_NODE75 drbd.d]# ssh-copy-id -i ~/.ssh/id_rsa.pub DRBD_NODE76

[root@DRBD_NODE75 drbd.d]# ssh -l root DRBD_NODE76 date  

Wed Aug 26 10:13:22 CST 2020

 

2丶开始配置drbd资源(全局配置)

[root@DRBD_NODE75 drbd.d]# cp global_common.conf{,.bak}

 

[root@DRBD_NODE75 drbd.d]# tee >/etc/drbd.d/global_common.conf<<eof

global {

        usage-count yes;

}

common {

        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";

        }

        startup {

        }

        options {

        }

        disk {

                on-io-error detach;

                resync-rate 10M;

        }

        net {

                protocol C;

                cram-hmac-alg "sha1";

        }

}

eof

 

3丶配置resource资源

[root@DRBD_NODE75 drbd.d]# tee >/etc/drbd.d/drbd_rcs.res<<eof

resource r0 {

  on DRBD_NODE75 {

    device    /dev/drbd1;

    disk      /dev/sdb;

    address   192.168.3.75:7789;

    meta-disk internal;

  }

  on DRBD_NODE76 {

    device    /dev/drbd1;

    disk      /dev/sdb;

    address   192.168.3.76:7789;

    meta-disk internal;

  }

}

eof

 

4丶创建设备元数据

[root@DRBD_NODE75 ~]# drbdadm create-md r0      //创建设备元数据

DRBD(Distributed Replicated Block Device)_DRBD_02


5丶启用资源

[root@DRBD_NODE75 drbd.d]# drbdadm up r0      //启用drbd资源

[root@DRBD_NODE75 drbd.d]# drbdadm status     //查看状态


  • 76机器操作【Primary】

1丶配置互信

[root@DRBD_NODE76 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub DRBD_NODE75

[root@DRBD_NODE76 ~]# ssh -l root DRBD_NODE75 date

Wed Aug 26 10:14:50 CST 2020

 

2丶配置DRBD资源

tee >/etc/drbd.d/global_common.conf<<eof

global {

        usage-count yes;

}

common {

        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";

        }

        startup {

        }

        options {

        }

        disk {

                on-io-error detach;

                resync-rate 10M;

        }

        net {

                protocol C;

                cram-hmac-alg "sha1";

                    shared-secret "drbddiscovery!$@#";

        }

}

eof

 

3丶配置resource资源

[root@DRBD_NODE75 drbd.d]# tee >/etc/drbd.d/drbd_rcs.res<<eof

resource r0 {

  on DRBD_NODE75 {

    device    /dev/drbd1;

    disk      /dev/sdb;

    address   192.168.3.75:7789;

    meta-disk internal;

  }

  on DRBD_NODE76 {

    device    /dev/drbd1;

    disk      /dev/sdb;

    address   192.168.3.76:7789;

    meta-disk internal;

  }

}

eof


4丶将全局配置文件通过scp或者rsync同步到75机器

[root@DRBD_NODE76 drbd.d]# scp -rp /etc/drbd.d/ DRBD_NODE75:/etc/drbd.d/


5丶创建设备元数据

[root@DRBD_NODE76 ~]# drbdadm create-md r0

DRBD(Distributed Replicated Block Device)_DRBD_03

[root@DRBD_NODE76 drbd.d]# drbdadm up r0
[root@DRBD_NODE76 drbd.d]# drbdadm status

DRBD(Distributed Replicated Block Device)_DRBD_04

注意:如果出现如下图的错误证明已经启动了

DRBD(Distributed Replicated Block Device)_DRBD_05

[root@DRBD_NODE76 drbd.d]# drbdadm down r0

[root@DRBD_NODE76 drbd.d]# drbdadm up r0

 

6丶启动初始化全量同步【只能在其中一个节点执行主节点

[root@DRBD_NODE76 drbd.d]# drbdadm primary r0 –force

[root@DRBD_NODE76 drbd.d]# drbdadm status

DRBD(Distributed Replicated Block Device)_DRBD_06

[root@DRBD_NODE76 drbd.d]# drbdadm status

DRBD(Distributed Replicated Block Device)_DRBD_07

 

7丶格式化文件系统并挂载至服务器中

[root@DRBD_NODE76 drbd.d]# mkfs.xfs -L "drbd_r0" /dev/drbd1

[root@DRBD_NODE76 drbd.d]# install -d /opt/drbd

[root@DRBD_NODE76 drbd.d]# mount -L drbd_r0 /opt/drbd/

DRBD(Distributed Replicated Block Device)_DRBD_08


  • 验证DRBD数据同步

步骤:

1.在/opt/drbd中创建几个或者copy几个文件

2.然后卸载/opt/drbd并将76的角色从Primary切换未Secondary

3.然后75机器设置为Primary并挂在文件系统看文件是否存在

[root@DRBD_NODE76 drbd.d]# mkdir -p /opt/drbd/{a,b}{c,d}

[root@DRBD_NODE76 drbd.d]# cp /etc/passwd /opt/drbd/

DRBD(Distributed Replicated Block Device)_DRBD_09

[root@DRBD_NODE76 drbd.d]# drbdadm secondary r0

[root@DRBD_NODE76 drbd.d]# drbdadm status

DRBD(Distributed Replicated Block Device)_DRBD_10

 

下面是75机器上的操作-【75机器操作】

[root@DRBD_NODE75 drbd.d]# install -d /opt/drbd

[root@DRBD_NODE75 drbd.d]# drbdadm primary r0 --force

[root@DRBD_NODE75 drbd.d]# drbdadm status

DRBD(Distributed Replicated Block Device)_DRBD_11

[root@DRBD_NODE75 drbd.d]# mount -L drbd_r0 /opt/drbd/

DRBD(Distributed Replicated Block Device)_DRBD_12


验证结果:当在75机器挂在完毕通过ls /opt/drbd可以看见之前76机器上创建的文件全部都通过过来了。


当你的才华不足以满足你的野心时请静下心来学习吧!^v^