HA-DRBD
DRBD(Distributed Replicated Block Device),DRBD 号称是 “网络 RAID”,开源软件,由LINBIT 公司开发。DRBD实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。他有内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID-1的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在文件系统中。本地节点与远程节点的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
我的理解就是,高可用集群各节点之间数据同步的配置,接下来,就让我们开始动手操作吧!
安装DRBD
在server1和server2上下载并安装DRBD
下载并解压:
1 | [root@server1 drbd]# lftp 172.25.9.250 |
解决依赖软件包及做rpm包的工具:
1 | [root@server1 drbd-8.4.3]# yum install gcc flex rpm-build -y |
编译:
1 | [root@server1 drbd-8.4.3]# ./configure --enable-spec --with-km |
编译完成之后,dbrb-8.4.3
目录里面会多出文件drbd.spec
,现在要根据这些文件来生成rpm包
生成rpm包
1 | [root@server1 drbd-8.4.3]#rpmbulid -bb drbd.spec |
查看并安装
1 | [root@server1 x86_64]# pwd |
将生成rpm包直接传给server2,安装:
1 | [root@server2 ~]# mkdir drbd |
配置DRBD
在server1和server2上都添加一个磁盘作为底层存储
可以是一块普通的磁盘,也可以是lvm,我做的两个磁盘大小都是4G
配置DRBD的配置文件1
2
3
4
5[root@server1 drbd.d]# cat /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";
从drbd的配置文件中可得到新文件必须以.res
结尾,且在/etc/drbd.d
目录下
1.创建文件mysqldata.res1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26[root@server1 drbd.d]# pwd
/etc/drbd.d
[root@server1 drbd.d]# vim mysqldata.res
[root@server1 drbd.d]# cat mysqldata.res
resource mysqldata
{
meta-disk internal;
device /dev/drbd1;
syncer
{
verify-alg sha1;
}
# 每个主机的说明以"on"开头,后面是主机名
on server1.example.com
{
disk /dev/vda;
address 172.25.9.1:7789;
}
on server2.example.com
{
disk /dev/vda;
address 172.25.9.2:7789;
}
}
2.创建供DRBD记录信息的数据块(两台机子上都做)1
2
3
4
5[root@server1 drbd.d]# drbdadm create-md mysqldata
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
3.启动drbd服务(两台机子上都做)1
[root@server1 drbd.d]# /etc/init.d/drbd start
启动drbd服务之后:1
2
3
4
5
6[root@server1 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@server1.example.com, 2016-02-24 18:37:31
1: 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:f oos:4194140
指定master设备
补充:
单主模式:使用最广的一种,主要用于高可用集群,解决群众数据共享的问题。这种情况下,只有一个主用节点能进行读写操作,可以用在此模式下的文件系统有ext3,ext4,xfs等
双主模式:主要用于数据共享和群众,解决数据共享和一致性问题。由于集群中多个主用节点,所以每个主用节点都有可能进行读写,并发的,单一的文件系统无法解决此问题。需要使用共享的集群文件系统来解决此问题,如:GFS,OCFS2等,通过集群文件系统的锁机制来解决并发问题
1.第一次使用drbd时要指定主设备1
2
3
4
5
6
7
8
9[root@server1 drbd.d]# drbdsetup /dev/drbd1 primary --force
[root@server1 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@server1.example.com, 2016-02-24 18:37:31
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:259624 nr:0 dw:0 dr:262808 al:0 bm:15 lo:0 pe:1 ua:3 ap:0 ep:1 wo:f oos:3935068
[>...................] sync'ed: 6.3% (3935068/4194140)K
finish: 0:02:46 speed: 23,552 (23,552) K/sec
等到sync’ed到达百分百的时候,指定就完成了,此时的server2是secondary1
2
3
4
5
6[root@server2 ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@server1.example.com, 2016-02-24 18:37:31
1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:4194140 dw:4194140 dr:0 al:0 bm:256 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
【注】在以后的使用中,若再想把server2设置为primary时,使用此命令:
[root@server2 ~]# drbdadm primary mysqldata
挂载设备
只有主设备挂载drbd1这个设备,在主设备上写的数据才能同步到备用设备上
serevr1:1
2
3
4
5
6
7[root@server1 drbd.d]# mkfs.ext4 /dev/drbd1 #格式化(此步骤只能在主设备上完成)
[root@server1 drbd.d]# mount /dev/drbd1 /mnt/
[root@server1 drbd.d]# cd /mnt/
[root@server1 mnt]# echo hello,server1 > serevr1
[root@server1 mnt]# cd
[root@server1 ~]# umount /mnt/
[root@server1 ~]# drbdadm secondary mysqldata #改变主设备
server2:1
2
3
4[root@server2 ~]# mount /dev/drbd1 /mnt/
[root@server2 ~]# cd /mnt/
[root@server2 mnt]# ls #此时,可以看到数据已同步
lost+found serevr1
其他知识点:
如果做实验时用的是lvm做底层存储的。
拉伸lvm时的步骤:
lvmextent——> drbdadm resize ——> resize2fs
1 | [root@server2 mnt]# lvextend -l +200 /dev/cluster/demo |