Drbd+heartbeat+Moosefs分布式存储双机冗余搭建

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.1vi /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.2vi /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.cf2个主机上的内容一样。

以下是需要打开的配置,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检测肯定通不过,但这时候并不能切换)


#采用bond0udp广播用来发送心跳信息

#bcast bond0


#采用网卡bond0udp单播来通知心跳,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认证文件authkeys2个主机上的内容一样。

vi /etc/ha.d/authkeys

auth 1

1 crc

#3 md5 Hello!

可以选择的是Md5的验证方式,

最后记得将authkeys  权限给为600

chmod 600 /etc/ha.d/authkeys



(6)、编辑haresources2个主机上的内容一样。

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, Linux2.6.14版本开始通过FUSE模块支持在用户空间实现文件系统

fuse-2.8.3.tar.gz

./configure

make && make install


编辑 /etc/ld.so.config 加入

include /usr/local/lib


命令行中:

#depmod -a


2、安装元服务器

切忌:用户的uidgid必须两台主备机一样,否则切换之后,起不来!!!!!!

(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    (两台metaserverHAip地址)

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, Linux2.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来启动,用户利用浏览器就可全面监控所有客户挂接,chunkservermasterserver,客户端的各种操作等等,绝对是个好工具。

在任何一台装有浏览器的机器上都可以查看:

                         http://10.64.5.1309425


你可能感兴趣的:(分布式存储双机冗余搭建)