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

简介:

环境:

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


相关文章
|
2月前
|
存储 UED Windows
Windows服务器上大量文件迁移方案
Windows服务器上大量文件迁移方案
87 1
|
3月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
85 5
|
21天前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
26 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
14天前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
46 4
|
3月前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
139 1
Linux 服务器下载百度网盘文件
|
3月前
|
PHP
PHP遍历文件并同步上传到服务器
在进行网站迁移时,由于原网站的图片文件过多,采用打包下载再上传的方式耗时过长,且尝试使用FTP工具从旧服务器传输至新服务器时失败。为解决此问题,特使用PHP编写了一款工具,该工具能扫描指定目录下的所有`.webp`图像文件,并将其上传至新的服务器,极大地提高了迁移效率。
98 16
|
3月前
|
存储 安全 文件存储
【服务器数据恢复】Apple苹果Xsan文件系统卷宗误操作导致文件丢失数据恢复案例
客户因误操作删除了macOS服务器上的重要图片和视频文件,需紧急恢复。Xsan文件系统作为苹果专为高负载环境设计的64位簇文件系统,在未有专门恢复工具的情况下,常规RAW恢复仅能提取小部分连续存储的小文件,且无目录结构。通过专业的数据恢复流程,包括安全挂载、阵列重组,并使用专用工具解析文件系统以恢复目录结构,最终成功恢复丢失的文件。此案例突显了Xsan文件系统的特点及其恢复难度。
32 1
|
3月前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
58 0
|
3月前
|
Java
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型