当前位置: 首页 > 工具软件 > DRBD > 使用案例 >

drbd文件服务器搭建,DRBD+HeartBeat+NFS 搭建高可用文件共享服务器笔记

訾高飞
2023-12-01

环境:

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源:rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

2、安装依赖包: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: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、配置DRBDcd /usr/local/drbd/etc/drbd.d

mv global_common.conf global_common.conf.bak

重新建立global_common.confglobal {

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记录信息数据块drbdadm create-md web

service drbd start                    #(主备一起启动)

6、设置主备节点:

主:drbdadm -- --overwrite-data-of-peer primary web

备:drbdadm secondary web

7、格式化并挂载分区:

备:[[email protected] opt]# mkfs.ext4 /dev/drbd0

mke2fs 1.41.12 (17-May-2010)

mkfs.ext4: Wrong medium type while trying to determine filesystem size

报错,因为不能在备上操作这块分区

主:[[email protected] ~]# 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、测试:

主:cd /data/

mkdir test   #建立一个文件夹,测试用

umount /data   #卸载分区

drbdadm secondary web    #把本节点设为备节点

查看状态drbdadm role web,此时是显示两个secondary,然后把另外一个备节点设成主节点,看看刚刚建立的文件夹还在不在

备:drbdadm primary web        #设成主节点

mount /dev/drbd0 /data     #挂载分区

结果,test文件夹还在!

查看资源的连接状态

[[email protected] ~]# 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:以本地节点为验证目标的线上设备验证正在执行

查看资源角色的命令

[[email protected] ~]# drbdadm role r1

Primary/Secondary (在前面为当前节点)

Parimary 主:资源目前为主,并且可能正在被读取或写入,如果不是双主只会出现在两个节点中的其中一个节点上

Secondary 次:资源目前为次,正常接收对等节点的更新

Unknown 未知:资源角色目前未知,本地的资源不会出现这种状态

查看硬盘状态

[[email protected] ~]# 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:一致的最新的数据状态,这个状态为正常状态

查看同步进度

[[email protected] ~]# cat /proc/drbd 或者 执行/usr/local/drbd/sbin/drbd-overview

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

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 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:yum -y install nfs-utils rpcbind

cat > /etc/exports <

/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

四、安装配置Heartbeatyum 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 <

auth 2

2 sha1 HI!

EOF

chmod 600 authkeys

cat > ha.cf <

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 <

masternfs IPaddr::192.168.140.133/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/data::ext4 killnfsd

EOF

cat > resource.d/killnfsd <

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客户端一小阵子卡住

原文:http://lihuipeng.blog.51cto.com/3064864/1740491

 类似资料: