目录
1.工作原理图
2.用户空间工具
3.工作模式
5.所需软件
6.配置文件
7.详细配置
1.配置通用属性信息
2.定义一个资源
4.设置主节点
5.创建文件系统
6.
测试
![180920367714210.jpg](https://i-blog.csdnimg.cn/blog_migrate/0ed6b1ada9e0f108a9d334c2e65cc9c1.jpeg)
目的-->
解决共享存储问题
工作原理-->
提供两个大小相同的分区,在数据流的层次上构建一个磁盘镜像,就如同raid1,所以又被称为分布式raid
![180920378817536.gif](https://i-blog.csdnimg.cn/blog_migrate/0ebfd5590faafd609f25ac44f9aa8e04.gif)
默认结构,两节点的所有存储属性,内容皆相同;
同一时刻只能有一个节点上线(即从节点,读写皆不可),
主节点接到数据后,将数据备份到磁盘,同时传递给从节点,并存放到磁盘中.
![180920378817536.gif](https://i-blog.csdnimg.cn/blog_migrate/0ebfd5590faafd609f25ac44f9aa8e04.gif)
组内节点皆上线;
节点必须为集群文件系统;
必须支持分布式文件锁(内核支持),主节点写入的时候,从节点就从文件锁得知对方在写入;
高可用集群的底层文件信息通道(必须将DRBD做成集群资源).
![180920384433964.gif](https://i-blog.csdnimg.cn/blog_migrate/c25398782e83c515a2f2124aa89ea811.gif)
![180920391154592.gif](https://i-blog.csdnimg.cn/blog_migrate/bad62fdfd0594940c3c54164e3314881.gif)
2.用户空间工具-->告知内核哪个分区是drbd设备
drbdadm
/etc/drbd.d/
|__
drbdadm primary resource_name
升级为主节点
|__
drbdadm secondary resource_name
降级为备节点
drbdsetup
drbdmeta
查看drbd状态,有两种方法
cat /proc/drbd
drbd-overview
A模式:主节点接到数据,只保证发送到本地网卡的数据缓冲区
(性能最好)
B模式:主节点接到数据,保证数据发送到从节点缓冲区,且存到了从节点的内核区,但是是否数据存储到从节点的硬盘,则不清楚
C模式:主节点接到数据,保证数据发送到从节点缓冲区,同时接到从节点存到从节点硬盘的信息
(安全最高)
利用高可用的底层信息通道(如HA的heartbeat或者corosync
)+
pacemaker
进行资源监控,将drbd定义为资源,且drbd资源有主从之分.
5.所需的软件包-->drbd在红帽中并没有编译,故而需要自己制作或者采用第三方rpm包
![180920395844749.gif](https://i-blog.csdnimg.cn/blog_migrate/142d1a2de90fe79260764c2ae86d1396.gif)
rhel6:官方不提供,由第三方提供
drbd-kmdl(内核空间)和drbd(用户空间)
rhel5:
kmod-drbd(内核空间)和drbd(用户空间)
6.配置-->分段式配置
drbd_resource组成:
resource_name device disk network
global{}基本没意义的配置
common{}定义drbd设备共享的属性信息(磁盘信息,网络信息,认证信息),可能存在多组drbd设备,每组包含一个主从
剩余配置信息是不同的属性
![180920378817536.gif](https://i-blog.csdnimg.cn/blog_migrate/0ebfd5590faafd609f25ac44f9aa8e04.gif)
![180920378817536.gif](https://i-blog.csdnimg.cn/blog_migrate/0ebfd5590faafd609f25ac44f9aa8e04.gif)
7.详细配置过程-->一个共享区域资源的例子
前提准备:提供两个大小相同的磁盘或者磁盘分区空间
7-1.配置通用属性信息-->/etc/drbd.d/global-common.conf
global {
usage-count no;
#是否给官方发送统计报告,这个不用说,还是关了吧
# minor-count dialog-refresh disable-ip-verification
}
#定义drbd节点的共同点属性
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";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
#wfc-timeout 120;
#degr-wfc-timeout 120;
}
disk {
on-io-error detach;
#fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
#定义同步速率
syncer {
rate 1000M;
}
}
7-2.定义一个资源-->/etc/drbd.d/mysql.res
resource mysql {
on node1 {
device /dev/drbd0;
disk /dev/sdc5;
address 172.16.100.15:7789;
#internal表示将drbd自己的源数据放在drbd资源磁盘空间中
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdc5;
address 172.16.100.16:7789;
meta-disk internal;
}
}
![180920402243621.gif](https://i-blog.csdnimg.cn/blog_migrate/eb7a8d964bea64eba07be5b6b570a364.gif)
# scp /etc/drbd.d/* node2:/etc/drbd.d/
1)初始化资源,在Node1和Node2上分别执行:
# drbdadm create-md mysql
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
![180920408345034.gif](https://i-blog.csdnimg.cn/blog_migrate/f85e5f14c73266fcf6460cbc52c28437.gif)
2)启动服务,在Node1和Node2上分别执行:
#/etc/init.d/drbd start
3)查看启动状态:
# watch -nl "cat /proc/drbd"
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
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:b oos:505964
也可以使用drbd-overview命令来查看:
# drbd-overview
0:mysql Connected Secondary/Secondary Inconsistent/Inconsistent C r----
# drbdadm primary --force mysql
![180920378817536.gif](https://i-blog.csdnimg.cn/blog_migrate/0ebfd5590faafd609f25ac44f9aa8e04.gif)
# drbdadm --overwrite-data-of-peer primary mysql
而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview
0:mysql SyncSource Primary/Secondary UpToDate/Inconsistent C r----
[============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35
等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
# drbd-overview
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r----
7-5.创建文件系统-->
![180920408345034.gif](https://i-blog.csdnimg.cn/blog_migrate/f85e5f14c73266fcf6460cbc52c28437.gif)
# mke2fs -t ext4 -L DRBD /dev/drbd0
# mkdir /mydata
# mount /dev/drbd0 /mydata
对主Primary/Secondary模型的drbd服务来讲,在某个时刻
[只能有一个节点为Primary],因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:
Node1:创建测试文件到挂载点,并将其下线
# cd /mydata
# vi test
# date >> test
# cat test
Thu Mar 13 17:00:18 CST 2014
# cd .. && umount /test
# drbdadm secondary mysql --降级(下线)
查看状态:
# drbd-overview
0:mysql Connected Secondary/Secondary UpToDate/UpToDate C r----
Node2:将其上线,查看是否有文件存在
# drbdadm primary mysql --升级(上线)
# drbd-overview
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r----
# mkdir /mydata
# mount /dev/drbd0 /mydata
# ls /mydata
lost+found test
# cat test
Thu Mar 13 17:00:18 CST 2014
7-7.问题-->
![180920424272748.gif](https://i-blog.csdnimg.cn/blog_migrate/c1b541985674b64a1d0f1c3960b44ca0.gif)
0: State change failed: (-12) Device is held open by someone
![180920429433189.gif](https://i-blog.csdnimg.cn/blog_migrate/b3ce184e42879e3071cb3822cb170b45.gif)
![180920435217547.gif](https://i-blog.csdnimg.cn/blog_migrate/f741342b547600bb1ca6de4cf035d5c0.gif)
![180920438659274.gif](https://i-blog.csdnimg.cn/blog_migrate/a69826c7e9070ee18db04e255c970d9c.gif)
主节点上执行:
drbdadm connect all
从节点上执行:
drbdadm -- --discard-my-data connect all
drbdadm connect all
从节点上执行:
drbdadm -- --discard-my-data connect all