{#OLE_LINK8}一、DRBD简介
DRBD(Distributed Replicated Block Device)是一款基于Linux平台实现分布式复制存储系统,DRBD可以理解为就是Linux内核的驱动程序通过用户空间的管理工具实现管理,广泛用于高可用集群
DRBD内核驱动程序向Linux内核提供虚拟的块设备文件,他是DRBD的重要组成部分,用于实现读写数据到本地块设备和(1个或多个)远程镜像节点。
DRBD存在于文件系统和内核底层的I/O协议栈附近,当有io操作请求需要写入本地磁盘设备的时候,优先经过DRBD内核程序,通过其特定的算法实现数据过滤从而实现基于块设备数据同步解决方案
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/
二、DRBD安装配置
1、准备工作
1)准备两台Linux Centos7机器
2)每台机挂载1个独立的磁盘
3)关闭防火墙、Selinux、完成时间同步、主机名解析
2、机器初始化(两台机相同操作)
1)关闭防火墙Selinux
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install bash-completion bash-completion-extras
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2)设置时间同步
[root@localhost ~]# echo "*/5 * * * * /sbin/ntpdate ntp.aliyun.com &>/dev/null &" >>/var/spool/cron/root
3)设置主机名解析
Node1
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# su -
[root@node1 ~]# echo -e "192.168.3.128\tnode1" >>/etc/hosts
[root@node1 ~]# echo -e "192.168.3.129\tnode2" >>/etc/hosts
Node2
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# su -
[root@node2 ~]# echo -e "192.168.3.128\tnode1" >>/etc/hosts
[root@node2 ~]# echo -e "192.168.3.129\tnode2" >>/etc/hosts
3、安装DRBD(两台机相同操作)
{#OLE_LINK9}1)安装DRBD
[root@node1 ~]# yum -y install drbd-utils drbd
2)安装依赖和内核包
[root@node1 ~]# yum -y install make gcc glibc kernel-devel kernel-headers kernel* flex flex-doc docbook-style-xsl
[root@node1 ~]# reboot
[root@node1 ~]# wget -c https://linbit.gateway.scarf.sh//downloads/drbd/8.4/drbd-8.4.11-1.tar.gz
[root@node1 ~]# tar xf drbd-8.4.11-1.tar.gz
[root@node1 ~]# cd drbd-8.4.11-1
[root@node1 drbd-8.4.11-1]# make clean all
[root@node1 drbd-8.4.11-1]# make install
[root@node1 drbd-8.4.11-1]# modinfo drbd
[root@node1 drbd-8.4.11-1]# modprobe drbd
3)安装完成后
[root@node1 drbd-8.4.11-1]# lsmod |grep drbd
[root@node2 drbd-8.4.11-1]# lsmod |grep drbd
4)配置SSH免密钥
Node1
[root@node1 drbd-8.4.11-1]# ssh-keygen -t rsa
[root@node1 drbd-8.4.11-1]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
[root@node1 drbd-8.4.11-1]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
Node2
[root@node2 drbd-8.4.11-1]# ssh-keygen -t rsa
[root@node2 drbd-8.4.11-1]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
[root@node2 drbd-8.4.11-1]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
5)开始配置drbd资源(全局配置)
[root@node2 drbd-8.4.11-1]# cd /etc/drbd.d
[root@node1 drbd.d]# cp global_common.conf{,_bak}
[root@node1 drbd.d]# vim /etc/drbd.d/global_common.conf
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| global { usage-count yes; } common { protocol C;
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 { wfc-timeout 120; degr-wfc-timeout 120; } options { } disk { on-io-error detach; resync-rate 100M; } net { cram-hmac-alg "sha1"; shared-secret "mydrbd"; } } |
6)配置resource资源
[root@node1 drbd.d]# vim /etc/drbd.d/drbd.res
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| resource drbd { on node1 { device /dev/drbd0; disk /dev/sdb; address 192.168.3.128:7789;
meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sdb; address 192.168.3.129:7789; meta-disk internal; } } |
[root@node1 drbd.d]# scp global_common.conf drbd.res root@node2:/etc/drbd.d/
7)创建设备元数据
[root@node1 drbd.d]# drbdadm create-md drbd
8)启用资源
[root@node1 drbd.d]# drbdadm up drbd
[root@node1 drbd.d]# drbdadm status
9)启动初始化全量同步(只能在其中一个节点执行)
[root@node1 drbd.d]# drbdadm primary drbd --force
[root@node1 drbd.d]# drbdadm status
初始化完成
10)格式化文件系统并挂载至服务器中
[root@node1 drbd.d]# mkfs.xfs /dev/drbd0
[root@node1 drbd.d]# mkdir -p /data/drbd/
[root@node1 drbd.d]# mount /dev/drbd0 /data/drbd/
[root@node1 drbd.d]# df -Th
11)验证DRBD数据同步
操作步骤:
1、创建测试文件
[root@node1 drbd.d]# mkdir -p /data/drbd/{a,b}{c,d}
[root@node1 drbd.d]# cp /etc/passwd /data/drbd/
[root@node1 drbd.d]# ll /data/drbd/
2、卸载文件系统并将Node1切换为备节点
[root@node1 drbd.d]# umount /data/drbd/
[root@node1 drbd.d]# drbdadm secondary drbd
3、Node2执行以下命令确认文件
[root@node2 drbd.d]# drbdadm primary drbd
[root@node2 drbd.d]# drbdadm status
[root@node2 drbd.d]# mkdir -p /data/drbd/
[root@node2 drbd.d]# mount /dev/drbd0 /data/drbd/
4、Node1升为主节点
先卸载Node2,然后降为备节点
[root@node2 ~]# drbdadm secondary drbd
[root@node2 ~]# drbdadm status
[root@node1 drbd.d]# drbdadm primary drbd --force
[root@node1 drbd.d]# mount /dev/drbd0 /data/drbd/
[root@node1 drbd.d]# df -Th
[root@node1 drbd.d]# ll /data/drbd/
[root@node1 drbd.d]# drbdadm status
历史上的今天
1 月
15