Drbd+heartbeat+Moosefs分布式存储双机冗余搭建
一、软件:
drbd-8.2.1.tar.gz
heartbeat-2.1.3.tar.tar
libnet-1.1.2.1-2.rf.x86_64.rpm
fuse-2.8.3.tar.gz
mfs-1.6.11.tar.gz
服务器:
10.64.5.104 主drbd mfsmaster
10.64.5.105 备drbd mfsmaster
10.64.5.106 分布式存储服务器
10.64.5.123 分布式存储服务器
10.64.5.124 Client端服务器
二、DRBD安装:
1、编译:
tar -zxvf drbd-8.2.1.tar.gz
make KDIR=/usr/src/linux
make install
检查是否生成了相应的文件:/etc/drbd.conf ; /etc/init.d/drbd ; 以及./drbd/drbd.ko
加载安装drbd模块
# modprobe drbd
通过lsmod检查是否已经成功
#lsmod |grep drbd
如果有,则表示成功了
2、创建drbd相应的设备
下面就来开始创建相应的drbd相关的设备及相应的配置
配置如下:
2.1、vi /etc/drbd.conf
global { usage-count yes; }
common { syncer { rate 50M; } }
resource r0 {
protocolC;
net {
after-sb-0pri disconnect;
rr-conflict disconnect;
}
ontest-104 {
device /dev/drbd1;
disk /dev/sdb1;
address 10.64.5.104:7898;
meta-disk internal;
}
ontest-105 {
device /dev/drbd1;
disk /dev/sdb1;
address 10.64.5.105:7898;
meta-disk internal;
}
}
2.2、vi /etc/hosts
10.64.5.104 test-104
10.64.5.105 test-105
more /proc/drbd
drbdsetup /dev/drbd1 primary -o
# 是否参加DRBD使用者统计.默认是yes
global { usage-count yes; }
# 设置主备节点同步时的网络速率最大值,单位是字节.
common { syncer { rate 1M; } }
# 一个DRBD设备(即:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的
# 相关信息.
#
resource r0 {
# 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
protocol C;
net {
# 设置主备机之间通信使用的信息算法.
cram-hmac-alg sha1;
shared-secret"FooFunFactory";
}
# 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
on g105-1 {
# /dev/drbd1使用的磁盘分区是/dev/hdb1
device /dev/drbd1;
disk /dev/hdb1;
# 设置DRBD的监听端口,用于与另一台主机通信
address 10.0.1.2:7898;
meta-disk internal;
}
on g105-2 {
device /dev/drbd1;
disk /dev/hdb1;
address 10.0.2.2:7898;
meta-disk internal;
}
}
3、命令:
3.1、创建供DRBD记录信息的数据块.分别在两台主机上执行:
drbdadm create-md r0
3.2、启动:
/etc/init.d/drbd start
3.3、查看状态:
cat /proc/drbd
由于DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据.所以,我们需要初始化,在test-104上执行:
drbdsetup /dev/drbd1 primary -o
3.4、主备机切换:
test-104:
drbdadm secondary r0
test-105:
drbdadm primary r0
3.5、格式化drbd分区并挂载:
mke2fs /dev/drbd1
(1)、现在可以把主test-104上的DRBD设备挂载到/opt/test目录上进行使用;
(2)、备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作。
more /proc/drbd
version: 8.2.1(api:86/proto:86-87)
GIT-hash:318925802fc2638479ad090b73d7af45503dd184 build by root@test-105, 2010-01-1117:35:20
1:cs:Connected st:Secondary/Primary ds:UpToDate/UpToDate C r---
ns:0nr:1645688 dw:1645688 dr:0 al:0 bm:88 lo:0 pe:0 ua:0 ap:0
resync: used:0/31 hits:29120 misses:88 starving:0 dirty:0 changed:88
act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
Field 说明值:
cs 连接状态出现的值:
o Unconfigured:设备在等待配置。
o Unconnected:连接模块时的过渡状态。
o WFConnection:设备等待另一测的配置。
o WFReportParams:过渡状态,等待新TCP 连接的第一个数据包时。.
o SyncingAll:正将主节点的所有模块复制到次级节点上。.
o SyncingQuick:通过复制已被更新的模块(因为现在次级节点已经离开了集群)来更新次级节点。
o Connected:一切正常。
o Timeout:过渡状态。
st 状态(设备的作用)可能的值为:
o 本地/远程一级状态
o 二级状态
o 未知(这不是一种作用)
ns 网络发送模块号码
nr 网络接收模块号码
dw 磁盘写入模块号码
dr 磁盘读取模块号码
of 运行中(过时的)模块号码
pe 待解决的模块号码
ua 未答复的模块号码(最好为0)
[root@manager /]# mount /dev/drbd1 /opt/data
[root@manager /]# df -h
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/drbd1 9.9G 1001M 8.4G 11% /opt/data
现在把之前备份的/opt/data中的所有内容再恢复回去。
如果不使用heartbeat的情况下,DRBD只能手工切换主从关系
现在修改heartbeat的配置文件,使DRBD可以通过heartbeat自动切换
三、heartbeat安装部署:
两台机器上的公共操作:
(1)、创建用户和用户组:
groupadd -g 800 haclient
useradd -g haclient -u 800 hacluster
(2)、
rpm -ivh libnet-1.1.2.1-2.rf.x86_64.rpm
(3)、
tar -zxvf heartbeat-2.1.3.tar.gz
cd heartbeat-2.1.3
./configure 或者 ./ConfigureMe configure
make && make install
cp doc/ha.cf /etc/ha.d/
cp doc/haresources /etc/ha.d/
cp doc/authkeys /etc/ha.d/
(4)、编辑hertbeat主配置文件ha.cf,2个主机上的内容一样。
以下是需要打开的配置,ha.cf里面有详细说明。
vi /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfacility local0
keepalive 2
deadtime 5
warntime 10
initdead 10
ucast eth0 10.64.5.105 #在两台机器上的内容是不一样的,都是指向对方的ip地址
auto_failback off
node test-104
node test-105
ping 10.64.7.254
respawn hacluster/usr/lib64/heartbeat/ipfail 或者/usr/local/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
## ha的日志文件记录位置。如没有该目录,则需要手动添加
logfile /var/log/ha-log #File to write othermessages to
logfacility local0 #这个是设置heartbeat的日志,这里是用的系统日志
##设定心跳(监测)时间时间为2秒
keepalive 2 #多长时间检测一次
warntime 5 #连续多长时间联系不上后开始警告提示
deadtime 20 #连续多长时间联系不上后认为对方挂掉了(单位是妙)
initdead 120 #这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)
#采用bond0的udp广播用来发送心跳信息
#bcast bond0
#采用网卡bond0的udp单播来通知心跳,ip应为对方IP,建议采用单播。当一个网段有多台这样cluster话,则一定要采用单播,否则每组cluster都会看到对方的节点,从而报错。
ucast bond0 172.18.57.154
##使用udp端口694 进行心跳监测
udpport 694
auto_failback off #恢复正常后是否需要再自动切换回来,一般都设为off。
##节点1,必须要与uname -n 指令得到的结果一致。
node alsme_probe3
##节点2
node alssme_probe4
##通过ping 网关来监测心跳是否正常
ping 172.18.158.254
hopfudge 1
deadping 5
#指定和heartbeat一起启动、关闭的进程#respawn hacluster /usr/local/lib64/heartbeat/ipfail
#apiauth ipfail gid=haclient uid=hacluster
#是否采用v2 style模式,在三节点以上时一定要打开
#crm on
(5)、编辑hertbeat认证文件authkeys,2个主机上的内容一样。
vi /etc/ha.d/authkeys
auth 1
1 crc
#3 md5 Hello!
可以选择的是Md5的验证方式,
最后记得将authkeys 权限给为600
chmod 600 /etc/ha.d/authkeys
(6)、编辑haresources,2个主机上的内容一样。
vi /etc/ha.d/haresources
test-104 drbddisk::r0Filesystem::/dev/drbd1::/testdata 10.64.5.130 mfsmaster
第一个字段是主机名,是uname -a得到的
第二个字段作用是当前主机设置为primary
第三个字段作用定义挂载文件系统,将/dev/drbd1 mount到/testdata目录上
第四个字段作用是启动VIP
第五个字段启动mfsmaster进程
(7)、分配权限:
chgrp haclient /sbin/drbdsetup
chmod o-x /sbin/drbdsetup
chmod u+s /sbin/drbdsetup
chgrp haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+s /sbin/drbdmeta
(8)、启动heartbeat
/etc/init.d/heartbeat start
四、Moosefs安装部署:
1、安装 Fuse 首先要安装Fuse, Linux从2.6.14版本开始通过FUSE模块支持在用户空间实现文件系统
fuse-2.8.3.tar.gz
./configure
make && make install
编辑 /etc/ld.so.config 加入
include /usr/local/lib
命令行中:
#depmod -a
2、安装元服务器
切忌:用户的uid和gid必须两台主备机一样,否则切换之后,起不来!!!!!!
(1)、创建用户:
groupadd -g 65534 mfs
useradd -u 65534 -g mfs -s /bin/false -d/home/mfs mfs
(2)、
exportKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
tar -zxvf mfs-1.6.11.tar.gz
./configure --prefix=/opt/data/mfs--with-default-user=mfs --with-default-group=mfs
make && make install
(3)、安装必要文件
cd /opt/data/mfs/etc
touch mfsmaster.cfg
touch mfsexports.cfg
mkdir -p /opt/data/mfs/var/mfs/data
cp /opt/data/mfs/var/mfs/metadata.mfs.empty/opt/data/mfs/var/mfs/data/metadata.mfs----文件必须这么生成!!
chown -R mfs. /opt/data
(4)、配置/opt/data/mfs/etc/mfsmaster.cfg
WORKING_USER = mfs
WORKING_GROUP = mfs
EXPORTS_FILENAME =/opt/data/mfs/etc/mfsexports.cfg
LOCK_FILE = /opt/data/mfs/var/mfsmaster.pid
DATA_PATH = /opt/data/mfs/var/mfs/data
SYSLOG_IDENT = mfsmaster
BACK_LOGS = 50
REPLICATIONS_DELAY_INIT = 300
REPLICATIONS_DELAY_DISCONNECT = 3600
MATOCS_LISTEN_HOST = *
MATOCS_LISTEN_PORT = 9420
MATOCU_LISTEN_HOST = *
MATOCU_LISTEN_PORT = 9421
CHUNKS_LOOP_TIME = 300
CHUNKS_DEL_LIMIT = 100
CHUNKS_REP_LIMIT = 15
(5)、配置输出控制文件/opt/data/mfs/etc/mfsexports.cfg
* . rw
10.64.5.124 / rw,alldirs,maproot=0
(6)、启动mfs
/opt/data/mfs/sbin/mfsmaster start
(7)、定制hearbeat的启动文件mfsmaster
vi /etc/init.d/mfsmaster
/opt/data/mfs/sbin/mfsmaster start
chmod 755 /etc/init.d/mfsmaster
3、安装chunkserver块服务器:(建议chunkserver使用2-3个副本)
(1)、创建用户:
groupadd -g 65534 mfs
useradd -u 65534 -g mfs -s /bin/false -d/home/mfs mfs
(2)、
exportKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
tar -zxvf mfs-1.6.11.tar.gz
./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfsmaster--disable-mfsmount
make && make install
(3)、安装必要文件
cd /usr/local/mfs/etc
touch mfschunkserver.cfg
touch mfshdd.cfg
chown -R mfs. /usr/local/mfs
数据目录:
mkdir /data
mount /dev/sdb1 /data
chown -R mfs. /data
(4)、配置主配置文件mfschunkserver.cfg及共享磁盘配置文件mfshdd.cfg
vi mfschunkserver.cfg
WORKING_USER = mfs
WORKING_GROUP = mfs
DATA_PATH = /usr/local/mfs/var/mfs
LOCK_FILE =/usr/local/mfs/var/mfs/mfschunkserver.pid
SYSLOG_IDENT = mfschunkserver
BACK_LOGS = 50
MASTER_RECONNECTION_DELAY = 30
MASTER_HOST = 10.64.5.130 (两台metaserver的HAip地址)
MASTER_PORT = 9420
MASTER_TIMEOUT = 60
CSSERV_LISTEN_HOST = *
CSSERV_LISTEN_PORT = 9422
CSSERV_TIMEOUT = 60
CSTOCS_TIMEOUT = 60
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
vi mfshdd.cfg
/data
#/data2
4、安装Client服务器:
(1)、安装 Fuse 首先要安装Fuse, Linux从2.6.14版本开始通过FUSE模块支持在用户空间实现文件系统
fuse-2.8.3.tar.gz
./configure
make && make install
编辑 /etc/ld.so.config 加入
include /usr/local/lib
命令行中:
#depmod -a
2、安装Client服务器:
(1)、创建用户:
groupadd -g 65534 mfs
useradd -u 65534 -g mfs -s /bin/false -d/home/mfs mfs
(2)、
(1)、vi /etc/profiles source/etc/profiles
exportKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
(2)、yum install fuse* -------经测试,这条必须执行,否则client端根本无法安装mfsmount命令
tar -zxvf mfs-1.6.11.tar.gz
./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs --disable-mfsmaster--enable-mfsmount
make && make install
(3)、modprobefuse
(4)、创建挂载目录
mkdir -p /opt/test/data
(5)、Client端启动挂载:
/usr/local/mfs/bin/mfsmount -H 10.64.5.130/opt/test/data
五、监控界面:
对mfscgiserv的使用
Mfscgiserv是用python编写的一个web服务器,它的监听端口是9425,
可以利用:
/opt/data/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可全面监控所有客户挂接,chunkserver及masterserver,客户端的各种操作等等,绝对是个好工具。
在任何一台装有浏览器的机器上都可以查看:
http://10.64.5.130:9425