MooseFS及其高可用部署
MooseFS的工作原理分析
MooseFS(下面统一称为MFS)由波兰公司Gemius
SA于2008年5月30日正式推出的一款Linux下的开源存储系统,是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性、高可靠性和持久性。它能够将文件分布存储于不同的物理机器上,对外却提供的是一个透明的接口的存储资源池。它还具有在线扩展、文件切块存储、节点无单点故障、读写效率高等特点。
MFS分布式文件系统由元数据服务器(Master Server)、元数据日志服务器(Metalogger Server)、数据存储服务器(Chunk
Server)、客户端(Client)组成。
MFS文件系统结构图
(1)元数据服务器:MFS系统中的核心组成部分,存储每个文件的元数据,负责文件的读写调度、空间回收和在多个chunk
server之间的数据拷贝等。目前MFS仅支持一个元数据服务器,因此可能会出现单点故障。针对此问题我们需要用一台性能很稳定的服务器来作为我们的元数据服务器,这样可以降低出现单点故障的概率。
(2) 元数据日志服务器:元数据服务器的备份节点,按照指定的周期从元数据服务器上将保存元数据、更新日志和会话信息的文件下载到本地目录下。当元数据服务器出现故障时,我们可以从该服务器的文件中拿到相关的必要的信息对整个系统进行恢复。
此外,利用元数据进行备份是一种常规的日志备份手段,这种方法在某些情况下并不能完美的接管业务,还是会造成数据丢失。此次将采用通过iSCSI共享磁盘对元数据节点做双机热备。
(3) 数据存储服务器:负责连接元数据管理服务器,听从元数据服务器的调度,提供存储空间,并为客户端提供数据传输,MooseFS提供一个手动指定每个目录的备份个数。假设个数为n,那么我们在向系统写入文件时,系统会将切分好的文件块在不同的chunk
server上复制n份。备份数的增加不会影响系统的写性能,但是可以提高系统的读性能和可用性,这可以说是一种以存储容量换取写性能和可用性的策略。
(4) 客户端:使用mfsmount的方式通过FUSE内核接口挂接远程管理服务器上管理的数据存储服务器到本地目录上,然后就可以像使用本地文件一样来使用我们的MFS文件系统了。
MFS读写原理
1.MFS读数据过程
MFS读过程
MFS读文件工作步骤:
① MFS客户端向系统的元数据管理服务器提交读取文件的任务请求;
② 元数据服务器检索自己的数据并把数据所存放的位置发给客户端;
③ 客户端接收到元数据管理服务器返回的信息后,向已知的数据存储服务器发送数据请求。
2.MFS写数据过程
MFS写文件工作步骤:
① MFS的客户端有数据写需求时,首先向元数据管理服务器提交些文件的任务请求;
② 元数据管理服务器接收到客户端请求后在数据服务器创建新的Chunk文件块;
③ 数据服务器将创建成功的消息返回给元数据管理服务器;
④ 元数据管理服务器将数据服务器的地址返回给客户端;
⑤ 客户端直接向已知的数据服务器写数据;
⑥ 数据服务器将写文件成功的消息返回给客户端;
⑦ 客户端将此次写完成的信号发送给元数据管理服务器。
MFS 部署
主机环境:RHEL6.5 selinux and iptables disabled
Master:172.25.10.2 (HA) 172.25.10.3 (HA)
VIP 172.25.10.100
##Metalogger: 192.168.0.77
Chunkserver: 172.25.10.6 172.25.10.7 172.25.10.8
Client: 172.25.10.4
172.25.10.5 (iSCSI)
生成 rpm,便于部署:
# yum install gcc make rpm-build fuse-devel zlib-devel -y
# rpmbuild -tb mfs-1.6.27.tar.gz
# ls ~/rpmbuild/RPMS/x86_64
mfs-cgi-1.6.27-4.x86_64.rpm
mfs-master-1.6.27-4.x86_64.rpm
mfs-chunkserver-1.6.27-4.x86_64.rpm
元数据服务器
Master server 安装
yum install -y mfs-cgi-1.6.27-4.x86_64.rpm mfs-cgiserv-1.6.27-4.x86_64.rpm mfs-master-1.6.27-4.x86_64.rpm
# cd /etc/mfs/
# cp mfsmaster.cfg.dist mfsmaster.cfg
# cp mfsexports.cfg.dist mfsexports.cfg
# vi mfsexports.cfg
172.25.10.0/24 / rw,alldirs,maproot=0
该文件每一个条目分为三部分:
第一部分:客户端的ip地址
第二部分:被挂接的目录
第三部分:客户端拥有的权限
# cd /var/lib/mfs
# cp metadata.mfs.empty metadata.mfs
# chown -R nobody /var/lib/mfs
修改/etc/hosts文件,增加下面的行:
172.25.10.2 mfsmaster
# mfsmaster start 启动
master server
# mfscgiserv #启动
CGI 监控服务
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)
# cd /usr/share/mfscgi/
# chmod +x chart.cgi mfs.cgi
在浏览器地址栏输入
http://172.25.10.2:9425 即可查看 master的运行情况
存储服务器
Chunk servers 安装
# yum localinstall -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
# vi mfshdd.cfg 定义
mfs 共享点
/mnt/mfschunks1
# chown -R nobody:nobody /mnt/mfschunks1
修改/etc/hosts
文件,增加下面的行:
172.25.10.2 mfsmaster
mkdir /var/lib/mfs
chown nobody /var/lib/mfs
现在再通过浏览器访问
http://172.25.10.2:9425/ 应该可以看见这个 MFS系统的全部信息,包括元数据管理master和存储服务chunkserver。
客户端 client安装
# yum localinstall -y mfs-client-1.6.27-4.x86_64.rpm
# cd /etc/mfs
# cp mfsmount.cfg.dist mfsmount.cfg
# vi mfsmount.cfg 定义客户端默认挂载
mfsmaster=mfsmaster
/mnt/mfs
# mfsmount
# df -h
...
mfsmaster:9421 2729728 0 2729728 0% /mnt/mfs
MFS 测试
在 MFS
挂载点下创建两个目录,并设置其文件存储份数:
# cd /mnt/mfs
# mkdir dir1 dir2
# mfssetgoal -r 2 dir2/ 设置在
dir2 中文件存储份数为两个,默认是一个
dir2/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
对一个目录设定“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.10.6:9422
# mfsfileinfo dir2/passwd
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.10.6:9422
copy 2: 172.25.10.7: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.10.7:9422
启动 mfschunkserver2
后,文件回复正常。
恢复误删文件
# rm -f dir1/passwd
# mfsgettrashtime dir1/
dir1/: 86400
文件删除后存放在“
垃圾箱”中的时间称为隔离时间,这个时间可以用mfsgettrashtime命令来查看,用mfssettrashtime命令来设置,单位为秒,默认为86400秒。
# mkdir /mnt/mfsmeta
# mfsmount -m /mnt/mfsmeta/ -H mfsmaster
挂载 MFSMETA
文件系统,它包含目录trash (包含仍然可以被还原的删除文件的信息)和
trash/undel (用于获取文件)。把删除的文件,移到/
trash/undel 下,就可以恢复此文件。
# cd /mnt/mfsmeta/trash
# mv 00000004\|dir1\|passwd undel/
到 dir1
目录中可以看到passwd文件恢复
在 MFSMETA
的目录里,除了trash和trash/undel两个目录,还有第三个目录reserved,该目录内有已经删除的文件,但却被其他用户一直打开着。在用户关闭了这些被打开的文件后,reserved目录中的文件将被删除,文件的数据也将被立即删除。此目录不能进行操作。
MFS高可用部署
iSCSI 配置
增加一块虚拟磁盘,无需格式化(vdb)
yum install scsi-target-utils.x86_64 -y
vim /etc/tgt/targets.conf
#<target iqn.2016-03.com.example:server.target9>
# backing-store /dev/vdb1
# initiator-address 172.25.10.2
# initiator-address 172.25.10.3
#</target>
/etc/init.d/tgtd start && chkconfig tgtd on
在master(172.25.10.2 172.25.10.3)端下载安装 iscsi-initiator-utils.x86_64
iscsiadm -m discovery -t st -p 172.25.10.5
iscsiadm -m node -l
将磁盘格式化为ext4格式
fdisk -cu /dev/sda
mkfs.ext4 /dev/sda1
将/var/lib/mfs/*
所有数据移到网络磁盘/dev/sda1中去,然后将其挂载到/var/lib/mfs
mount /dev/sda1 /mnt/
cp -p /var/lib/mfs/* /mnt/
mfsmaster start
Pacemaker安装(172.25.10.2;3)
配yum源
默认yum源只有基础包Server,yum源包里有
ResilientStorage/
HighAvailability/
LoadBalancer/
Packages/
images/
Packages/
...
所需安装包pacemaker在HighAvailability包里
yum install pacemaker -y
使用pacemaker配置时需要安装pacemaker的接口,程序接口为crmshell,早期装上pacemaker自带有crmshell接口,新版本已被独立出来,不再是pacemaker组成部分。而crmshell又依赖于pssh相关包,因此得安装这两个组件。
# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm
使用yum install安装pacemaker时会安装其大量相关性依赖包,包括corosync,所以corosync不再安装,直接修改其配置文件/etc/corosync/corosync.conf。
cd /etc/corosync/
#cp corosync.conf.example corosync.conf
vim corosync.conf
#bindnetaddr: 172.25.10.0
#mcastaddr: 226.94.1.1
#
#service {
# name: pacemaker
# ver: 0
#}
/etc/init.d/corosync start && chkconfig corosync on
fence安装(1229)
本次部署采用外部fence ,fence是C/S架构,在fence服务端节点需要安装如下三个软件包。
fence-virtd.x86_64
fence-virtd-libvirt.x86_64
fence-virtd-multicast.x86_64
安装好之后使用命令fence_virtd -c进入交互式界面配置fence文件,在配置时需要注意的是选择接口(interface)时选主机之间通信的网卡。
mkdir /etc/cluster #默认不存在cluster;
服务端和客户端之间通过key文件进行通信,key文件默认不存在,需要手动生成并拷贝到所有客户端节点。节点默认没有/etc/cluster目录,需自己建立
# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key
# for i in {2,3} ;do scp /etc/cluster/fence_xvm.key
master$i.example.com:/etc/cluster ; done
systemctl start fence_virtd.service
systemctl enable fence_virtd.service
在客户端(172.25.10.2,3)需安装fence-virt工具
# yum install fence-virt.x86_64 -y
元数据高可用性高可用实现
之前安装好的crmshell接口提供一个命令行交互接口对pacemaker集群进行管理,具有非常强大且易用的管理功能,所做的配置会同步到各个集群节点上。下面将元数据服务器上各个服务交由集群管理。
a. 首先将fence服务交由集群。由于外部fence只能识别domain,所以需要将domain与hostname绑定,并每隔60s监控一次。
# crm(live)configure# primitive vmfence stonith:fence_xvm parms pcmk_host_map="master1.example.com:vm2;master2.example.com:vm3" op monitor interval=60s
b. 在将MFS系统服务交由集群接管之前,需建立一个虚拟IP(VIP),VIP对外为master节点,当集群里某个master节点资源宕机,则服务通过VIP将资源迁移到另一个master节点,对client来说,丝毫没有感觉。
# crm(live)configure# primitive vip ocf:hearbeat:IPaddr2 params ip="172.25.10.100" cidr_netmask="24" op monitor interval="30s"
c. 将MFS系统服务交由集群管理器管理。
# crm(live)configure# property no-quorum-policy="ignore" #
默认结点数若只有一个,表示集群不存在,忽视
# crm(live)configure# primitive mfsdata ocf:heartbeat:Filesystem params device="/dev/sda1" directory="/var/lib/mfs" fstype="ext4" op monitor interval="60s"
# crm(live)configure# primitive mfs lsb:mfs op monitor interval="60s"
# crm(live)configure# group mfsgroup vip mfs mfsdata
# crm(live)configure# order mfs-after-mfstdata inf: mfsdata mfs
在chunk 和client端加入hosts解析
172.25.10.100 mfsmaster
此时,整个集群服务搭建完毕,MooseFS集群架构如下所示
MooseFS及其高可用部署的更多相关文章
- kubernetes1.7.6 ha高可用部署
写在前面: 1. 该文章部署方式为二进制部署. 2. 版本信息 k8s 1.7.6,etcd 3.2.9 3. 高可用部分 etcd做高可用集群.kube-apiserver 为无状态服务使用hap ...
- NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署
NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...
- LVS+Keepalived高可用部署
一.LVS+Keepalived高可用部署 一.keepalived节点部署 1.安装keepalived yum install keepalived ipvsadm -y mkdir -p /op ...
- Rancher Server HA的高可用部署实验-学习笔记
转载于https://blog.csdn.net/csdn_duomaomao/article/details/78771731 Rancher Server HA的高可用部署实验-学习笔记 一.机器 ...
- eql高可用部署方案
运行环境 服务器两台(后面的所有配置案例都是以10.96.0.64和10.96.0.66为例) 操作系统CentOS release 6.2 必须要有共同的局域网网段 两台服务器都要安装keepali ...
- Redis高可用部署及监控
Redis高可用部署及监控 目录 一.Redis Sentinel简介 二.硬件需求 三.拓扑结构 .单M-S结构 .双M-S结构 .优劣对比 四.配置部 ...
- 006.SQLServer AlwaysOn可用性组高可用部署
一 数据库镜像部署准备 1.1 数据库镜像支持 有关对 SQL Server 2012 中的数据库镜像的支持的信息,请参考:https://docs.microsoft.com/zh-cn/previ ...
- kubernetes 1.15.1 高可用部署 -- 从零开始
这是一本书!!! 一本写我在容器生态圈的所学!!! 重点先知: 1. centos 7.6安装优化 2. k8s 1.15.1 高可用部署 3. 网络插件calico 4. dashboard 插件 ...
- Centos7.2 下DNS+NamedManager高可用部署方案完整记录
Centos7.2 下DNS+NamedManager高可用部署方案完整记录 之前说到了NamedManager单机版的配置,下面说下DNS+NamedManager双机高可用的配置方案: 1)机器环 ...
随机推荐
- 位运算(Bit Manipulation)在算法中的应用
最近刷LettCode,遇到几个没思路的算法题,都是关于位运算的 # 136 Single Number Given a non-empty array of integers, every elem ...
- January 18 2017 Week 3 Wednesday
True liberty is to have power over oneself in all things. 真正的自由是在所有的事情上都能控制住自己. Liberty isn't meanin ...
- EDM邮件群发:群发邮件不进垃圾箱的独家秘笈
EDM邮件群发想要群发的邮件避免进入垃圾箱,不仅需要优化邮件内容和主题,管理收件人邮箱列表,还要有多服务器IP分流技术,控制发信速度,打乱收件人列表等手段,当然更少不了借助专业的邮件群发平台譬如U-M ...
- python UI自动化实战记录八:添加配置
添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn ...
- Python Django 分页
Python Django 分页 http://www.360doc.com/content/14/0721/17/16044571_396090985.shtml
- Django 创建model的一些注意事项
自增主键字段¶ 默认情况下,Django 会给每个模型添加下面这个字段: id = models.AutoField(primary_key=True) 这是一个自增主键字段. 如果你想指定一个自定义 ...
- Motrix 全平台多功能下载工具[Windows、macOS、Linux]
Motrix的界面很朴素,使用起来其实也很方便.点击左侧的「+」图标就可以添加下载任务,跟其他的下载工具没什么区别.暂停.恢复.查看.复制,这些功能都不缺.界面也挺好看的,下载速度还会提示在图标的角标 ...
- Centos7 yum安装mysql
参考此文档:http://www.jb51.net/article/116032.htm http://www.jb51.net/article/95399.htm 1.在官网下载mysql57-co ...
- jpa的修改更新操作
***指定id的保存就等于修改!!! save 指定id直接调用save()
- HDU 1018Big Number(大数的阶乘的位数,利用公式)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big Number Time Limit: 2000/1000 MS (Java/Others) ...