环境:
CentOS6.5_x64,两块硬盘,用sdb1作drbd分区(sdb1建立好分区即可,不用格式化和挂载)
masternfs eth0:192.168.140.128 (heartbeat,drbd,nfs服务端)
backupnfs eth0:192.168.140.131 (heartbeat,drbd,nfs服务端)
VIP: 192.168.140.133
客户机:192.168.140.132 (nfs客户端)
一、添加HOSTS记录(主备):
192.168.140.128 masternfs
192.168.140.131 backupnfs
二、安装DRBD(主备):
1、安装epel源:
1
|
rpm -ivh http:
//mirrors
.ustc.edu.cn
/fedora/epel/6/x86_64/epel-release-6-8
.noarch.rpm
|
2、安装依赖包:
1
|
yum
install
-y gcc gcc-c++
make
perl kernel-devel kernel-headers flex drbd84-utils kmod-drbd84
|
如果报错:Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
解决方法:编辑[epel]下的baseurl前的#号去掉,mirrorlist前添加#号
3、安装drbd:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
wget http:
//oss
.linbit.com
/drbd/8
.4
/drbd-8
.4.4.
tar
.gz
tar
xvf drbd-8.4.4.
tar
.gz
cd
drbd-8.4.4
.
/configure
--prefix=
/usr/local/drbd
--with-km
make
KDIR=
/usr/src/kernels/
`
uname
-r`/
make
install
mkdir
-p
/usr/local/drbd/var/run/drbd
cp
/usr/local/drbd/etc/rc
.d
/init
.d
/drbd
/etc/rc
.d
/init
.d/
chkconfig --add drbd
chkconfig drbd on
cp
drbd
/drbd
.ko
/lib/modules/
`
uname
-r`
/kernel/lib/
modprobe drbd
lsmod |
grep
drbd
|
如果modprobe drbd报错,可以用 yum install kernel* 方式来更新,需要重启系统,重新安装一次
4、配置DRBD
1
2
|
cd
/usr/local/drbd/etc/drbd
.d
mv
global_common.conf global_common.conf.bak
|
重新建立global_common.conf
1
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
|
global {
usage-count
yes
;
}
common {
protocol C;
disk {
on-io-error detach;
}
syncer {
rate 100M;
}
}
resource web {
on masternfs {
device
/dev/drbd0
;
disk
/dev/sdb1
;
address 192.168.140.128:7899;
meta-disk internal;
}
on backupnfs {
device
/dev/drbd0
;
disk
/dev/sdb1
;
address 192.168.140.131:7899;
meta-disk internal;
}
}
|
5、创建DRBD记录信息数据块
1
2
|
drbdadm create-md web
service drbd start
#(主备一起启动)
|
6、设置主备节点:
主:
1
|
drbdadm -- --overwrite-data-of-peer primary web
|
备:
1
|
drbdadm secondary web
|
7、格式化并挂载分区:
备:
1
2
3
|
[root@masternfs opt]
# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
mkfs.ext4: Wrong medium
type
while
trying to determine filesystem size
|
报错,因为不能在备上操作这块分区
主:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@backupnfs ~]
# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS
type
: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5241029 blocks
262051 blocks (5.00%) reserved
for
the super user
First data block=0
Maximum filesystem blocks=0
160 block
groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Writing inode tables:
done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information:
done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
|
8、测试:
主:
1
2
3
4
|
cd
/data/
mkdir
test
#建立一个文件夹,测试用
umount
/data
#卸载分区
drbdadm secondary web
#把本节点设为备节点
|
查看状态drbdadm role web,此时是显示两个secondary,然后把另外一个备节点设成主节点,看看刚刚建立的文件夹还在不在
备:
1
2
|
drbdadm primary web
#设成主节点
mount
/dev/drbd0
/data
#挂载分区
|
结果,test文件夹还在!
查看资源的连接状态
[root@node1 ~]# drbdadm cstate r1
Connected
资源的连接状态;一个资源可能有以下连接状态中的一种
StandAlone 独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况
Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的
Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams
Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空
BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空
NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空
ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空
TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空
WFConnection:等待和对等节点建立网络连接
WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包
Connected 连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态
StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS
StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID
WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS
WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID
WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT
SyncSource:以本节点为同步源的同步正在进行
SyncTarget:以本节点为同步目标的同步正在进行
PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步
PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步
VerifyS:以本地节点为验证源的线上设备验证正在执行
VerifyT:以本地节点为验证目标的线上设备验证正在执行
查看资源角色的命令
[root@node1 ~]# drbdadm role r1
Primary/Secondary (在前面为当前节点)
Parimary 主:资源目前为主,并且可能正在被读取或写入,如果不是双主只会出现在两个节点中的其中一个节点上
Secondary 次:资源目前为次,正常接收对等节点的更新
Unknown 未知:资源角色目前未知,本地的资源不会出现这种状态
查看硬盘状态
[root@node1 ~]# drbdadm dstate r1
UpToDate/UpToDate
本地和对等节点的硬盘有可能为下列状态之一:
Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离
Attaching:读取无数据时候的瞬间状态
Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘
Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态
Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态
Outdated:数据资源是一致的,但是已经过时
DUnknown:当对等节点网络连接不可用时出现这种状态
Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated
UpToDate:一致的最新的数据状态,这个状态为正常状态
查看同步进度
[root@node1 ~]# cat /proc/drbd 或者 执行/usr/local/drbd/sbin/drbd-overview
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-04-24 20:16:24
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:2767088 nr:0 dw:0 dr:2774680 al:0 bm:168 lo:0 pe:1 ua:7 ap:0 ep:1 wo:f oos:18202972
[=>..................] sync'ed: 13.3% (17776/20476)M
finish: 0:12:59 speed: 23,344 (22,492) K/sec
由此可见:进度已经完成了13.3%,传输速度大概22M/S
注:
ds是磁盘状态信息
dw是磁盘写信息
dr是磁盘读信息
三、安装NFS:
1
2
3
4
5
6
7
8
|
yum -y
install
nfs-utils rpcbind
cat
>
/etc/exports
<< EOF
/data
192.168.140.132
/24
(rw,no_root_squash)
#(IP为客户机的IP)
EOF
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on
|
四、安装配置Heartbeat
1
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
27
28
29
30
31
32
33
|
yum
install
heartbeat* -y
cd
/usr/share/doc/heartbeat-3
.0.4
cp
ha.cf authkeys haresources
/etc/ha
.d/
cd
/etc/ha
.d/
cat
> authkeys << EOF
auth 2
2 sha1 HI!
EOF
chmod
600 authkeys
cat
> ha.cf << EOF
logfile
/var/log/ha-log
logfacility local0
#如果未定义上述日志,默认写入/var/log/message
keepalive 2
#心跳间隔
deadtime 30
#死亡阀值
warntime 10
#警告时间
initdead 120
#首次启动heartbeat,等待多久才启动主服务资源
udpport 694
#连接端口
bcast eth0
#使用什么方式组织心跳,最好用ucast方式
auto_failback off
#当主节点故障恢复后,自动获取资源并取代从节点
node masternfs
#主节点主机名
node backupnfs
#备份节点主机名
ping
192.168.140.2
EOF
cat
> haresources << EOF
masternfs IPaddr::192.168.140.133
/24/eth0
drbddisk::web Filesystem::
/dev/drbd0
::
/data
::ext4 killnfsd
EOF
cat
> resource.d
/killnfsd
<< EOF
killall -9 nfsd ;
/etc/init
.d
/nfs
restart ;
exit
0
EOF
chmod
+x resource.d
/killnfsd
cp
/opt/drbd-8-4
.4
/scripts/drbddisk
/etc/ha
.d
/resource
.d/
#源码包找到drbddisk脚本
chmod
755
/etc/ha
.d
/resource
.d
/drbddisk
service heartbeat start
|
遇到报错:
heartbeat: udpport setting must precede media statementsheartbeat[2244]: 2016/01/28_17:38:57 ERROR: Bad permissions on keyfile [/etc/ha.d//authkeys], 600 recommended.
heartbeat[2244]: 2016/01/28_17:38:57 ERROR: Authentication configuration error.
heartbeat[2244]: 2016/01/28_17:38:57 ERROR: Configuration error, heartbeat not started.
解决办法:
chmod 600 authkeys
报错:
ResourceManager(default)[2251]: 2016/01/27_23:44:39 ERROR: Cannot locate resource script drbddisk
解决办法:
cd /opt/drbd-8.4.4
cp scripts/drbddisk /etc/ha.d/resource.d/
chmod 755 /etc/ha.d/resource.d/drbddisk
主备都启动heartbeat后,看看VIP是否能PING通,然后再做一下故障测试看看IP是否会自动迁移,及drbd分区是否会自动挂载,nfs功能是否正常。
美中不足:虽然能自动切换,但是切换时会先造成nfs客户端一小阵子卡住
本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1740491如需转载请自行联系原作者
lihuipeng