mfs分布式存储+master端高可用
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
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?=?0vim 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?=?60ok 為了方便,直接把這幾個文件復制到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:00master上執行
都執行
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大神們都是全自動的
我這其實是一次性的但是輕量簡單唄。
安裝keepalived 兩端執行:
??? [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?startvim /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
其他的mfs的使用這里不做贅述,主要為了驗證我們的高可用機制是否可行,就到這里了
ps:當出現問題調轉到backup后,如果主的正常了,我們手動切換必須遵守以下步驟
停掉mfsmaster服務
?mfsmaster stop
? ? ? ? ? umount /dev/drbd1
???????? drbdadm secondary mfs
主機:
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:0ok 就這樣了。 未完待續。。。。。
轉載于:https://my.oschina.net/loveleaf/blog/486699
總結
以上是生活随笔為你收集整理的mfs分布式存储+master端高可用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rails 应用使用 Capistran
- 下一篇: setsockopt、getsockop