2019独角兽企业重金招聘Python工程师标准>>>


MFS 文件系统结构:
包含 4 种角色:

管理服务器 managing server (master)
元数据日志服务器 Metalogger server(Metalogger)
数据存储服务器 data servers (chunkservers)
客户机挂载使用 client computers


架构图

可以看出master就像指挥官,负责调度,很关键

1. 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷
贝。
2. 元数据日志服务器: 负责备份 master 服务器的变化日志文件,文件类型为
changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作。
3. 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数
据传输。
4. 客户端: 通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文
件系统和本地 unix 文件系统使用一样的效果。

原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构的,使用的硬
盘和网络的吞吐量越好,整个系统的性能也就会越好。

    
mfs优势:
-1. Free(GPL)
0. 通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs好麻烦哦!)。
1. 可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!)
2. 部署简单。(sa们特别高兴,领导们特别happy!)
3. 体系架构高可用,所有组件无单点故障。 (您还等什么?)
4. 文件对象高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别),而绝对不会影响读或者写的性能,只会加速哦!)
5. 提供Windows回收站的功能.(不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性,oralce这些特性可是收费的哦!)
6. 提供类似Java语言的 GC(垃圾回收).
7. 提供netapp,emc,ibm等商业存储的snapshot特性。
8. google filesystem的一个c实现。(google在前面开路哦!)
9. 提供web gui监控接口。
10. 提高随机读或写的效率(有待进一步证明)。
11. 提高海量小文件的读写效率(有待进一步证明)。


(master采用keepalived+drbd实现高可用

主机环境 rhel6.5

mfsmaster 172.25.254.10

mfsbackup 172.25.254.11

VIP 是172.25.254.12

iptables disabled

selinux disabled

mfsmaster 和mfsbackup一定要主机名解析,同时主机名也必须和主机名解析一致。

   uname -n查看你的名字~

Mfsmaster mfsbackup 都做以下操作,首先安装包,这是我自己打的rpm包。

安装即可

drbd配置:

vim /etc/drbd.d/mfs.res

  1 resource mfs {                                                                                              2         meta-disk internal;3         device /dev/drbd1;4         syncer {5                 verify-alg sha1;6         }7 on mfsmaster {8         disk /dev/vda1;9         address 172.25.254.10:7789;10 }11 on mfsbackup {12         disk /dev/vda1;13         address 172.25.254.11:7789;14 }15 }

安装mfs master

[root@mfsmaster etc]# cd  /etc
[root@mfsmaster etc]# mv mfsmaster.cfg.dist mfsmaster.cfg
[root@mfsmaster etc]# mv mfsexports.cfg.dist mfsexports.cfg
[root@mfsmaster etc]# mv mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@mfsmaster etc]# mv mfstopology.cfg.dist mfstopology.cfg

vim mfsmaster.cfg

1

 WORKING_USER = nobody2  WORKING_GROUP = nobody3  SYSLOG_IDENT = mfsmaster4  LOCK_MEMORY = 05  NICE_LEVEL = -196 7  EXPORTS_FILENAME = /etc/mfsexports.cfg8 9  TOPOLOGY_FILENAME = /etc/mfstopology.cfg10 11  DATA_PATH = /data1/drbd12 13  BACK_LOGS = 5014  BACK_META_KEEP_PREVIOUS = 115 16  REPLICATIONS_DELAY_INIT = 30017  REPLICATIONS_DELAY_DISCONNECT = 360018 19  MATOML_LISTEN_HOST = *20  MATOML_LISTEN_PORT = 941921 22  MATOCS_LISTEN_HOST = *23  MATOCS_LISTEN_PORT = 942024 25  MATOCL_LISTEN_HOST = *26  MATOCL_LISTEN_PORT = 942127 28  CHUNKS_LOOP_CPS = 10000029  CHUNKS_LOOP_TIME = 30030 31  CHUNKS_SOFT_DEL_LIMIT = 1032  CHUNKS_HARD_DEL_LIMIT = 2533  CHUNKS_WRITE_REP_LIMIT = 234  CHUNKS_READ_REP_LIMIT = 1035 36  REJECT_OLD_CLIENTS = 0

vim mfsmetalogger.cfg

  1  WORKING_USER = nobody                                                                                      2  WORKING_GROUP = nobody 3  SYSLOG_IDENT = mfsmetalogger4  LOCK_MEMORY = 05  NICE_LEVEL = -196 7  DATA_PATH = /var/lib/mfs8 9  BACK_LOGS = 5010  BACK_META_KEEP_PREVIOUS = 311  META_DOWNLOAD_FREQ = 2412 13  MASTER_RECONNECTION_DELAY = 514 15  MASTER_HOST = mfsmaster16  MASTER_PORT = 941917 18  MASTER_TIMEOUT = 60

ok 为了方便,直接把这几个文件复制到mfsbackup上就可以

[root@mfsmaster etc]# scp mfs* 172.25.254.11:/etc/
root@172.25.254.11's password:
mfsexports.cfg                                                                100% 4060     4.0KB/s   00:00
mfsmaster.cfg                                                                 100%  849     0.8KB/s   00:00
mfsmetalogger.cfg                                                             100%  401     0.4KB/s   00:00
mfstopology.cfg                                                               100% 1123     1.1KB/s   00:00

master上执行

[root@mfsmaster etc]# drbdsetup /dev/drbd1 primary --force
[root@mfsmaster etc]# mkfs.ext4 /dev/drbd1

都执行

mkdir -p /data1/drbdchown -R nobody.nobody  /data1/drbd/
[root@mfsmaster mfs]# cp /var/lib/mfs/metadata.mfs.empty /data1/drbd/
[root@mfsmaster drbd]# mv metadata.mfs.empty metadata.mfs
[root@mfsmaster drbd]# mfsmaster

ok master 已经可以正常运行了

,为了保证无误我们在backup上也测试一次。

[root@mfsmaster drbd]# mfsmaster stop
[root@mfsmaster drbd]# cd[root@mfsmaster ~]
# umount /dev/drbd1
[root@mfsmaster ~]# drbdadm secondary mfs
[root@mfsbackup drbd+mfs-rpm]# drbdadm primary mfs
[root@mfsbackup drbd+mfs-rpm]# mount /dev/drbd1 /data1/drbd/
[root@mfsbackup drbd+mfs-rpm]# mfsmaster

这个时候我们的master端已经全线部署完成,接下来我们要实现他的高可用,这个很重要

首先说明,我使用自己的方法很简单的实现主断备启,但是是一次性的,也就是说,只支持一次主的mfsmaster断了,backup可以接替,并不能来回。需要手工操作。

脚本写的简单后续有时间修改,网上有很多成品的,虽然很菜还是写自己的。。

同样是keepalived +drbd大神们都是全自动的

我这其实是一次性的但是轻量简单呗。

  1. 安装keepalived 两端执行:

yum install gcc openssl-devel popt-devel -y./configure --prefix=/usr/local/keepalived
[root@mfsmaster keepalived-1.2.8]# make && make install
[root@mfsmaster ~]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@mfsmaster ~]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@mfsmaster ~]# ln -s /usr/local/keepalived/etc/keepalived /etc/
[root@mfsmaster ~]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin
[root@mfsmaster ~]# vim /etc/keepalived/keepalived.conf
  1 ! Configuration File for keepalived2 3 global_defs {4    notification_email {5      576786031@qq.com6    }7    notification_email_from zabbix@server2.com8    smtp_server 172.25.254.29    smtp_connect_timeout 3010    router_id mfs_master11 }12 vrrp_script check_drbd {13         script "/etc/keepalived/check_drbd.sh"14             interval 15     15     }16 vrrp_instance mfs {17     state MASTER18     interface eth019     virtual_router_id 51                                                                                                                                                 20     priority 15021     advert_int 122     authentication {23         auth_type PASS24         auth_pass 111125     }26     virtual_ipaddress {27         172.25.254.12 //VIP28     }29     track_script {30         check_drbd31         }}
~

[root@mfsmaster keepalived]# vim check_drbd.sh

  1 /bin/bash: Configuration: command not found2 # File Name: check_drbd.sh3 # Author: dty4 # mail: 576786031@qq.com5 # Created Time: Sun 02 Aug 2015 01:32:43 PM CST6 #########################################################################7 #!/bin/bash    8 A=`ps -C mfsmaster --no-header |wc -l`9 if [ $A -eq 0 ];then10     umount /data1/drbd/11     drbdadm secondary mfs12     killall keepalived     13 fi               14
mfsbackup 上      cd /etc/keepalived写两个脚本 master.sh backup.sh
    [root@mfsbackup keepalived]# cat backup.sh master.sh
#!/bin/bash
mfsmaster stop
umount /dev/drbd1
drbdadm secondary mfs
#########################################################################
# File Name: master.sh
# Author: dty
# mail: 576786031@qq.com
# Created Time: Sun 02 Aug 2015 01:38:12 PM CST
#########################################################################
#!/bin/bash
drbdadm primary mfs
mount /dev/drbd1 /data1/drbd
mfsmaster start

vim /etc/keepalived.conf

  1 ! Configuration File for keepalived2   3 global_defs { 4    notification_email { 5      576786031@qq.com6    }      7    notification_email_from zabbix@server2.com8    smtp_server 172.25.254.2 9    smtp_connect_timeout 3010    router_id mfs_master11 }       12 vrrp_instance mfs {13     state BACKUP   14     interface eth015     virtual_router_id 5116     priority 8017     advert_int 118     authentication {19         auth_type PASS20         auth_pass 111121     }22     virtual_ipaddress {23         172.25.254.12 //VIP24     }25 notify_master /etc/keepalived/master.sh26 notify_backup /etc/keepalived/backup.sh27 }
~

~

此时我们可以实验了

开启mfsmaster,

开启keepalived

mfsbackup上也启动 keepalived

[root@mfsbackup keepalived]# /etc/init.d/keepalived start

我们把主上的mfsmaster关掉

可以看到vip已经没了,转移到了备机上

服务已经完美转移了 。

这个时候我们来搞定客户端和chunkserver的安装

yum localinstall mfs-chunkserver-1.6.26-1.x86_64.rpm -y

mv mfschunkserver.cfg.dist mfschunkserver

mkdir -p /data1/mfs //设置个目录存放数据

chown nobody.nobody /data1/mfs

vim /etc/mfschunkserver

  1  WORKING_USER = nobody                                                      2  WORKING_GROUP = nobody 3  SYSLOG_IDENT = mfschunkserver4  LOCK_MEMORY = 05  NICE_LEVEL = -196 7  DATA_PATH = /data1/mfs8 9  MASTER_RECONNECTION_DELAY = 510 11  BIND_HOST = *12  MASTER_HOST = 172.25.254.12 //VIP13  MASTER_PORT = 942014 15  MASTER_TIMEOUT = 6016 17  CSSERV_LISTEN_HOST = *18  CSSERV_LISTEN_PORT = 942219 20  HDD_CONF_FILENAME = /etc/mfshdd.cfg21  HDD_TEST_FREQ = 10

设置chunk存放路径

[root@server7 ~]# cat /etc/mfshdd.cfg
# mount points of HDD drives
#
#/mnt/hd1
#/mnt/hd2
#etc.
/data1/mfs/

chunkserver已经部署完成了有多个以此类推就好了.

下来就是客户端的安装及使用了

# yum localinstall -y mfs-client-1.6.26-1.x86_64.rpm
# cd /etc# cp mfsmount.cfg.dist mfsmount.cfg
# vi mfsmount.cfg定义客户端默认挂载mfsmaster=mfsmaster/mnt/mfs# mfsmount
[root@server4 ~]# df -h Filesystem                    Size  Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root  6.7G  978M  5.4G  16% /tmpfs                         499M     0  499M   0% /dev/shm/dev/sda1                     485M   33M  427M   8% /boot172.25.254.12:9421             16G     0   16G   0% /mnt/mfs

inodes with permission denied:          0

[root@server4 mfs]# cp /etc/passwd leaf1
[root@server4 mfs]# cp /etc/passwd leaf2
[root@server4 mfs]#  mfsfileinfo leaf1/passwd
leaf1/passwd:chunk 0: 0000000000000008_00000001 / (id:8 ver:1)copy 1: 172.25.254.7:9422
[root@server4 mfs]#  mfsfileinfo leaf2/passwd
leaf2/passwd:chunk 0: 0000000000000009_00000001 / (id:9 ver:1)copy 1: 172.25.254.8:9422copy 2: 172.25.254.9:9422
ok 效果就这样粗来了

其他的mfs的使用这里不做赘述,主要为了验证我们的高可用机制是否可行,就到这里了

ps:当出现问题调转到backup后,如果主的正常了,我们手动切换必须遵守以下步骤

  1. 停掉mfsmaster服务

    mfsmaster stop

umount /dev/drbd1

drbdadm secondary mfs

  1. 主机:

    1.drbdadm  primary mfs

2.mount /dev/drbd1 /data1/drbd

3.mfsmaster start

4.keepalived start

还有要提到的就是可能会出现脑裂,这一般时操作不按顺序,也可能有其他原因,下面是网上大神写的,

脑裂的处理方法

drbd1主,drbd2辅

1,正常情况下状态:[root@drbd1 ~]# cat /proc/drbd version: 8.3.8 (api:88/proto:86-94): 299AFE04D7AFD98B3CA0AF9 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----ns:2144476 nr:0 dw:36468 dr:2115769 al:14 bm:129 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0[root@drbd2 ~]# cat /proc/drbd version: 8.3.8 (api:88/proto:86-94)srcversion: 299AFE04D7AFD98B3CA0AF9 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----ns:0 nr:2141684 dw:2141684 dr:0 al:0 bm:130 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:02,drbd1故障后drbd1状态:[root@drbd1 ~]# cat /proc/drbd version: 8.3.8 (api:88/proto:86-94)srcversion: 299AFE04D7AFD98B3CA0AF9 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r----ns:4 nr:102664 dw:102668 dr:157 al:1 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0drbd2的状态:[root@drbd2 ~]# cat /proc/drbd version: 8.3.8 (api:88/proto:86-94)srcversion: 299AFE04D7AFD98B3CA0AF9 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r----ns:0 nr:2141684 dw:2141684 dr:0 al:0 bm:130 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:03,处理方法:a,将secondary配置成primary角色[root@drbd2 ~]# drbdsetup /dev/drbd0 primary -o[root@drbd2 ~]# cat /proc/drbd version: 8.3.8 (api:88/proto:86-94)srcversion: 299AFE04D7AFD98B3CA0AF9 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/Outdated C r----ns:0 nr:2141684 dw:2141684 dr:0 al:0 bm:130 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0挂载:[root@drbd2 /]# mount /dev/drbd0 /data1[root@drbd2 data1]# lltotal 10272-rw-r--r-- 1 root root 10485760 Feb 13 11:26 aa.imgdrwx------ 2 root root    16384 Feb 13 11:25 lost+found这个时候drbd2开始提供服务,开始写数据drbd1主恢复正常后:[root@drbd1 ~]# cat /proc/drbdversion: 8.3.8 (api:88/proto:86-94)srcversion: 299AFE04D7AFD98B3CA0AF9 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r----ns:2144476 nr:0 dw:36484 dr:2115769 al:14 bm:129 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:8drbd1状态是:StandAlone,此时,drbd1是不会和drbd2互相联系的我们来查看下日志:[root@drbd1 ~]# tailf /var/log/messagesFeb 13 16:14:27 drbd1 kernel: block drbd0: helper command: /sbin/drbdadm split-brain minor-0Feb 13 16:14:27 drbd1 kernel: block drbd0: helper command: /sbin/drbdadm split-brain minor-0 exit code 0 (0x0)Feb 13 16:14:27 drbd1 kernel: block drbd0: conn( WFReportParams -> Disconnecting ) Feb 13 16:14:27 drbd1 kernel: block drbd0: error receiving ReportState, l: 4!Feb 13 16:14:27 drbd1 kernel: block drbd0: asender terminatedFeb 13 16:14:27 drbd1 kernel: block drbd0: Terminating drbd0_asenderFeb 13 16:14:27 drbd1 kernel: block drbd0: Connection closedFeb 13 16:14:27 drbd1 kernel: block drbd0: conn( Disconnecting -> StandAlone ) Feb 13 16:14:27 drbd1 kernel: block drbd0: receiver terminatedFeb 13 16:14:27 drbd1 kernel: block drbd0: Terminating drbd0_receiver脑裂出现!解决方法:1>,我们需要将现在的drbd1角色修改为secondary[root@drbd1 ~]# drbdadm secondary r0[root@drbd1 ~]# drbdadm -- --discard-my-data connect r0  ##该命令告诉drbd,secondary上的数据不正确,以primary上的数据为准。2>,我们还需要在drbd2上执行下面操作[root@drbd2 /]# drbdadm connect r0这样drbd1就能和drbd2开始连接上了,并且保证数据不会丢失:[root@drbd1 ~]# cat /proc/drbd      version: 8.3.8 (api:88/proto:86-94)srcversion: 299AFE04D7AFD98B3CA0AF9 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----ns:0 nr:20592 dw:20592 dr:0 al:0 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

ok 就这样了。 未完待续。。。。。

转载于:https://my.oschina.net/loveleaf/blog/486699

mfs分布式存储+master端高可用相关推荐

  1. 阿里移动|《蚂蚁金服移动端高可用技术实践》

    摘要:对于移动技术而言,2017年是继往开来之年.一方面是移动技术领域进入深水区,另一方面移动技术边界和内涵被不断重塑.阿里巴巴希望进一步推动移动应用研发事实标准落地,从而赋能整个行业开发者.在201 ...

  2. oVirt管理端高可用模式搭建(hosted-engine)

    oVirt管理端高可用模式搭建 oVirt是一个分布式虚拟化解决方案,旨在管理整个企业基础架构,oVirt使用受信任的KVM管理程序 操作系统版本:centos7.5 ovirt版本:ovirt4.2 ...

  3. 部署keepalive+lvs多master节点高可用

    最低配置2核 2G 192.168.1.11 master1 192.168.1.12 master2 192.168.1.13 master3 192.168.1.20 node1 一.初始化实验环 ...

  4. k8s1.18多master节点高可用集群安装-超详细中文官方文档

    kubernetes安装系列文章 kubernetes1.17.3安装-超详细的安装步骤 安装kubernetes1.17.3多master节点的高可用集群 k8s1.18单master节点高可用集群 ...

  5. Pacemaker+Corosync+Mfs+Iscsi+Fence实现高可用和Fence管理

    前言: 分布式文件系统(DIstributed File System)     时值文件系统管理的物理存储资源不一定直接连接在本地 的节点上,而是通过计算机网络与节点相连,简单的来讲,就是把一些分散 ...

  6. 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】

    前面两篇文章已经配置好了etcd和flannel的网络,现在开始配置k8s master集群. etcd集群配置参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集 ...

  7. kubeadm安装生产环境多master节点高可用集群

    一.环境规划 k8s环境规划: podSubnet(pod网段) 10.244.0.0/16 serviceSubnet(service网段): 10.96.0.0/16 操作系统:centos7.6 ...

  8. android x86 支付宝,亿级APP支付宝在移动端的高可用技术实践

    原标题:亿级APP支付宝在移动端的高可用技术实践 " 对于移动技术而言,2017 年是继往开来之年.一方面是移动技术领域进入深水区,另一方面移动技术边界和内涵被不断重塑. 阿里巴巴希望进一步 ...

  9. Redis基础与高可用集群架构进阶详解

    一.NoSQL简介 1.问题引入 每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢,有了 12306,有了它以后就更方便了,我们可以在网上买票,但是带来 ...

最新文章

  1. LeetCode 897 递增顺序搜索树
  2. HDU2842之斐波那契亚数列变形,动态规划
  3. Tosca 注意事项(持续更新)
  4. 基于麻雀算法优化的核极限学习机(KELM)分类算法 - 附代码
  5. MFC 消息映射的实现
  6. Layui 监听 复选框 提交表单
  7. 解析bt种子下载 java_使用Java解析Torrent文件(BT种子),基于使用Eclipse ECF中的org.eclipse.bittorrent方案...
  8. Skyline软件二次开发初级——11如何在WEB页面中的三维地图上加载和保存工程文件...
  9. 单独设置一页或者多页的页眉或者页脚
  10. 局域网雨云蠕虫病毒的处理
  11. java: You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled
  12. linux chrome ui字体,谷歌Chrome 69浏览器标签栏字体模糊的解决方法
  13. 从DDR到DDR4,内存核心频率其实基本上就没太大的进步
  14. iOS开发之内购完全笔记(您已购买此 App 内购买项目。此项目将免费恢复。)
  15. ca45a_demo_c++_if语句
  16. 软件测试周刊(第51期):漂漂亮亮、从从容容地出现在大家面前,不仅是虚荣的事,更是庄重与自信的事。 ​​​
  17. android 动态进度条,Android实用view系列------炫酷的进度条
  18. SAP MM 物料移动平均价的修改历史(续)
  19. IDEA中报错“Cannot resolve symple”解决办法
  20. 用C语言求1-2000之间哪些是闰年

热门文章

  1. linux文件类型elf,[Linux]四种ELF对象文件类型
  2. java解压gz文件
  3. build-helper-maven-plugin 配置多 source resource 文件
  4. 完美解决NV4_disp.dll已正常停止工作”蓝屏问题
  5. [WCF]利用net.tcp傳輸協定來建置WCF Service
  6. 基于SPI的数据报过滤原理与实现
  7. 03-命令图片.doc
  8. 【随机过程】随机过程之泊松过程的推广
  9. android 使用webview访问优酷无法播放视频的问题
  10. 树莓派上 安装并 运行opencv