两个节点,一主一次:Host1、Host2
节点环境
(1)确保系统中DRBD Module已加载
Step 1. 检查系统中是否加载DRBD Module
# lsmod | grep drbd
返回结果,则标明DRBD模块已加载,跳过第2、3步;否则,继续第2步。
Step 2. 检查系统中是否存在DRBD Module
# modprobe drbd
不返回结果,则表明DRBD模块存在且已加载成功,跳过第3步;否则继续第3步。
Step 3. 安装DRBD Module
方案1: 从http://drbd.linbit.com/download/packages/下载二进制包进行安装
方案2:从http://oss.linbit.com/drbd/ 下载源码包进行安装。
(a)源码包在8.4.5之前,下载drbd-****.tar.gz,解压到/usr/src/,在解压后的目录下,执行下列命令
#./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-km
#make
#make install
(b)源码包在8.4.5版本后, User Space Tools从内核包中分离出来了。执行下列命令
#make
#make install
注意: ./configure 命令配置生成makefile的参数详细参见: http://drbd.linbit.com/users-guide-8.4/s-build-from-source.html
(2)安装 User Space Tools
方案 1. 从http://drbd.linbit.com/download/packages/下载二进制包进行安装
方案2. 从http://oss.linbit.com/drbd/ 下载源码包进行安装。
(a) 安装8.4.5之前的版本。
如果自己动手安装过DRBD Module,则此不需要再次安装;否则,在解压后的目录下执行下列命令
#./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
#make
#make install
(b) 安装8.4.5之后的版本。
下载drbd-utils-***.tar.gz,解压到/usr/src/,在解压后目录中执行下列命令
# ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
# make
# make install
(3)配置 DRBD
Step 1. 配置底层存储
当你安装完DRBD后,你必须在两个集群节点上留下大小相同的存储区域。这将会成为DRBD资源的底层资源,你可以用任何类型的块设备用于此存储区域。
在两个Host上执行下述操作,且保证分区大小一致:
a)新追加一个磁盘,在/dev/中可查看到是sdb
b)对sdb进行分区
# fdisk /dev/sdb
输入n
输入p
输入分区号
输入开始簇号
输入+10G #####分区大小设定
输入w #####保存
# partx /dev/sdb1 #####查看内核是否已经识别新分区,不识别需要重新启动
Step 2. 配置网络
建议使用专用的连接来运行DRBD,不推荐使用路由器是因为它明显的影响了系统性能(包括吞吐量和延迟等造成等不良影响)。就防火墙而言,DRBD使用TCP端口从7788开始,并且每一个资源监听都使用一个独立的端口,DRBD使用两个TCP连接配置资源。为了正常使用DRBD功能,这些连接需要能通过防火墙。
a) 设置主机名、以及 ip地址及主机名的对应关系。
在两个Host上均执行下述操作:
/etc/hostname 中将Host1的主机名修改为node1.localdomain,将Host2的主机名修改为node2.localdomain。
将下列两行追加到Host1和Host2的/etc/hosts 文件中:
193.160.11.30 node1.localdomain
193.160.11.107 node2.localdomain
最终保证,两个Host之间可以互相通过主机名ping通对方。
b)关闭防火墙或者设置防火墙允许端口7789。
方案1:关闭防火墙(安全性低)
CentOS7默认使用firewalld,则执行命令
#systemctl stop firewalld ,
如果已禁用firewalld而启用了iptables,则执行 命令 #systemctl stop iptables
方案2:设置防火墙允许端口7789
firewalld:
Step1. 执行firewall-cmd --permanent --add-port=7789/tcp
Step2. systemctl restart firewalld
iptables:
Step1. 在/etc/sysconfig/iptables和/etc/sysconfig/ip6tables文件中找到22端口所在行下方添加与22端口行一致的数据,将—dport参数值更改为7789
Step2. systemctl restart iptables
Step 3. 配置DRBD资源
1. 编辑/etc/drbd.conf并添加下面内容
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
一般/etc/drbd.d/global_common.conf 文件中包含有DRBD共同配置的部分,而.res文件则包含每一个资源特有的部分。也有可能仅使用drbd.conf文件作为配置文件。
2. 编辑/etc/drbd.d/global_common.conf文件,添加如下内容:
# sudo vim /etc/drbd.d/global_common.conf
global { usage-count yes; }
common {
protocol C;
handlers { }
startup {
wfc-timeout 300;
degr-wfc-timeout 300;
outdated-wfc-timeout 2000;
}
disk { on-io-error detach; }
net {
cram-hmac-alg "sha1";
shared-secret "vsm";
}
syncer { rate 100M; }
}
3. 编辑/etc/drbd.d/*.res文件,添加如下内容
# sudo vim /etc/drbd.d/*.res
resource r0 {
meta-disk internal;
device /dev/drbd0;
on node1.localdomain {
disk /dev/sdb1;
address 193.160.11.30:7789;
}
on node2.localdomain {
disk /dev/sdb1;
address 193.160.11.107:7789;
}
}
1.给两个节点都创建DRBD设备并启动资源
创建DRBD设备并启动资源
# drbdadm create-md r0
# drbdadm up r0启动DRBD服务
# service drbd start
查看DRBD状态
方法一:#drbd-overview方法二:#cat /proc/drbd
2.将其中一个节点设置为Primary
DRBD第一次设置主节点时,需要使用--force参数来初始化设备同步,之后切换节点则不在需要
#drbdadm primary r0
#drbd-overview0:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C r---n-
[=============>......] sync'ed: 70.6% (310268/1044092)K过一段时间后再次执行
#drbd-overview
0:r0 Connected Primary/Secondary UpToDate/UpToDate
3. 在Primary节点上格式化/dev/drbd0,挂载到指定目录上,往该目录写入文件
# mkfs.ext4 /dev/drbd0
# cd /mnt
# mkdir test
# mount /dev/drbd0 /mnt/test
# echo “This is a test.” >> test.txt
4. 将Primary节点更改为Secondary节点
# umount /dev/drbd0 ####这一步很重要
# drbdadm secondary r0
5. 将Secondary节点更改为Primary节点
# drbdadm primary r0
# cd /mnt
# mkdir test
# mount /dev/drbd0 /mnt/test
6. 确认当前的Primary节点下mnt/test目录下是否存在文件test.txt
# cd /mnt/test
错误一:启用resource后,使用drbd-overview查看后状态一直为” WFConnection Secondary/Unknown Inconsistent/DUnknown ”
A:防火墙不允许DRBD的端口号,可以关闭防火墙,或者开放DRBD的端口号。
错误二:启用resource后,使用drbd-overview查看后状态一直为” WFConnection Secondary/Secondary Diskless/Diskless ”
A:底层存储设置未检测到,可以执行命令:# drbdadm up r0
错误三:执行命令‘ #drbdadm secondary r0’报错,错误信息 “0: State change failed : (-12) Device is held open by someone….”
A:在执行这个命令前必须执行# umount /dev/drbd0
错误四:执行格式化/dev/drbd0时出错,错误信息为 ““mkfs.ext3: Wrong medium type while trying to determine filesystem size“
A:执行命令所在节点不是Primary节点,先将其设置未Primary节点,再进行格式化/dev/drbd0
错误五:执行mount /dev/drbd0时出错,错误信息为 “mount: block device /dev/drbd0 is write-protected, mounting read-only mount: Wrong medium type“
A:执行命令所在节点不是Primary节点,先将其设置未Primary节点,再进行mount /dev/drbd0
错误六:执行[root@mysql1 ~]# drbdadm create-md r0 出现如下错误
Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command 'drbdmeta 0 v08 /dev/sdb internal create-md' terminated with exit code 40
A:执行如下命令来zero out the device。
dd if=/dev/zero bs=1M count=1 of=/dev/sdb
然后在创建资源r0