生产环境DRBD部署安装

时间:2020-12-23 00:05:35

生产环境DRBD部署安装

一、部署前环境准备

说明:DRBD主备模式

1、防火墙关闭

2、selinux关闭

3、drbd服务网卡及IP资源配置

名称

接口

IP

用途

Master(主)

eth0(自管)

172.20.28.36

外网管理IP,用于WAN数据转发

eth1(受管)

192.168.1.36

用于服务器间心跳连接及数据同步

eth2(vip)

10.1.6.36

用于提供应用程序A挂载服务

Slave(备)

eth0(自管)

172.20.28.37

外网管理IP,用于WAN数据转发

eth1(受管)

192.168.1.37

用于服务器间心跳连接及数据同步

eth2(vip)

10.1.6.37

用于提供应用程序B挂载服务

 

4、drbd资源配置列表

主机名称

i-mye1r31k(主)

i-vzfkio3f(备)

管理IP

eth0:172.20.28.36

eth0:172.20.28.37

DRBD管理名称(资源名称)

data

data

DRBD挂载目录

/data

/data

DRBD逻辑设备

/dev/drbd0

/dev/drbd0

DRBD对接IP

eth1:192.168.1.36

eth1:192.168.1.37

DRBD Meta设备

/dev/sdb1[0]

/dev/sdb1[0]

DRBD存储设备

/dev/sdb2

/dev/sdb2

 

5、Hosts

[root@i-mye1r31k data]# cat /etc/hosts

192.168.1.36  i-mye1r31k

192.168.1.37  i-vzfkio3f

小结:此处的hosts解析,用的是心跳连接及数据同步的IP地址。

 

6、模拟生产环境:分别在两台服务器上准备两块2T需要挂载的磁盘/dev/sdb

DEVICE

Mount point

预期大小

作用

/dev/sdb1

Meta data分区

1G

存储drbd同步状态信息

/dev/sdb2

/data

2047G

存储全站图片数据

 

操作步骤:(以下操作分别在两台服务器上操作)

1、分别在两台服务器上的磁盘/dev/sdb,创建两分区

[root@i-mye1r31k ha.d]# partx /dev/sdb

 

2、刷新分区,通知内核。

[root@i-vzfkio3f ha.d]# partx /dev/sdb

 

3、格式化分区/dev/sdb2

[root@i-mye1r31k ha.d]# fdisk -l

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1025     1049584   83  Linux    #存储同步状态信息,

/dev/sdb2            1026       30720    30407680   83  Linux    #存储全站图片数据

 

[root@i-mye1r31k ha.d]# mkfs.ext4 /dev/sdb2  #/dev/sdc2是存储全站图片数据的分区,可以格式化

Writing inode tables: done                            

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 34 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

 

[root@i-mye1r31k ha.d]# mount /dev/sdb1  /mnt    #/dev/sdc1s是存储同步状态信息,不能格式化,直接挂载,出现如下提示,则表示正常。

mount: you must specify the filesystem type

 

 

小结:

1、这里的meta data(/dev/sdb1)分区一定不能格式化建立文件系统。

2、分好的分区现在不能进行挂载。

3、在生产环境中drbd meta data分区一般可设置为1-2G。

 

二、编译安装drbd

 

官网下载地址:https://www.linbit.com/en/drbd-community/drbd-download/

wget http://www.drbd.org/download/drbd/8.4/archive/drbd-8.4.4.tar.gz

 

字符集调整:[root@i-mye1r31k drbd-8.4.4]# export LC_ALL=C

内核安装:[root@i-mye1r31k drbd-8.4.4]# yum install kernel-devel -y

 

2.1、下载解压drbd包

[root@i-mye1r31k ~]# wget http://www.drbd.org/download/drbd/8.4/archive/drbd-8.4.4.tar.gz

[root@i-mye1r31k ~]# tar axf drbd-8.4.4.tar.gz

[root@i-mye1r31k ~]# cd drbd-8.4.4

 

2.2、编译安装drbd服务

[root@i-mye1r31k drbd-8.4.4]# ./configure --prefix=/opt/drbd-8.4.4 --with-km --with-heartbeat --sysconfdir=/etc/

 

[root@i-mye1r31k drbd-8.4.4]# ls -l /usr/src/kernel/$(uname -r)/

如果发现没有kernel,则需要安装:yum install kernel-devel -y

 

[root@i-mye1r31k drbd-8.4.4]#make KDIR=/usr/src/kernels/2.6.32-696.16.1.el6.x86_64/

[root@i-mye1r31k drbd-8.4.4]#make install

 

小结:

1、--with-km        #enable kernel moudle

2、--with-heartbeat #enable heartbeat integration(集成)

3、如果服务器重启,则需要重新启用drbd模块。

 

2.3、检查drbd是否被正确加载到内核

[root@i-mye1r31k ~]# lsmod | grep drbd

[root@i-mye1r31k ~]# modprobe drbd

[root@i-mye1r31k ~]# lsmod | grep drbd

drbd                  319501  0

lru_cache              8465   1 drbd

libcrc32c              1388   1 drbd

[root@i-mye1r31k ~]# echo "modprobe drbd" >> /etc/rc.local   #添加至开机启动

2.4、报错问题汇总

问题一:

[root@i-mye1r31k drbd-8.4.4]# modprobe drbd

FATAL: Module drbd not found.

解决:内核版本太低需要升级内核。具体升级过程,详情请参考我的文档centos6.4内核升级

问题二:

报错如下:configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option

解决:yum install flex -y

 

 

2.5 编辑drbd配置文件(此处是生产环境drbd配置,大家可以参考)

[root@i-vzfkio3f etc]# cat drbd.conf

global {

usage-count no;

}

 

common {

syncer {

rate 100M;

verify-alg crc32c;

}

}

 

resource data {

protocol C;

 

disk {

on-io-error detach;

}

 

on i-mye1r31k {

   device    /dev/drbd0;

   disk      /dev/sdb2;

   address   192.168.1.36:7788;

   meta-disk /dev/sdb1[0];

 }

 

        on i-vzfkio3f {

           device    /dev/drbd0;

           disk      /dev/sdb2;

           address   192.168.1.37:7788;

           meta-disk /dev/sdb1[0];

         }

}

1、usage-count no;

#DRBD用于统计应用各个版本的信息,建议关闭。

 

2、rate 100M;

#同步的网速,可以按照实际设置。

 

3、data

#资源的定义的名称,可随意设置。

 

4、protocol C;

#同步的协议C,表示实时同步

 

 

i-mye1r31k(主)

#表示主机名,可按照实际填写。

 

device /dev/drbd0;

#表示drbd的逻辑设备,一般建议设置为drbd0。

 

disk  /dev/sdb2;

#表示drbd的存储设备,此处是生产环境存放图片。

 

meta-disk /dev/sdb1[0];

#drbd meta设备

 

 

 

 

 

2.6 初始化drbd的metadata

[root@i-vzfkio3f etc]# drbdadm create-md data

DRBD module version: 8.4.5

   userland version: 8.4.4

you should upgrade your drbd tools!

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

 

2.7 启动drbd服务

[root@i-mye1r31k drbd-8.4.4]# drbdadm up data

DRBD module version: 8.4.5

   userland version: 8.4.4

you should upgrade your drbd tools!

/opt/drbd-8.4.4/var/run/drbd: No such file or directory

/opt/drbd-8.4.4/var/run/drbd: No such file or directory

Device '0' is configured!

Command 'drbdmeta 0 v08 /dev/sdb1 0 apply-al' terminated with exit code 20

 

[root@i-mye1r31k drbd-8.4.4]# mkdir -p /opt/drbd-8.4.4/var/run/drbd

 

2.8 查看两台服务器上drbd状态

 

[root@i-mye1r31k drbd-8.4.4]# cat /proc/drbd

version: 8.4.5 (api:1/proto:86-101)

srcversion: E5B188AA2E7FBFC9F82CDB4

 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:f oos:30407424

 

[root@i-vzfkio3f etc]# cat /proc/drbd

version: 8.4.5 (api:1/proto:86-101)

srcversion: E5B188AA2E7FBFC9F82CDB4

 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:f oos:30407424

 

小结:出现上述,则表明启动成功,因为现在是无主的状态,所以两边都是从。

 

分析:发生这种情况说明drbd发生裂脑了,产生的原因可能如下:

1、防火墙未关闭

2、两个服务器之间的心跳线可能出现问题(是否忘了添加静态路由)

解决如下:两台服务器都要添加:

route add -host 192.168.37 dev eth1(在192.168.1.36上添加)

route add -host 192.168.36 dev eth1(在192.168.1.37上添加)

 

2.9 同步drbd数据到对端server,使数据保持一致

 

说明:

1、如果为空硬盘,可以随意执行操作不需要考虑数据。

2、如果两边数据不一样(要特别注意同步数据的方向,否则可能会丢失数据)。

3、一个资源只能在一段执行同步数据到对端的命令。

 

[root@i-mye1r31k drbd-8.4.4]# drbdadm -- --overwrite-data-of-peer primary data

DRBD module version: 8.4.5

   userland version: 8.4.4

you should upgrade your drbd tools!

 

说明:在哪一端输入上述命令,那一端就为主的状态,可以通过cat /proc/drbd查看同步进度。

[root@i-mye1r31k drbd-8.4.4]# cat /proc/drbd

version: 8.4.5 (api:1/proto:86-101)

srcversion: E5B188AA2E7FBFC9F82CDB4

 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----

    ns:4925440 nr:0 dw:0 dr:4926104 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:25482240

[==>.................] sync'ed: 16.3% (24884/29692)M

finish: 0:10:13 speed: 41,520 (38,480) K/sec

 

同步成功后比较两端的状态信息

[root@i-mye1r31k drbd-8.4.4]# cat /proc/drbd        #master端

version: 8.4.5 (api:1/proto:86-101)

srcversion: E5B188AA2E7FBFC9F82CDB4

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:30407680 nr:0 dw:0 dr:30408344 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@i-vzfkio3f etc]# cat /proc/drbd               #slave端

version: 8.4.5 (api:1/proto:86-101)

srcversion: E5B188AA2E7FBFC9F82CDB4

 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

    ns:0 nr:30407680 dw:30407680 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

 

总结:如果出现secondary/unknown有可能是发生裂脑的结果。可尝试如下命令(官方介绍):

1、在从节点slave上做如下操作:

drbdadm secondary data

drbdadm -- --discard-my-data connect data

 

2、在主节点上,通过cat /proc/drbd查看状态,如果不是wfconnection状态,则需要手动连接

drdbadm connect data

cat /proc/drbd 查看两端状态

 

master端操作:

[root@i-mye1r31k drbd-8.4.4]# mkdir /data

[root@i-mye1r31k drbd-8.4.4]# mount /dev/drbd0  /data

[root@i-mye1r31k drbd-8.4.4]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              20G  1.4G   18G   8% /

tmpfs                 2.0G     0  2.0G   0% /dev/shm

/dev/drbd0             29G   44M   27G   1% /data

小结:在主的一端挂载的不是系统分区,而是逻辑的drbd设备,由drbd设备向文件系统写入。

 

slave端操作:

1、创建相同的目录data(也可以不一样)。

2、观察data目录文件变化。

[root@i-vzfkio3f data]# mount /dev/sdb2 /data/

mount: /dev/sdb2 already mounted or /data/ busy  

说明:这时发现/dev/sdb2设备无法挂载,原因是/dev/sdb2有挂载点了,不让你挂。

 

解决方法:

[root@i-vzfkio3f data]# drbdadm down data

[root@i-vzfkio3f data]# mount /dev/sdb2 /data/

[root@i-vzfkio3f data]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              20G  1.6G   18G   9% /

tmpfs                 2.0G     0  2.0G   0% /dev/shm

/dev/sdb2              29G   44M   27G   1% /data

 

观察/data目录下文件变化,发现master端所有的文件都同步过来了。

[root@i-vzfkio3f data]# cd /data/

[root@i-vzfkio3f data]# ls

1  10  11  12  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9  lost+found

[root@i-vzfkio3f data]# du -sh .

20K

小结:如果要查看master端和slave端文件是否同步,则需要停掉slave的数据,将/dev/sdb2挂载到本地的data目录。