Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10222377
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 系统运维

2013-12-27 11:03:55

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 {

 protocol C;

 net {

    after-sb-0pri disconnect;

    rr-conflict disconnect;

  }

   on test-104 {

        device    /dev/drbd1;

        disk      /dev/sdb1;

        address   10.64.5.104:7898;

        meta-disk  internal;

        }

   on test-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-11 17:35:20

 

 1: cs:Connected st:Secondary/Primary ds:UpToDate/UpToDate C r---

    ns:0 nr: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 other messages 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::r0 Filesystem::/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)、

export KG_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)、

export KG_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

export KG_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)、modprobe fuse

 (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及master server,客户端的各种操作等等,绝对是个好工具。

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

                          :9425


阅读(1389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~