生产环境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目录。