分佈式高可用存儲(drbd+corosync+pacemaker+MooseFS)

DRBD

    DRBD是由內核模塊和相關腳本而構成,用以構建高可用性的集羣

    drbd 工作原理:DRBD是一種塊設備,可以被用於高可用(HA)之中.它類似於一個網絡RAID-1功能。

當你將數據寫入本地 文件系統時,數據還將會被髮送到網絡中另一臺主機上。以相同的形式記錄在一個

文件系統中。 本地(主節點)與遠程主機(備節點)的數據可以保證實時同步。當本地系統出現故障時,遠

程主機上還會保留有一份相同的數據,可以繼續使用。在高可用(HA)中使用DRBD功能,可以代替使用一

個共享盤陣。因爲數據同時存在於本地主機和遠程主機上,切換時,遠程主機只要使用它上面的那份備

份數據,就可以繼續進行服務了。

    DRBD主要功能:DRBD 負責接收數據,把數據寫到本地磁盤,然後通過網絡將同樣的數據發送給另一

個主機,另一個主機再將數據存到自己的磁盤中。

    DRBD 複製模式:

    協議A:異步複製協議。本地寫成功後立即返回,數據放在發送buffer中,可能丟失。

    協議B:內存同步(半同步)複製協議。本地寫成功並將數據發送到對方後立即返回,如果雙機掉

電,數據可能丟失。

    協議C:同步複製協議。本地和對方寫成功確認後返回。如果雙機掉電或磁盤同時損壞,則數據可能

丟失。

    一般用協議C,但選擇C協議將影響流量,從而影響網絡時延。爲了數據可靠性,我們在生產環境中

還是用C協議。


corosync

    Corosync是OpenAIS發展到Wilson版本後衍生出來的開放性集羣引擎工程,corosync最初只是用來演

示OpenAIS集羣框架接口規範的一個應用,可以說corosync是OpenAIS的一部分,但後面的發展明顯超越

了官方最初的設想,越來越多的廠商嘗試使用corosync作爲集羣解決方案。如RedHat的RHCS集羣套件就

是基於corosync實現。corosync只提供了message layer,而沒有直接提供CRM,一般使用Pacemaker進行

資源管理。

     Corosync是集羣管理套件的一部分,它在傳遞信息的時候可以通過一個簡單的配置文件來定義信息

傳遞的方式和協議等。


pacemaker

    pacemaker就是Heartbeat 到了V3版本後拆分出來的資源管理器(CRM),用來管理整個HA的控制中

心,要想使用pacemaker配置的話需要安裝一個pacemaker的接口,它的這個程序的接口叫crmshell,它

在新版本的 pacemaker已經被獨立出來了,不再是pacemaker的組成部分。  

    pacemaker是一個開源的高可用資源管理器(CRM),位於HA集羣架構中資源管理、資源代理(RA)這個

層次,它不能提供底層心跳信息傳遞的功能,要想與對方節點通信需要藉助底層的心跳傳遞服務,將信

息通告給對方。


pacemaker+corosync

    Corosync主要就是實現集羣中Message layer層的功能:完成集羣心跳及事務信息傳遞

    Pacemaker主要實現的是管理集羣中的資源(CRM),真正啓用、停止集羣中的服務是RA(資源代理)

這個子組件。RA的類別有下面幾種類型:   

    LSB:位於/etc/rc.d/init.d/*,至少支持start,stop,restart,status,reload,force-reload;

    注意:不能開機自動運行;要有CRM來啓動  //centos6用這種類型控制

    OCF: /usr/lib/ocf/resource.d/provider/,類似於LSB腳本,但支持start,stop,status,

monitor,meta-data;

    STONITH:調用stonith設備的功能

    systemd:unit file,/usr/lib/systemd/system/  注意:服務必須設置enable,開啓自

啓;//centos7支持

    service:調用用戶的自定義腳本 


mfs

    MooseFS(下面統一稱爲MFS),被稱爲對象存儲,提供了強大的擴展性、高可靠性和持久性。它能夠

將文件分佈存儲於不同的物理機器上,對外卻提供的是一個透明的接口的存儲資源池。它還具有在線擴

展、文件切塊存儲、節點無單點故障、讀寫效率高等特點。

    MFS分佈式文件系統由元數據服務器(Master Server)、元數據日誌服務器(Metalogger Server)、數

據存儲服務器(Chunk Server)、客戶端(Client)組成。

    元數據服務器:MFS系統中的核心組成部分,存儲每個文件的元數據,負責文件的讀寫調度、空間回

收和在多個chunk server之間的數據拷貝等。目前MFS僅支持一個元數據服務器,因此可能會出現單點故

障。針對此問題我們通過結合drbd來實現高可用

    元數據日誌服務器:元數據服務器的備份節點,按照指定的週期從元數據服務器上將保存元數據、

更新日誌和會話信息的文件下載到本地目錄下。當元數據服務器出現故障時,我們可以從該服務器的文

件中拿到相關的必要的信息對整個系統進行恢復。

    數據存儲服務器:負責連接元數據管理服務器,聽從元數據服務器的調度,提供存儲空間,併爲客

戶端提供數據傳輸,MooseFS提供一個手動指定每個目錄的備份個數。假設個數爲n,那麼我們在向系統

寫入文件時,系統會將切分好的文件塊在不同的chunk server上覆制n份。備份數的增加不會影響系統的

寫性能,但是可以提高系統的讀性能和可用性,這可以說是一種以存儲容量換取寫性能和可用性的策

略。

    客戶端:使用mfsmount的方式通過FUSE內核接口掛接遠程管理服務器上管理的數據存儲服務器到本

地目錄上,然後就可以像使用本地文件一樣來使用我們的MFS文件系統了。



搭建環境


拓撲圖

9bc137cdab4d047b188860db94e5f50e.png-wh_


    主機     ip                 角色
  centos-5  10.0.0.15  Master(drbd+corosync+pacemaker+mfs)

vip:10.0.0.150

  centos-6  10.0.0.16  Backup(drbd+corosync+pacemaker+mfs)
  centos-7  10.0.0.17             Metalogger
  centos-8  10.0.0.18             Chunk Server
  centos-9  10.0.0.19             Chunk Server
  centos-10  10.0.0.20             client


1、先配置相關主機和相關時間同步服務器:

##同步時間

[root@centos-5 ~]# yum install -y ntpdate
[root@centos-5 ~]# crontab -e
*/5 * * * * ntpdate cn.pool.ntp.org

##修改ssh互信

[root@centos-5 ~]# ssh-keygen
[root@centos-5 ~]# ssh-copy-id 10.0.0.16

##修改hosts文件保證hosts之間能夠互相訪問

[root@centos-5 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.15  centos-5
10.0.0.16  centos-6
10.0.0.17  centos-7
10.0.0.18  centos-8
10.0.0.19  centos-9
10.0.0.20  centos-10


2、pcs集羣的構建:


配置集羣的前提:

1、時間同步

2、主機名互相訪問

3、是否使用仲裁設備。

生命週期管理工具:

Pcs:agent(pcsd)

Crash:pssh

##在centos-5和centos-6上配置


2.1、在兩個節點上執行:

[root@centos-5 ~]# yum install -y pacemaker pcs psmisc policycoreutils-python
[root@centos-6 ~]# yum install -y pacemaker pcs psmisc policycoreutils-python


2.2、啓動pcs並且讓其開機自啓:

[root@centos-5 ~]# systemctl start pcsd
[root@centos-5 ~]# systemctl enable pcsd
[root@centos-6 ~]# systemctl start pcsd
[root@centos-6 ~]# systemctl enable pcsd


2.3、修改用戶hacluster的密碼:

[root@centos-5 ~]# echo 123456 | passwd --stdin hacluster
[root@centos-6 ~]# echo 123456 | passwd --stdin hacluster


2.4、註冊pcs集羣主機(默認註冊使用用戶名hacluster)

[root@centos-5 ~]# pcs cluster auth centos-5 centos-6
Username: hacluster
Password: 
centos-6: Authorized
centos-5: Authorized


2.5、在集羣上註冊兩臺集羣:

[root@centos-5 ~]# pcs cluster setup --name mycluster centos-5 centos-6 --force      
##設置集羣


2.6、在其中一個節點上查看已經生成的corosync配置文件

[root@centos-5 ~]# ls /etc/corosync/
corosync.conf          corosync.conf.example.udpu  uidgid.d
corosync.conf.example  corosync.xml.example
##可以看到生成有corosync.conf的配置文件


2.7、查看註冊進來的配置文件

[root@centos-5 ~]# cat /etc/corosync/corosync.conf
totem {
    version: 2
    secauth: off
    cluster_name: mycluster
    transport: udpu
}
nodelist {
    node {
        ring0_addr: centos-5
        nodeid: 1
    }
    node {
        ring0_addr: centos-6
        nodeid: 2
    }
}
quorum {
    provider: corosync_votequorum
    two_node: 1
}
logging {
    to_logfile: yes
    logfile: /var/log/cluster/corosync.log
    to_syslog: yes
}


2.8、啓動集羣:

[root@centos-5 ~]# pcs cluster start --all       ##相當於用來啓動corosync和pacemaker
centos-5: Starting Cluster...
centos-6: Starting Cluster...

##查看是否啓動成功

[root@centos-5 ~]# ps -ef | grep corosync
root       2294      1 10 16:29 ?        00:00:01 corosync
root       2311    980  0 16:29 pts/0    00:00:00 grep --color=auto corosync
[root@centos-5 ~]# ps -ef | grep pacemaker
root       2301      1  0 16:29 ?        00:00:00 /usr/sbin/pacemakerd -f
haclust+   2302   2301  1 16:29 ?        00:00:00 /usr/libexec/pacemaker/cib
root       2303   2301  0 16:29 ?        00:00:00 /usr/libexec/pacemaker/stonithd
root       2304   2301  0 16:29 ?        00:00:00 /usr/libexec/pacemaker/lrmd
haclust+   2305   2301  0 16:29 ?        00:00:00 /usr/libexec/pacemaker/attrd
haclust+   2306   2301  0 16:29 ?        00:00:00 /usr/libexec/pacemaker/pengine
haclust+   2307   2301  0 16:29 ?        00:00:00 /usr/libexec/pacemaker/crmd
root       2317    980  0 16:29 pts/0    00:00:00 grep --color=auto pacemaker


2.9、查看集羣的狀態(顯示爲no faults即爲OK)

[root@centos-5 ~]#  corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
        id      = 10.0.0.15
        status  = ring 0 active with no faults
[root@centos-6 ~]#  corosync-cfgtool -s
Printing ring status.
Local node ID 2
RING ID 0
        id      = 10.0.0.16
        status  = ring 0 active with no faults


2.10、查看與集羣相關的子節點的信息

[root@centos-5 ~]# corosync-cmapctl | grep members
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(10.0.0.15) 
runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.1.status (str) = joined
runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(10.0.0.16) 
runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.2.status (str) = joined


2.11、查看當前集羣的描述信息

[root@centos-5 ~]#  pcs status
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false  ##在這裏我們得實現隔離設備:stonith
Stack: corosync             ##底層是由哪個來傳遞信息的
Current DC: centos-6 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum    ##DC指定的協調員(DC:是由所有節點選舉出來的)
Last updated: Fri Oct 27 16:33:29 2017
Last change: Fri Oct 27 16:29:48 2017 by hacluster via crmd on centos-6
2 nodes configured
0 resources configured
Online: [ centos-5 centos-6 ]
No resources           ##還沒有資源
Daemon Status:               ##各守護進程準備正常
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled


2.12、配置全局選項

[root@centos-5 ~]#  pcs property -h
Usage: pcs property [commands]...
Configure pacemaker properties

##查看哪項是可以配置的

[root@centos-5 ~]# pcs property list --all


2.13、查看集羣是否有錯誤

[root@centos-5 ~]# crm_verify -L -V
   error: unpack_resources:     Resource start-up disabled since no STONITH resources have been defined
   error: unpack_resources:     Either configure some or disable STONITH with the stonith-enabled option
   error: unpack_resources:     NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
##出現這個錯誤是因爲我們沒有配置STONITH設備,所以,我們要關閉STONITH設備
[root@centos-5 ~]# pcs property set stonith-enabled=false
[root@centos-5 ~]# crm_verify -L -V                      
[root@centos-5 ~]# pcs property list
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: mycluster
 dc-version: 1.1.16-12.el7_4.4-94ff4df
 have-watchdog: false
 stonith-enabled: false
##現在就可以了


2.14、集羣的話,我們可以通過下載安裝crmsh來操作(從github上面來下載,然後解壓並直接安裝,我事先已經先下載好放在/usr/local/src下面了),只需要在其中一個節點上安裝就可以了,在這裏我在centos-5上配置crm :

[root@centos-5 src]# ls
crmsh-2.3.2.tar
[root@centos-5 src]# tar -xf crmsh-2.3.2.tar 
[root@centos-5 src]# cd crmsh-2.3.2
[root@centos-5 crmsh-2.3.2]# ls
AUTHORS       crm.conf.in    NEWS              TODO
autogen.sh    crmsh          README.md         tox.ini
ChangeLog     crmsh.spec     requirements.txt  update-data-manifest.sh
configure.ac  data-manifest  scripts           utils
contrib       doc            setup.py          version.in
COPYING       hb_report      templates
crm           Makefile.am    test
[root@centos-5 crmsh-2.3.2]# python setup.py install


2.15、安裝完成之後,我們可以查看一下集羣的狀態

[root@centos-5 ~]# crm status
Stack: corosync
Current DC: centos-6 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Fri Oct 27 16:47:30 2017
Last change: Fri Oct 27 16:40:34 2017 by root via cibadmin on centos-5
2 nodes configured
0 resources configured
Online: [ centos-5 centos-6 ]
No resources

到這裏,pcs集羣我們就已經配置好了,接下來就開始配置drbd和mfs了。


3、配置drbd和mfs(Master和Backup):


3.1、安裝drbd

[root@centos-5 ~]# cd /etc/yum.repos.d/
[root@centos-5 yum.repos.d]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@centos-5 yum.repos.d]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@centos-5 yum.repos.d]# yum install -y kmod-drbd84 drbd84-utils
[root@centos-6 ~]# cd /etc/yum.repos.d/
[root@centos-6 yum.repos.d]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@centos-6 yum.repos.d]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@centos-6 yum.repos.d]# yum install -y kmod-drbd84 drbd84-utils


3.2、查看配置文件

##查看主配置文件

[root@centos-5 ~]# cat /etc/drbd.conf 
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";


##配置全局文件

[root@centos-5 ~]# cd /etc/drbd.d/
[root@centos-5 drbd.d]# ls
global_common.conf
[root@centos-5 drbd.d]# cp global_common.conf global_common.conf.bak  
[root@centos-5 drbd.d]# vim global_common.conf
global {
    usage-count no;  #是否參加DRBD使用統計,默認爲yes。官方統計drbd的裝機量
    # minor-count dialog-refresh disable-ip-verification
}
common {
    protocol C;      #使用DRBD的同步協議
    handlers {
        pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
    }
    startup {
        # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
    }
    options {
        # cpu-mask on-no-data-accessible
    }
    disk {
        on-io-error detach; #配置I/O錯誤處理策略爲分離
        # size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
        # disk-drain md-flushes resync-rate resync-after al-extents
        # c-plan-ahead c-delay-target c-fill-target c-max-rate
        # c-min-rate disk-timeout
    }
    net {
        # protocol timeout max-epoch-size max-buffers unplug-watermark
        # connect-int ping-int sndbuf-size rcvbuf-size ko-count
        # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
        # after-sb-1pri after-sb-2pri always-asbp rr-conflict
        # ping-timeout data-integrity-alg tcp-cork on-congestion
        # congestion-fill congestion-extents csums-alg verify-alg
        # use-rle
    }
    syncer {
        rate 1024M;    #設置主備節點同步時的網絡速率
    }
}

註釋: on-io-error 策略可能爲以下選項之一 

    detach 分離:這是默認和推薦的選項,如果在節點上發生底層的硬盤I/O錯誤,它會將設備運行在

Diskless無盤模式下 

    pass_on:DRBD會將I/O錯誤報告到上層,在主節點上,它會將其報告給掛載的文件系統,但是在此

節點上就往往忽略(因此此節點上沒有可以報告的上層) 

    -local-in-error:調用本地磁盤I/O處理程序定義的命令;這需要有相應的local-io-error調用的

資源處理程序處理錯誤的命令;這就給管理員有足夠自由的權力命令命令或是腳本調用local-io-error

處理I/O錯誤定義一個資源 


3.3、創建配置文件:

[root@centos-5 ~]# cat /etc/drbd.d/mfs.res 
resource mfs { #資源名稱
protocol C; #使用協議
meta-disk internal;
device /dev/drbd1; #DRBD設備名稱
syncer {
verify-alg sha1;# 加密算法
}
net {
allow-two-primaries;
}
on centos-5 {
disk /dev/sdb1; #drbd1使用的磁盤分區爲"mfs"
address 10.0.0.15:7789; #設置DRBD監聽地址與端口
}
on centos-6 {
disk /dev/sdb1;
address 10.0.0.16:7789;
}
}
##注:/dev/sdb1是我自己添加的一塊硬盤,然後分區出來的。

##把配置文件同步到對端

[root@centos-5 ~]# scp -rp /etc/drbd.d/* centos-6:/etc/drbd.d/


3.4、啓動drbd

##在centos-5上啓動

[root@centos-5 ~]# drbdadm create-md mfs
initializing activity log
initializing bitmap (96 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

##查看內核是否已經加載了模塊

[root@centos-5 ~]# modprobe drbd
[root@centos-5 ~]# lsmod | grep drbd
drbd                  396875  0 
libcrc32c              12644  2 xfs,drbd

##啓動並查看狀態

[root@centos-5 ~]# drbdadm up mfs
[root@centos-5 ~]# drbdadm -- --force primary mfs
[root@centos-5 ~]# cat /proc/drbd
version: 8.4.10-1 (api:1/proto:86-101)
GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22
 1: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----s
    ns:0 nr:0 dw:0 dr:912 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:3144572

##在對端(即centos-6)上執行

[root@centos-6 ~]# drbdadm create-md mfs
initializing activity log
initializing bitmap (96 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
[root@centos-6 ~]# modprobe drbd
[root@centos-6 ~]# drbdadm up mfs

##可以看到數據在同步的狀態

[root@centos-5 ~]# cat /proc/drbd
version: 8.4.10-1 (api:1/proto:86-101)
GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22
 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
    ns:138948 nr:0 dw:0 dr:140176 al:8 bm:0 lo:0 pe:2 ua:1 ap:0 ep:1 wo:f oos:3007356
        [>....................] sync'ed:  4.5% (3007356/3144572)K
        finish: 0:01:27 speed: 34,304 (34,304) K/sec
        
##同步完成
[root@centos-5 ~]# cat /proc/drbd
version: 8.4.10-1 (api:1/proto:86-101)
GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22

 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:3144572 nr:0 dw:0 dr:3145484 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0


3.5、格式化drbd1並掛載

##首先先要創建mfs的用戶mfs,並將掛載點的所屬用戶和組改爲mfs

[root@centos-5 ~]# mkdir /usr/local/mfs
[root@centos-5 ~]# useradd mfs
[root@centos-5 ~]# id mfs       ##用戶id和組id一定要相同
uid=1000(mfs) gid=1000(mfs) groups=1000(mfs)
[root@centos-5 ~]# chown -R mfs:mfs /usr/local/mfs
[root@centos-5 ~]# ll /usr/local
total 0
drwxr-xr-x  2 mfs  mfs   6 Oct 28 23:28 mfs
[root@centos-6 ~]# mkdir /usr/local/mfs
[root@centos-6 ~]# useradd mfs
[root@centos-6 ~]# id mfs
uid=1000(mfs) gid=1000(mfs) groups=1000(mfs)
[root@centos-6 ~]# chown -R mfs:mfs /usr/local/mfs

##格式化drbd1並掛載

[root@centos-5 ~]# mkfs.ext4 /dev/drbd1 
[root@centos-5 ~]# mount /dev/drbd1 /usr/local/mfs
[root@centos-5 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   50G  3.9G   47G   8% /
devtmpfs             478M     0  478M   0% /dev
tmpfs                489M   39M  450M   8% /dev/shm
tmpfs                489M  6.7M  482M   2% /run
tmpfs                489M     0  489M   0% /sys/fs/cgroup
/dev/mapper/cl-home   47G   33M   47G   1% /home
/dev/sda1           1014M  150M  865M  15% /boot
tmpfs                 98M     0   98M   0% /run/user/0
/dev/drbd1           2.9G  9.0M  2.8G   1% /usr/local/mfs
##掛載之後,我們發現目錄/usr/local/mfs的所屬組和所屬用戶發生的變化,這時我們要把所屬用戶和所屬組都改爲mfs
[root@centos-5 ~]# ll /usr/local/
total 4
drwxr-xr-x  3 root root 4096 Oct 28 23:38 mfs
[root@centos-5 ~]# chown -R mfs:mfs /usr/local/mfs
[root@centos-5 ~]# ll /usr/local/                 
total 4
drwxr-xr-x  3 mfs  mfs  4096 Oct 28 23:38 mfs


3.6、在drbd上安裝mfs Master

##安裝軟件包

[root@centos-5 src]# yum install zlib-devel -y
[root@centos-6 src]# yum install zlib-devel -y

##下載mfs安裝包

[root@centos-5 src]# wget 
https://github.com/moosefs/moosefs/archive/v3.0.96.tar.gz

##安裝mfs Master

[root@centos-5 src]# tar -xf v3.0.96.tar.gz 
[root@centos-5 src]# cd moosefs-3.0.96/
[root@centos-5 moosefs-3.0.96]#  ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@centos-5 moosefs-3.0.96]# make && make install

##安裝完之後也要檢查一下/usr/local/mfs目錄下的文件所屬用戶和所屬組是否是mfs,如果不是,就要改爲mfs
[root@centos-5 ~]# cd /usr/local/mfs/
[root@centos-5 mfs]# ll
total 36
drwxr-xr-x 2 root root  4096 Oct 28 23:47 bin
drwxr-xr-x 3 root root  4096 Oct 28 23:47 etc
drwx------ 2 mfs  mfs  16384 Oct 28 23:38 lost+found
drwxr-xr-x 2 root root  4096 Oct 28 23:47 sbin
drwxr-xr-x 4 root root  4096 Oct 28 23:47 share
drwxr-xr-x 3 root root  4096 Oct 28 23:47 var
[root@centos-5 mfs]# chown -R mfs:mfs /usr/local/mfs
[root@centos-5 mfs]# ll
total 36
drwxr-xr-x 2 mfs mfs  4096 Oct 28 23:47 bin
drwxr-xr-x 3 mfs mfs  4096 Oct 28 23:47 etc
drwx------ 2 mfs mfs 16384 Oct 28 23:38 lost+found
drwxr-xr-x 2 mfs mfs  4096 Oct 28 23:47 sbin
drwxr-xr-x 4 mfs mfs  4096 Oct 28 23:47 share
drwxr-xr-x 3 mfs mfs  4096 Oct 28 23:47 var


3.7、做主Master

[root@centos-5 moosefs-3.0.96]# cd /usr/local/mfs/etc/mfs/
[root@centos-5 mfs]# ls
mfsexports.cfg.sample  mfsmaster.cfg.sample  mfsmetalogger.cfg.sample  mfstopology.cfg.sample
[root@centos-5 mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@centos-5 mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg   ##因爲是官方的默認配置,我們投入即可使用。
[root@centos-5 mfs]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs     ##開啓元數據文件默認是empty文件,需要我們手工打開
##修改控制文件:
[root@centos-5 mfs]# vim mfsexports.cfg
*            /         rw,alldirs,mapall=mfs:mfs,password=123456
*            .          rw
##mfsexports.cfg 文件中,每一個條目就是一個配置規則,而每一個條目又分爲三個部分,其中第一部分是mfs客戶端的ip地址或地址範圍,第二部分是被掛載的目錄,第三個部分用來設置mfs客戶端可以擁有的訪問權限。


3.8、啓動mfs

##做啓動腳本

[root@centos-5 ~]# cat /etc/systemd/system/mfsmaster.service 
[Unit]
Description=mfs
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfsmaster start
ExecStop=/usr/local/mfs/sbin/mfsmaster stop
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target

[root@centos-5 ~]# chmod a+x /etc/systemd/system/mfsmaster.service   ##給執行權限

##同步啓動腳本到對端
[root@centos-5 ~]# scp /etc/systemd/system/mfsmaster.service centos-6:/etc/systemd/system/
[root@centos-5 ~]# ssh centos-6 chmod a+x /etc/systemd/system/mfsmaster.service

##做啓動測試,如果沒有問題就啓動腳本

[root@centos-5 ~]# /usr/local/mfs/sbin/mfsmaster start

##設爲開機自啓

[root@centos-5 ~]# systemctl enable mfsmaster


3.9、測試一下drbd的主從切換是否成功

##停掉服務並切換主從

[root@centos-5 ~]# systemctl stop mfsmaster
[root@centos-5 ~]# umount /usr/local/mfs
[root@centos-5 ~]#  drbdadm secondary mfs

##從掛載測試

[root@centos-6 ~]#  drbdadm primary mfs
[root@centos-6 ~]# mount /dev/drbd1 /usr/local/mfs
[root@centos-6 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/drbd1           2.9G   17M  2.8G   1% /usr/local/mfs
[root@centos-6 ~]# ll /usr/local/      ##檢查一下/usr/local/mfs的所屬組和用戶是否是mfs
total 4
drwxr-xr-x  8 mfs  mfs  4096 Oct 28 23:47 mfs
[root@centos-6 ~]# systemctl start mfsmaster
[root@centos-6 ~]# ps -ef | grep mfs
root       6520      2  0 08:21 ?        00:00:00 [drbd_w_mfs]
root       6523      2  0 08:21 ?        00:00:14 [drbd_r_mfs]
root       7439      2  0 08:59 ?        00:00:00 [drbd_a_mfs]
root       7440      2  0 08:59 ?        00:00:00 [drbd_as_mfs]
mfs        8242      1 41 09:32 ?        00:00:06 /usr/local/mfs/sbin/mfsmaster start
root       8244   7791  0 09:32 pts/1    00:00:00 grep --color=auto mfs

##測試成功,關閉mfs和drbd,並設爲開機自啓

[root@centos-6 ~]# systemctl stop drbd 
[root@centos-6 ~]# systemctl enable drbd 
[root@centos-6 ~]# systemctl stop mfsmaster
[root@centos-6 ~]# systemctl enable mfsmaster
[root@centos-5 ~]# systemctl stop drbd
[root@centos-5 ~]# systemctl enable drbd
[root@centos-5 ~]# systemctl enable mfsmaster


到這裏drbd和mfs在Master和Backup上就配完了,接下來在Master上配置crm。


4、配置crm


4.1、開啓配置工具

[root@centos-5 ~]# systemctl start corosync
[root@centos-5 ~]# systemctl enable corosync 
[root@centos-5 ~]# systemctl start pacemaker
[root@centos-5 ~]# systemctl enable pacemaker
[root@centos-5 ~]# ssh centos-6 systemctl restart corosync
[root@centos-5 ~]# ssh centos-6 systemctl enable corosync  
[root@centos-5 ~]# ssh centos-6 systemctl restart pacemaker
[root@centos-5 ~]# ssh centos-6 systemctl enable pacemaker


4.2、配置資源

56f7462c2fb7414a7f20922827eeb193.png-wh_

##具體配置
[root@centos-5 ~]# crm
crm(live)# configure
crm(live)configure# primitive mfs_drbd ocf:linbit:drbd params drbd_resource=mfs op monitor role=Master interval=10 timeout=20 op monitor role=Slave interval=20 timeout=20 op start timeout=240 op stop timeout=100    
crm(live)configure# verify
crm(live)configure# ms ms_mfs_drbd mfs_drbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# cd
crm(live)# status       ##配完一項資源都要查看一下,確保沒有問題
Stack: corosync
Current DC: centos-5 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Sun Oct 29 09:54:00 2017
Last change: Sun Oct 29 09:53:53 2017 by root via cibadmin on centos-5
2 nodes configured
2 resources configured
Online: [ centos-5 centos-6 ]
Full list of resources:
 Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ centos-5 ]
     Slaves: [ centos-6 ]



4.3、配置掛載資源

04bd8a2299e20d5809056fceadd30e4f.png-wh_

crm(live)# configure
crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/usr/local/mfs fstype=ext4 op start timeout=60 op stop timeout=60
crm(live)configure# verify
crm(live)configure# colocation ms_mfs_drbd_with_mystore inf: mystore ms_mfs_drbd
crm(live)configure# order ms_mfs_drbd_before_mystore Mandatory:  ms_mfs_drbd:promote mystore:start
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# cd
crm(live)# status
Stack: corosync
Current DC: centos-5 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Sun Oct 29 09:57:10 2017
Last change: Sun Oct 29 09:57:06 2017 by root via cibadmin on centos-5
2 nodes configured
3 resources configured
Online: [ centos-5 centos-6 ]
Full list of resources:
 Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ centos-5 ]
     Slaves: [ centos-6 ]
 mystore        (ocf::heartbeat:Filesystem):    Started centos-5


4.4、配置mfs資源

61c075fbc4c41602e6198e9e975161fd.png-wh_

crm(live)# configure
crm(live)configure#  primitive mfs systemd:mfsmaster op monitor timeout=100 interval=30 op start timeout=30 interval=0 op stop timeout=30 interval=0
crm(live)configure#  colocation mfs_with_mystore inf: mfs mystore
crm(live)configure# order mystor_befor_mfs Mandatory: mystore mfs
crm(live)configure# verify
WARNING: mfs: specified timeout 30 for start is smaller than the advised 100   ##可以不用管,只是我們設的時間低於默認時間
WARNING: mfs: specified timeout 30 for stop is smaller than the advised 100
crm(live)configure# commit
WARNING: mfs: specified timeout 30 for start is smaller than the advised 100
WARNING: mfs: specified timeout 30 for stop is smaller than the advised 100
crm(live)configure# cd
crm(live)# status
Stack: corosync
Current DC: centos-5 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Sun Oct 29 09:59:41 2017
Last change: Sun Oct 29 09:59:37 2017 by root via cibadmin on centos-5
2 nodes configured
4 resources configured
Online: [ centos-5 centos-6 ]
Full list of resources:
 Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ centos-5 ]
     Slaves: [ centos-6 ]
 mystore        (ocf::heartbeat:Filesystem):    Started centos-5
 mfs    (systemd:mfsmaster):    Started centos-5


4.5、配置vip

4b4cae994b36d2258943538bb77fc921.png-wh_

7df8218cdd077e4d0ac04fe0233fd8b7.png-wh_

crm(live)# configure
crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=10.0.0.150
crm(live)configure#  colocation vip_with_msf inf: vip mfs
crm(live)configure# verify
WARNING: mfs: specified timeout 30 for start is smaller than the advised 100
WARNING: mfs: specified timeout 30 for stop is smaller than the advised 100
crm(live)configure# commit
crm(live)configure# cd
crm(live)# status
Stack: corosync
Current DC: centos-5 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Sun Oct 29 10:05:45 2017
Last change: Sun Oct 29 10:05:42 2017 by root via cibadmin on centos-5
2 nodes configured
5 resources configured
Online: [ centos-5 centos-6 ]
Full list of resources:
 Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ centos-5 ]
     Slaves: [ centos-6 ]
 mystore        (ocf::heartbeat:Filesystem):    Started centos-5
 mfs    (systemd:mfsmaster):    Started centos-5
 vip    (ocf::heartbeat:IPaddr):        Stopped
##再查看一次,可以發現vip已經起來了
crm(live)# status
Stack: corosync
Current DC: centos-5 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum
Last updated: Sun Oct 29 10:05:58 2017
Last change: Sun Oct 29 10:05:42 2017 by root via cibadmin on centos-5
2 nodes configured
5 resources configured
Online: [ centos-5 centos-6 ]
Full list of resources:
 Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ centos-5 ]
     Slaves: [ centos-6 ]
 mystore        (ocf::heartbeat:Filesystem):    Started centos-5
 mfs    (systemd:mfsmaster):    Started centos-5
 vip    (ocf::heartbeat:IPaddr):        Started centos-5


4.6、show查看

12722a6caeb34462f5f4145ce82cf6ff.png-wh_


到這裏Master和Backup就已經配置完成了,接下來就要配置Metalogger、chunk server和client了。



5、安裝Metalogger Server

    前面已經介紹了,Metalogger Server 是 Master Server 的備份服務器。因此,Metalogger 

Server 的安裝步驟和 Master Server 的安裝步驟相同。並且,最好使用和 Master Server 配置一樣的

服務器來做 Metalogger Server。這樣,一旦主服務器master宕機失效,我們只要導入備份信息

changelogs到元數據文件,備份服務器可直接接替故障的master繼續提供服務。這是還沒有做高可用

時,爲了防止master因爲故障導致服務中斷,由於我們這次已經做了高可用,所以Metalogger Server可

以要也可以不要,在這裏,做最壞的打算,假設Master和Backup兩臺機都故障了,這時就需要

Metalogger Server了,在Master和Backup都沒有發生故障的情況下,Metalogger Server就作爲mfs的日

志服務器。


5.1、安裝Metalogger Server

##從Master上把安裝包copy過來

[root@centos-5 ~]# scp /usr/local/src/v3.0.96.tar.gz centos-7:/usr/local/src/


##安裝mfs

[root@centos-7 ~]# cd /usr/local/src/
[root@centos-7 src]# tar -xf v3.0.96.tar.gz 
[root@centos-7 src]# useradd mfs
[root@centos-7 src]# id mfs    ##一定要確保用戶id和組id一致
uid=1000(mfs) gid=1000(mfs) groups=1000(mfs)
[root@centos-7 src]# cd moosefs-3.0.96/
[root@centos-7 moosefs-3.0.96]# yum install zlib-devel -y
[root@centos-7 moosefs-3.0.96]#  ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs  --disable-mfschunkserver --disable-mfsmount
[root@centos-7 moosefs-3.0.96]# make && make install


##配置Metalogger Server

[root@centos-7 mfs]# chown -R mfs:mfs /usr/local/mfs   ##確保/usr/local/mfs的所屬用戶和組都是mfs
[root@centos-7 mfs]# ll
total 0
drwxr-xr-x 2 mfs mfs  20 Oct 29 10:26 bin
drwxr-xr-x 3 mfs mfs  17 Oct 29 10:26 etc
drwxr-xr-x 2 mfs mfs 123 Oct 29 10:26 sbin
drwxr-xr-x 4 mfs mfs  31 Oct 29 10:26 share
drwxr-xr-x 3 mfs mfs  17 Oct 29 10:26 var
[root@centos-7 mfs]# cd /usr/local/mfs/etc/mfs/
[root@centos-7 mfs]# ls
mfsexports.cfg.sample  mfsmaster.cfg.sample  mfsmetalogger.cfg.sample  mfstopology.cfg.sample
[root@centos-7 mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
[root@centos-7 mfs]# vim mfsmetalogger.cfg
MASTER_HOST = 10.0.0.150
注:
#MASTER_PORT = 9419     鏈接端口
# META_DOWNLOAD_FREQ = 24           # 元數據備份文件下載請求頻率,默認爲24小時,即每個一天從元數據服務器下載一個metadata.mfs.back文件。當元數據服務器關閉或者出故障時,metadata.mfs.back文件將小時,那麼要恢復整個mfs,則需要從metalogger服務器取得該文件。請注意該文件,它與日誌文件在一起,才能夠恢復整個被損壞的分佈式文件系統。


##啓動Metalogger Server

[root@centos-7 ~]# /usr/local/mfs/sbin/mfsmetalogger start
open files limit has been set to: 4096
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@centos-7 ~]# netstat -lantp|grep metalogger
tcp        0      0 10.0.0.17:41208         10.0.0.150:9419         ESTABLISHED 6823/mfsmetalogger


##查看Metalogger Server的日誌文件

[root@centos-7 ~]# ls /usr/local/mfs/var/mfs/
changelog_ml_back.0.mfs  changelog_ml_back.1.mfs  metadata.mfs.empty  metadata_ml.mfs.back

到這Metalogger Server就已經配置完成了。


6、配置chunk server

    兩臺chunk server(centos-8和centos-9)的配置都是一樣的。


6.1、安裝chunk server

[root@centos-5 ~]# scp /usr/local/src/v3.0.96.tar.gz centos-8:/usr/local/src/
[root@centos-8 ~]# useradd mfs
[root@centos-8 ~]# id mfs
uid=1000(mfs) gid=1000(mfs) groups=1000(mfs)
[root@centos-8 ~]#  yum install zlib-devel -y
[root@centos-8 ~]# cd /usr/local/src/
[root@centos-8 src]# tar -xf v3.0.96.tar.gz 
[root@centos-8 src]# cd moosefs-3.0.96/
[root@centos-8 moosefs-3.0.96]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs  --disable-mfsmaster --disable-mfsmount
[root@centos-8 moosefs-3.0.96]# make && make install
[root@centos-8 ~]# chown -R mfs:mfs /usr/local/mfs


6.2、配置chunk server

[root@centos-8 ~]# cd /usr/local/mfs/etc/mfs/
[root@centos-8 mfs]# mv mfschunkserver.cfg.sample mfschunkserver.cfg
[root@centos-8 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 10.0.0.150


6.3、配置mfshdd.cfg主配置文件

[root@centos-8 mfs]# mkdir /mfsdata
[root@centos-8 mfs]# chown -R mfs:mfs /mfsdata
[root@centos-8 mfs]# cp /usr/local/mfs/etc/mfs/mfshdd.cfg.sample /usr/local/mfs/etc/mfs/mfshdd.cfg
[root@centos-8 mfs]# vim  /usr/local/mfs/etc/mfs/mfshdd.cfg
/mfsdata


6.4、啓動chunk server

[root@centos-8 ~]# /usr/local/mfs/sbin/mfschunkserver start
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
initializing mfschunkserver modules ...
hdd space manager: path to scan: /mfsdata/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@centos-8 ~]# netstat -lantp|grep 9420
tcp        0      0 10.0.0.18:58920         10.0.0.150:9420         ESTABLISHED 6713/mfschunkserver

到這裏chunk server也配置完成了,接下來配置客戶端了。


7、配置client客戶端


7.1、安裝fuse

[root@centos-10 ~]# yum install fuse fuse-devel
[root@centos-10 ~]# modprobe fuse
[root@centos-10 ~]# lsmod | grep fuse 
fuse                   87741  1


7.2、安裝掛載客戶端

[root@centos-5 ~]# scp /usr/local/src/v3.0.96.tar.gz centos-10:/usr/local/src/
[root@centos-10 ~]# yum install zlib-devel -y
[root@centos-10 ~]# useradd mfs
[root@centos-10 ~]# id mfs
uid=1000(mfs) gid=1000(mfs) groups=1000(mfs)
[root@centos-10 ~]# cd /usr/local/src/
[root@centos-10 src]# tar -xf v3.0.96.tar.gz 
[root@centos-10 src]# cd moosefs-3.0.96/
[root@centos-10 moosefs-3.0.96]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
[root@centos-10 moosefs-3.0.96]# make && make install
[root@centos-10 ~]# chown -R mfs:mfs /usr/local/mfs


7.3、在客戶端上掛載文件系統

[root@centos-10 ~]# mkdir /mfs    ##創建掛載目錄
[root@centos-10 ~]# chown -R mfs:mfs /mfs  
[root@centos-10 ~]# /usr/local/mfs/bin/mfsmount /mfs -H 10.0.0.150 -p          
MFS Password:
mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to mfs:mfs ; users mapped to mfs:mfs
[root@centos-10 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   50G  3.8G   47G   8% /
devtmpfs             478M     0  478M   0% /dev
tmpfs                489M     0  489M   0% /dev/shm
tmpfs                489M  6.7M  482M   2% /run
tmpfs                489M     0  489M   0% /sys/fs/cgroup
/dev/sda1           1014M  121M  894M  12% /boot
/dev/mapper/cl-home   47G   33M   47G   1% /home
tmpfs                 98M     0   98M   0% /run/user/0
10.0.0.150:9421      100G  8.0G   93G   8% /mfs

##可以看到磁盤瞬間多了好多

7.4、我們可以寫入本地文件進行測試一下

[root@centos-10 ~]# cd /mfs/
[root@centos-10 mfs]# ls
[root@centos-10 mfs]# touch test.txt
[root@centos-10 mfs]# echo "123456" > test.txt 
[root@centos-10 mfs]# cat test.txt 
123456


7.5、觀察一下Master Server端的變化

[root@centos-5 ~]# cd /usr/local/mfs/var/mfs/
[root@centos-5 mfs]# ls
changelog.0.mfs  changelog.4.mfs    metadata.mfs.back.1  stats.mfs
changelog.1.mfs  metadata.mfs.back  metadata.mfs.empty
[root@centos-5 mfs]# cat changelog.0.mfs 
7: 1509246052|ACCESS(1)
8: 1509246068|CREATE(1,test.txt,1,438,18,1000,1000,0):2
9: 1509246068|ACQUIRE(1,2)
10: 1509246068|ATTR(2,420,1000,1000,1509246068,1509246068,0,0)
11: 1509246076|ACCESS(1)
12: 1509246077|LENGTH(2,0,1)
13: 1509246077|WRITE(2,0,1,0):1
14: 1509246078|LENGTH(2,7,0)
15: 1509246078|UNLOCK(1)
16: 1509246080|ACCESS(1)
17: 1509246081|AMTIME(2,1509246081,1509246077,1509246077)
18: 1509246090|ACQUIRE(1,1)


7.6、查看一下日誌數據的變化

[root@centos-7 ~]# cd /usr/local/mfs/var/mfs/
[root@centos-7 mfs]# cat changelog_ml.0.mfs 
7: 1509246052|ACCESS(1)
8: 1509246068|CREATE(1,test.txt,1,438,18,1000,1000,0):2
9: 1509246068|ACQUIRE(1,2)
10: 1509246068|ATTR(2,420,1000,1000,1509246068,1509246068,0,0)
11: 1509246076|ACCESS(1)
12: 1509246077|LENGTH(2,0,1)
13: 1509246077|WRITE(2,0,1,0):1
14: 1509246078|LENGTH(2,7,0)
15: 1509246078|UNLOCK(1)
16: 1509246080|ACCESS(1)
17: 1509246081|AMTIME(2,1509246081,1509246077,1509246077)
18: 1509246090|ACQUIRE(1,1)


    到這裏爲止,drbd+corosync+pacemaker+mfs構建高可用就已經搭建完成了,接下來,我們來測試一

下當Master宕機了,Backup會不會自動接管Master的服務;然後再測試一下,當Master和Backup都故障

了(當然了,做了高可用集羣之後一般不可能出現這種情況的,現在我們就是在模擬最極端的情況),

Metalogger Server上,導入備份信息changelogs到元數據文件,備份服務器Metalogger Server

可直接接替故障的master和backup繼續提供服務。



8、測試


8.1、測試一

在測試之前,先查看一下集羣的狀態

025d2544386d57c8dec41e037016fd3f.png-wh_

狀態正常,接下來就讓Master(centos-5)宕機,看看Backup(centos-6)會不會自動接管Master的服務。

8917321b79871eb4d1d3a2ff06848465.png-wh_

2a331a48f8fb52316e9b1ab2bb97e8a4.png-wh_

b1f1d23d74de596d346b8306cebd6f00.png-wh_

##可以看到,當Master宕機了之後,vip先飄到Backup上,接着是掛載盤drbd1(mystore),最後纔是mfs服務。


接下來檢查一下在客戶端還能不能正常寫文件到掛載點

bd0ff20094e8edea47c78ca6097fa56f.png-wh_

##依舊可以寫文件到掛載點


查看Backup端上的變化

8d7504d7082e39b863083c36601c0c91.png-wh_


查看一下日誌數據的變化

70f858cdfac7d8e0e94d15fe51327380.png-wh_


8.2、測試二

直接暫停centos-5和centos-6,來模擬兩臺機都發生故障了

9d969084a9b578662dd73fb2483c34a8.png-wh_

385fa7865e5d2ddb073d1ff3f7b3d315.png-wh_


##Metalogger Server服務器上的配置

[root@centos-7 ~]# cd /usr/local/mfs/var/mfs/
[root@centos-7 mfs]# ls
changelog_ml.0.mfs  changelog_ml_back.0.mfs  metadata.mfs.empty
changelog_ml.1.mfs  changelog_ml_back.1.mfs  metadata_ml.mfs.back
[root@centos-7 mfs]# mkdir /usr/local/mfs/mfs_backup    ##備份日誌文件
[root@centos-7 mfs]# cp * /usr/local/mfs/mfs_backup/
[root@centos-7 mfs]# cd /usr/local/mfs/etc/mfs/
[root@centos-7 mfs]# ls
mfsexports.cfg.sample  mfsmetalogger.cfg         mfstopology.cfg.sample
mfsmaster.cfg.sample   mfsmetalogger.cfg.sample
[root@centos-7 mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@centos-7 mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[root@centos-7 mfs]# vim mfsexports.cfg
*            /         rw,alldirs,mapall=mfs:mfs,password=123456
*            .          rw
[root@centos-7 mfs]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
[root@centos-7 mfs]# /usr/local/mfs/sbin/mfsmaster -a    ##當Master和Backup故障時,啓動要加-a
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
mfstopology configuration file (/usr/local/mfs/etc/mfstopology.cfg) not found - using defaults
loading metadata ...
loading sessions data ... ok (0.0000)
loading storage classes data ... ok (0.0000)
loading objects (files,directories,etc.) ... ok (0.6748)
loading names ... ok (0.0000)
loading deletion timestamps ... ok (0.0000)
loading quota definitions ... ok (0.0000)
loading xattr data ... ok (0.0000)
loading posix_acl data ... ok (0.0000)
loading open files data ... ok (0.0000)
loading flock_locks data ... ok (0.0000)
loading posix_locks data ... ok (0.0000)
loading chunkservers data ... ok (0.0000)
loading chunks data ... ok (0.0000)
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 1
directory inodes: 1
file inodes: 0
chunks: 0
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly


##兩臺chunk server上的配置

[root@centos-8 ~]# vim /usr/local/mfs/etc/mfs/mfschunkserver.cfg    ##Metalogger Server啓動完成之後修改checkserver的指向IP
MASTER_HOST = 10.0.0.17
[root@centos-8 ~]# /usr/local/mfs/sbin/mfschunkserver restart
open files limit has been set to: 16384
working directory: /usr/local/mfs/var/mfs
sending SIGTERM to lock owner (pid:6713)
waiting for termination terminated
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
initializing mfschunkserver modules ...
hdd space manager: path to scan: /mfsdata/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
stats file has been loaded
mfschunkserver daemon initialized properly


##客戶端的配置

[root@centos-10 ~]# umount /mfs -l      ##由於Master和Backup故障時,客戶端這裏還在使用着,所有要取消掛載時,要加-l。
[root@centos-10 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   50G  3.8G   47G   8% /
devtmpfs             478M     0  478M   0% /dev
tmpfs                489M     0  489M   0% /dev/shm
tmpfs                489M  6.7M  482M   2% /run
tmpfs                489M     0  489M   0% /sys/fs/cgroup
/dev/sda1           1014M  121M  894M  12% /boot
/dev/mapper/cl-home   47G   33M   47G   1% /home
tmpfs                 98M     0   98M   0% /run/user/0


##現在驗證客戶端還能正常使用掛載目錄

[root@centos-10 ~]# /usr/local/mfs/bin/mfsmount /mfs -H 10.0.0.17 -p    
MFS Password:
mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to mfs:mfs ; users mapped to mfs:mfs
[root@centos-10 ~]# df -h   ##掛載成功
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   50G  3.8G   47G   8% /
devtmpfs             478M     0  478M   0% /dev
tmpfs                489M     0  489M   0% /dev/shm
tmpfs                489M  6.7M  482M   2% /run
tmpfs                489M     0  489M   0% /sys/fs/cgroup
/dev/sda1           1014M  121M  894M  12% /boot
/dev/mapper/cl-home   47G   33M   47G   1% /home
tmpfs                 98M     0   98M   0% /run/user/0
10.0.0.17:9421       100G  8.0G   93G   8% /mfs
[root@centos-10 ~]# cd /mfs
[root@centos-10 mfs]# ls     ##可以看到原來寫入的文件還存在
1.txt  test.txt
[root@centos-10 mfs]# cat 1.txt 
test
[root@centos-10 mfs]# cat test.txt 
123456
[root@centos-10 mfs]# touch 2.txt   ##創建新文件
[root@centos-10 mfs]# echo "12345" > 2.txt 
[root@centos-10 mfs]# cat 2.txt 
12345


##查看Metalogger Server服務器上的變化

[root@centos-7 ~]# cd /usr/local/mfs/var/mfs/
[root@centos-7 mfs]# ls
changelog.0.mfs     changelog_ml.1.mfs       changelog_ml_back.1.mfs  metadata.mfs.empty
changelog_ml.0.mfs  changelog_ml_back.0.mfs  metadata.mfs.back        metadata_ml.mfs.back
[root@centos-7 mfs]# cat changelog_ml.0.mfs   ##之前的狀態 
7: 1509246052|ACCESS(1)
8: 1509246068|CREATE(1,test.txt,1,438,18,1000,1000,0):2
9: 1509246068|ACQUIRE(1,2)
10: 1509246068|ATTR(2,420,1000,1000,1509246068,1509246068,0,0)
11: 1509246076|ACCESS(1)
12: 1509246077|LENGTH(2,0,1)
13: 1509246077|WRITE(2,0,1,0):1
14: 1509246078|LENGTH(2,7,0)
15: 1509246078|UNLOCK(1)
16: 1509246080|ACCESS(1)
17: 1509246081|AMTIME(2,1509246081,1509246077,1509246077)
18: 1509246090|ACQUIRE(1,1)
19: 1509246717|RELEASE(1,2)
20: 1509247095|ACCESS(1)
21: 1509247100|CREATE(1,1.txt,1,438,18,1000,1000,0):3
22: 1509247100|ACQUIRE(1,3)
23: 1509247100|ATTR(3,420,1000,1000,1509247100,1509247100,0,0)
24: 1509247107|ACCESS(1)
25: 1509247114|WRITE(3,0,1,0):2
26: 1509247114|LENGTH(3,5,0)
27: 1509247114|UNLOCK(2)
28: 1509247114|AMTIME(3,1509247100,1509247114,1509247114)
29: 1509247116|ACCESS(1)
30: 1509247118|AMTIME(3,1509247117,1509247114,1509247114)
31: 1509247755|RELEASE(1,3)
[root@centos-7 mfs]# cat changelog.0.mfs     ##現在的狀態
32: 1509248470|SESDEL(1)
33: 1509248536|SESADD(#17965257504845738375,1,16,0000,1000,1000,1000,1000,1,9,0,4294967295,167772180,/mfs):2
34: 1509248548|ACCESS(1)
35: 1509248588|ACCESS(1)
36: 1509248604|ACCESS(1)
37: 1509248611|CREATE(1,2.txt,1,438,18,1000,1000,0):4
38: 1509248611|ACQUIRE(2,4)
39: 1509248611|ATTR(4,420,1000,1000,1509248611,1509248611,0,0)
40: 1509248618|ACCESS(1)
41: 1509248619|LENGTH(4,0,1)
42: 1509248619|WRITE(4,0,1,0):3
43: 1509248619|LENGTH(4,6,0)
44: 1509248619|UNLOCK(3)
45: 1509248621|ACCESS(1)
46: 1509248623|AMTIME(4,1509248622,1509248619,1509248619)
47: 1509248780|ACQUIRE(2,1)
48: 1509249231|ACCESS(1)
49: 1509249232|ACQUIRE(2,3)
50: 1509249233|AMTIME(3,1509249232,1509247114,1509247114)
51: 1509249234|ACCESS(1)
52: 1509249234|ACQUIRE(2,2)
53: 1509249235|AMTIME(2,1509249234,1509246077,1509246077)
54: 1509249268|RELEASE(2,4)



9、注意事項

1、用戶mfs的用戶id和組id一定要一致;

2、要檢查一下跟配置mfs服務有關的目錄所屬組和所屬用戶是否是mfs,一旦不是mfs的話,可能會導致服務啓動不了或者客戶端掛載不了目錄;

3、當master(或者backup)主機斷電活着重啓的時候先用-a恢復啓動;

4、在測試二中,客戶端在取消目錄掛載時,由於之前還在使用中,如果強行取消掛載會導致終端卡死在那,而且也無法取消掛載,要想取消掛載,要加 -l 這個選項才能取消掛載。



    這次的drbd+corosync+pacemaker+mfs構建高可用的實驗就完成了,如果有寫錯的地方,歡迎各位大神指出來,我會去修改的。如果有寫得不好的地方,請多多見諒!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章