MooseFS安装及双机热备

MooseFS--分布式文件系统,它由4个部分组成:master、metalogge、chunkserver、client。

Master是mfs的大脑,记录着管理信息,比如:文件大小,存储的位置,份数等,这些信息被记录到metadata.mfs中,当该文件被载入内核后,该文件会重命名为metadata.mfs.back,当chunkserver上有更新时,master会定期将获得的新的信息回写到metadata.mfs.back中,保证元数据的可靠。因为内存中需要将metadata.mfs加载进来,这个文件的大小取决于你在chunkserver上存储的数据量,所以需要较大的内存,一般8g内存可以存下2500w文件数,84g可以存下2亿文件数。所以需要master具有较大的内存硬件要求。

Metalogger:mfs的备份,好比mysql中的主从备份结构。Metalogger会定期从master上将metadata、changlog、session类型的文件下载同步到本地目录下,并加后缀‘_mfs’将其重命名。

Chunkserver:数据存储地,文件以chunk大小存储,每个chunk最大为64M,小与64M的,该chunk大小为该文件大小,超过64M的文件将被均分,每一份(chunk)的大小以不超过64M为原则,文件可以有多份copy,这份copy会被随机存储到一台chunkserver上,当goal为1时,表示只有一份copy,这份copy会被随机存储到一台chunkserver上,当goal值大于1时,每一份copy会被随机分别保存到其他的chunkserver上。一般官方建议goal值不超过3.这样如果有一台chunkserver宕机了,至少还有一份copy,当这台又被加进来后,会将失去的那份copy补回来,始终保持原有的copy数。Chunkserver上剩余存储空间要大于1gb,新的数据才会被允许写入,否则,你会看到no space left on device的提示,

Client:将:客户端通过内核加载的FUSE模块,再通过和master的沟通,将chunkserver共享的分区挂载到本地,然后进行读写操作。

下面是mfs的读写原理:

#yum install -y rpm-build.x86_64

#cp mfs-1.6.27-5.tar.gz rpmbuild/SOURCES/

#cd  rpmbuild/SOURCE

#mv mfs-1.6.27-5.tar.gz mfs-1.6.27.tar.gz

# yum install -y fuse-devel zlib-devel  gcc

#rpmbuild -tb mfs-1.6.27.tar.gz

#cd  /root/rpmbuild/RPMS/x86_64

#yum install -y mfs-master-1.6.27-4.x86_64.rpm mfs-cgi-1.6.27-4.x86_64.rpm mfs-cgiserv-1.6.27-4.x86_64.rpm

#cd /etc/mfs/

#  cp mfsexports.cfg.dist mfsexports.cfg

#  cp mfsmaster.cfg.dist mfsmaster.cfg

#  cp mfstopology.cfg.dist mfstopology.cfg

#cd /var/lib/mfs

#cp metadata.mfs.empty metadata.mfs

#chown  nobody   .  -R

#cd  /usr/share/mfscgi/

#chmod  +x    *.cgi

#mfsmaster start            #启动 master server

#mfscgiserv start        #启动 CGI 监控服务

#在浏览器地址栏输入 http://172.25.45.1:9425 即可查看 master 的运行情况

Mfschunkserver服务器; (两台mfschunkserver进行同样的操作)

#yum install -y mfs-chunkserver-1.6.27-4.x86_64.rpm

#cd /etc/mfs/

#cp mfschunkserver.cfg.dist mfschunkserver.cfg

#cp mfshdd.cfg.dist  mfshdd.cfg

#mkdir /var/lib/mfs

#chown nobody  /var/lib/mfs

#vim mfshdd.cfg

/mnt/chunk

# mkdir chunk

#chown nobody chunk

#vim /etc/hosts  ---->需要解析mfsmaster ,在master主机名后面加上mfsmaster

#mfschunkserver start

在FIREFOX中继续验证添加的存储块设备。

Client端:

#yum install -y mfs-client-1.6.27-4.x86_64.rpm

#cd /etc/mfs/

#cp mfsmount.cfg.dist mfsmount.cfg

#vim mfsmount.cfg        #定义客户端默认挂载

/mnt/mfs

#mkdir /mnt/mfs

#mfsmount

######MFS 测试,在 MFS 挂载点下创建两个目录,并设置其文件存储份数:

#cd /mnt/mfs/

#mkdir dir1 dir2

#cd dir2/

#mfssetgoal -r 2 .

#设置在 dir2 中文件存储份数为两个,默认是一个

对一个目录设定“goal”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的 copy 份数。但使用-r 选项可以更改已经存在的 copy 份数。

拷贝同一个文件到两个目录

# cp /etc/passwd dir1# cp /etc/passwd dir2

查看文件信息

# mfsfileinfo dir1/passwd

dir1/passwd:

chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

copy 1: 172.25.45.2:9422

# mfsfileinfo dir2/passwd

dir2/passwd:

chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

copy 1: 172.25.45.2:9422

copy 2: 172.25.45.3:9422

关闭 mfschunkserver2 后再查看文件信息

# mfsfileinfo dir1/passwd

dir1/passwd:

chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

no valid copies !!!

# mfsfileinfo dir2/passwd

dir2/passwd:

chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

copy 1: 172.25.45.2:9422

启动 mfschunkserver2 后,文件回复正常。

快照

MooseFS 系统的另一个特征是利用 mfsmakesnapshot 工具给文件或者是目录树做快照:

# mfsmakesnapshot source ... destination

Mfsmakesnapshot 是在一次执行中整合了一个或是一组文件的拷贝,而且任何修改这些文件的源文件都不会影响到源文件的快照, 就是说任何对源文件的操作,例如写入源文件,将不会修改副本(或反之亦然)。

文件快照可以用 mfsappendchunks,例如:

# mfsappendchunks destination-file source-file ...

当有多个源文件时,它们的快照被加入到同一个目标文件中(每个 chunk 的最大量是 chunk)

master 端:

断网、杀掉 MFS 的 master 服务对 MFS 系统无影响。断电可能会出现以下的情况:#当没有文件传输时,可在服务器重启之后,运行 mfsmetarestore –a 进行修复,之后执行mfsmaster start 恢复 master 服务。

COROSYNC+PACEMAKER解决mfsmaster单点故障。

使用pacemaker+corosync解决master单点故障:此时需要五台虚拟机:

Master   172.25.45.1

Master1172.25.45.5

Chunkserver1172.25.45.2

Chunkserver2172.25.45.3

Client172.25.45.4         +提供远程存储。

使用client提供ISCSI远程存储,故在client端:

# yum install -y scsi-target-utils.x86_64       #安装iscsi软件包

# vim /etc/tgt/targets.conf              #编辑主配置文件

<target iqn.2016-07.com.example:server.target3>

backing-store /dev/vdb      # Becomes LU N 1

write-cache off

vendor_id MyCompany Inc.

initiator-address 172.25.45.5   #只允许这两个Ip使用共享的存储设备。

initiator-address 172.25.45.1

</target>

#/etc/init.d/tgtd    start    #开启远程存储设备。

在两个master上操作如下:首先两个master均需要装上mfsmaster,因此mfsmaster2需要按照mfsmaster1上那样的方法,先装好mfsmasdter。接下来,就是安装ISCSI客户端,使得发现共享设备,并且连接。连接上了过后在其中一台mfsmaster进行lvm并且格式化设备,再进行挂载。做测试,此次选择远程共享储存设备的主要原因是因为将mfsmaster的数据路径保存在共享设备里,使得一台master宕机过后,另外一台mfsmaster能够接管数据,解决mfsmaster单点故障问题。

#yum install -y iscsi-initiator-utils.x86_64

#iscsiadm -m discovery -t st -p 172.25.45.4

#iscsiadm  -m node -l      ###以上步骤两台mfsmaster均需要操作。

#fdisk /dev/sda     #制作为lvm

# mkfs.ext4 /dev/sda1      #格式化设备为ext4格式

#mount /dev/sda1 /mnt

#cp /var/lib/mfs/*  /mnt

#chown nobody /mnt/  -R

#######以上步骤只需要在其中一台mfsmastrer上操作就好了。

编写mfsmaster的启动脚本,因为pacemaker需要mfsmaster的启动脚本。

#vim mfsmaster     #mfsmaster启动脚本

#!/bin/bash

# Init file for the MooseFS master service

# chkconfig: - 92 84

# description: MooseFS master

# processname: mfsmaster

# Source function library.

# Source networking configuration.

. /etc/init.d/functions

. /etc/sysconfig/network

# Source initialization configuration.

# Check that networking is up.

[ "${NETWORKING}" == "no" ] && exit 0

[ -x "/usr/sbin/mfsmaster" ] || exit 1

[ -r "/etc/mfs/mfsmaster.cfg" ] || exit 1

[ -r "/etc/mfs/mfsexports.cfg" ] || exit 1

RETVAL=0

prog="mfsmaster"

datadir="/var/lib/mfs"

mfsbin="/usr/sbin/mfsmaster"

mfsrestore="/usr/sbin/mfsmetarestore"

start () {

echo -n $"Starting $prog: "

$mfsbin start >/dev/null 2>&1

if [ $? -ne 0 ];then

$mfsrestore -a >/dev/null 2>&1 && $mfsbin start >/dev/null 2>&1

fi

RETVAL=$?

echo return $RETVAL

}

stop () {

echo -n $"Stopping $prog: "

$mfsbin -s >/dev/null 2>&1 || killall -9 $prog #>/dev/null 2>&1

RETVAL=$?

echo

return $RETVAL

}

restart () {

stop

start

}

reload () {

echo -n $"reload $prog: "

$mfsbin reload >/dev/null 2>&1

RETVAL=$?

echo

return $RETVAL

}

restore () {

echo -n $"restore $prog: "

$mfsrestore -a >/dev/null 2>&1

RETVAL=$?

echo

return $RETVAL

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

reload)

reload

;;

restore)

restore

;;

status)

status $prog

RETVAL=$?;;

*)

echo $"Usage: $0 {start|stop|restart|reload|restore|status}"

RETVAL=1

esac

exit $RETVAL

#cp mfsmaster  /etc/init.d/

#chmod +x /etc/init.d/mfsmaster

#/etc/init.d/mfsmaster  start  #做测试,看mfsmaster脚本能否启动mfsmaster服务。

#scp -p /etc/init.d/mfsmaster   [email protected]:/etc/init.d/

接下来采用corosync+pacemaker结构来解决单点故障问题。首先需要重新编辑yum源,之前普通的yum源无法下在corosync 和pacemaker ,同时资源管理器pacemaker还需要安装crmsh,pssh软件包,才能及进行资源管理。否则无法进行资源管理呢。

# yum install -y pacemaker corosync

#cp /etc/corosync/corosync.conf.example  /etc/corosync/corosync.conf

#vim  corosync.conf

# Please read the corosync.conf.5 manual page

compatibility: whitetank

totem {

version: 2    ##版本号,只能是2,不能修改

secauth: off  ##安全认证,当使用aisexec时,会非常消耗CPU

threads: 2  ##线程数,根据CPU个数和核心数确定

interface {

ringnumber: 0   ##冗余环号,节点有多个网卡是可定义对应网卡在一个环内

bindnetaddr: 172.25.45.0  ##绑定心跳网段

mcastaddr: 226.94.8.8  ##心跳组播地址

mcastport: 5405  ##心跳组播使用端口

ttl: 1

}

}

logging {

fileline: off   ##指定要打印的行

to_stderr: no  ##是否发送到标准错误输出

to_logfile: yes  ##记录到文件

to_syslog: no  ##记录到syslog

logfile: /var/log/cluster/corosync.log

debug: off

timestamp: on  ##是否打印时间戳,利于定位错误,但会消耗CPU

logger_subsys {

subsys: AMF

debug: off

}

}

amf {

mode: disabled

}

service {

ver:  0

name: pacemaker        ##定义corosync启动时同时启动pacemaker

}

#/etc/init.d/corosync  start

#yum install -y crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm

#scp corosync.conf [email protected]:/etc/corosync/    #另外mfsmaster需要进行同样的操作。这里不再一一赘述。

至此corosync+pacemaker已经安装并启动完毕,现在就是需要进行资源配置,使得当mfsmaster宕机时,另外一台能够及时接管。添加资源前需要弄懂,首先需要添加vip,然后再添加网络存储设备,最后添加mfsmaster的启动脚本.

因为没有装fence机制,当crm(live)configure# verify    ##检查当前配置语法,由于没有STONITH,所以报错,可关闭,所以需要crm(live)configure# property stonith-enabled=false   ##禁用stonith后再次检查配置,才能无报错

同时注意法定票数问题:

在双节点集群中,由于票数是偶数,当心跳出现问题(脑裂)时,两个节点都将达不到法定票数,默认quorum策略会关闭集群服务,为了避免这种情况,可以增加票数为奇数(如前文的增加ping节点),或者调整默认quorum策略为【ignore】

此处选择调整默认quorum策略为【ignore】:crm(live)configure# property no-quorum-policy=ignore 。

接下来进行资源配置管理:

# crm

#crm(live)# status

crm(live)# configure

crm(live)configure# property stonith-enabled=false            #禁用Fence机制。

crm(live)configure# property no-quorum-policy=ignore   #调整默认quorum策略为ignore

crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.45.100 cidr_netmask=32 op monitor interval=30s    #添加虚拟ip

crm(live)configure# primitive mfsdata ocf:heartbeat:Filesystem params device=/dev/sda1 directory=/var/lib/mfs    fstype=ext4     #添加存储文件系统

crm(live)configure# primitive mfsstart lsb:mfsmaster op monitor interval=30s   #添加mfsmaster启动脚本。

crm(live)configure# group mfsfilesys vip mfsdata mfsstart    #将这三个资源放入同一个组里面,使之能够运行在一个节点上。

crm(live)configure# show

crm(live)configure#commit    #提交保存。

crm(live)configure#bye      #退出资源管理器。

进行验证:此时资源均运行在mfsmaster1上,现在要将资源切换到mfsmaster2上,则进行如下操作,在mfsmaster2上进行:

#crm

crm(live)# node

crm(live)node# standby server1.example.com     #使mfsmaster做为备用节点。将资源切换到mfsmaster2上。

在mfsmaster上进行crm_mon进行观看:

时间: 2024-10-14 05:29:57

MooseFS安装及双机热备的相关文章

CentOS下Mysql双机热备安装详解

Mysql双机热备安装文档 1. 安装环境和资源 211.88.22.74 4CPU 8G 120G硬盘 centos6.5_64 211.88.22.73 4CPU 8G 120G硬盘 centos6.5_64 服务器两台.这里使用211.88.22.74作为主服务器,211.88.22.73作为从服务器. 1.1 mysql下载地址 a. 官方下载地址: http://dev.mysql.com/downloads/mysql/#downloads 或镜像文件下载: http://dev.m

ansible-playbook自动化安装Keepalived实现Nginx服务双机热备自动化配置

脚本实现通过ansible-playbook自动化安装Keepalived和配置,主要解决问题如下: Keepalived自动化安装: keepalived_vrid配置,自动根据vip获取最后一段作为vrid,确保同一网段不会出现vrid冲突导致HA切换失败的问题: 自动配置Keepalived: HA检测脚本自定义,根据脚本内容,来做redis或nginx或其他软件的双机热备: 自动配置vip给Keepalived 设置Keepalived开机启动,加入系统服务: Keepalived安装脚

Mysql+DRBD+Heartbeat 实现mysql高可用的双机热备(mysql+heartbeat篇)

*************************************部署MYSQL******************************************* yum -y install  gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake bison* useradd mysql -d /usr/loc

用haproxy搭建web群集并由keepalived 实现双机热备

搭建haproxy+keepalived高可用群集. 一.案例概述 1.haproxy是目前比较流行的一种集群调度工具,是一款免费开源的软件,并且具有一定得安全性:haproxy较适用于负载较大的web节点,并且支持数万的并发量.同类调度工具还有很多,如LVS和Nginx.相比较而言,LVS性能最好,但是搭建相对复杂,Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,性能没有haproxy好.haproxy主要实现web群集的负载均衡haproxy官方网站:http:

HA高可用集群部署(ricci+luci+fence) 双机热备

主机环境 redhat6.5 6位 实验环境 服务端1 ip172.25.29.1   主机名:server1.example.com   ricci     服务端2 ip172.25.29.2    主机名:server2.example.com    ricci     管理端1 ip172.25.29.3    主机名:server3.example.com    luci     管理端2 ip172.25.29.250     fence_virtd 防火墙状态:关闭 1. 安装ri

mysql的双机热备

例子:实现mysql的双机热备(AB复制) db1(master)<------->db2(salave) db1.josen365.net eth0 192.168.1.48/24 eth0:0 192.168.33.48/24 eth1  192.168.100.48 db2.josen365.net eth0 192.168.1.49/24 eth0:0 192.168.33.49/24 eth1   192.168.100.49 核心步骤归纳: 1.master必须启动二进制和使用唯一

&#8203;Keepalived双机热备

Keepalived双机热备 Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健检查功能,如判断LVS负载调度器.节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集.在非LVS群集环境中使用时Keepalived也可以作为热备软件使用. Keepalived采用VRRP(virtual  router  redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能.VRRP是

数据库双机热备

数据库镜像相对于日志传送,数据库镜像显然更高一级.在最简单的形式下,它其实与日志传送的工作原理相似,但是生产服务器发送事务到镜像服务器的频率要高得多,这意味着更新速度也要快很多.对于数据库镜像来说,故障转移功能也是需要手动完成.但是你可以添加第三个SQLServer,称为witness.Witness 可以作为一个普通的SQL Server,但是一直留意着其它两个镜像服务器.当主镜像发生故障,witness 可以让第二个镜像接管操作,类似一种自动的故障转移.在故障转移时,任何进行中的客户端事务都

keepalived+nginx实现双机热备

keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. 官网地址:http://www.keepalived.o