设为首页 收藏本站
查看: 1766|回复: 0

[经验分享] MooseFS安装及双机热备

[复制链接]

尚未签到

发表于 2019-2-1 09:20:27 | 显示全部楼层 |阅读模式
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              #编辑主配置文件

    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

#/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   root@172.25.45.5:/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 root@172.25.45.5:/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进行观看:





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670294-1-1.html 上篇帖子: moosefs2.0-安装(3) 下篇帖子: Moosefs存储空间扩容及元数据恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表