實現MooseFS的高可用

#################################################################node

  • 開篇引題mysql

  • Distributed Replicated Block Deviceweb

  • 部署MFSsql

  • 部署Corosync+Pacemakervim

  • 故障模擬測試安全

  • 補充和總結bash

#################################################################服務器


開篇引題網絡

wKioL1NFSM2TZy5FAAIfCJj9_B0122.jpg


   直接上圖,有圖有真相啊!此圖是MFS網絡組成和運行原理,先不說圖中每種角色的做用(下文會有詳細說明),直觀信息告訴咱們客戶端不管是讀寫請求都須要與MasterServer通訊,而圖中MasterServer角色只有一個,所以單點故障的因素就顯而易見了。解決MFS的單點故障正是本文的初衷,接下來就介紹如何利用多種技術解決MFS的單點故障,實現MasterServer的高可用。
session


Distributed Replicated Block Device

wKiom1NFTqTAy-1WAAGOw7O5S_o836.jpg

   分佈式複製塊設備是Linux內核的存儲層中的一個分佈式存儲系統,可利用DRBD在兩臺Linux服務器之間共享塊設備、文件系統和數據,相似於一個網絡RAID1的功能,內核中的DRBD模塊監聽特定套接字上,複製系統調用產生的寫數據爲副本並經過TCP協議發送至DRBD從節點,由於節點間磁盤設備每個數據位都是相同的,因此DRBD能夠實現廉價塊級別的數據共享。

   DRBD工做模型

       主從模型(primary/secondary),同一時刻只能有一個節點提供服務(不然會產生腦裂),從節點沒法使用磁盤分區(掛載也不能夠)。

       主主模型(primary/primary),須要藉助於集羣文件系統並啓用分佈式文件鎖功能,並且寫性能不會有提高.

   DRBD管理

       內核模塊:drbd用戶空間

       管理工具:drbdadm,drbdsetup,drbdmeta

   工做流程(默認模型是Sync)

       Async:副本交於本地TCP/IP協議棧就返回(性能最高)

       SemiSync:副本交對方TCP/IP協議棧就返回(折中方案)

       Sync:副本被secondary存儲到磁盤中就返回(性能差)

   安裝配置DRBD(drbd內核模塊必須和內核版本徹底匹配)

rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64.rpm

   主配置文件

[root@one packages]# 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";

   全局配置文件

cat /etc/drbd.d/global_common.conf
global {
    usage-count yes;
    # minor-count dialog-refresh disable-ip-verification
}
common {
    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";
        # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
        # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
        # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
        # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
        # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
    }
    startup {
        # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
    }
    options {
        # cpu-mask on-no-data-accessible
    }
    disk {
        on-io-error detach;
        # 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 {
        cram-hmac-alg "sha1";
        shared-secret "soulboy";
        # 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 1000M;
    }
}

   定義資源mfs

[root@one packages]# cat /etc/drbd.d/mydata.res
resource mydata {
    on one.soulboy.com {
        device  /dev/drbd0;
        disk    /dev/sdb2;     #大小要一致
        address 192.168.1.61:7789;
        meta-disk internal;
    }
    on two.soulboy.com {
        device  /dev/drbd0;
        disk    /dev/sdb1;     #大小要一致
        address 192.168.1.62:7789;
        meta-disk internal;
    }
}
resource mfs {
    on one.soulboy.com {
        device  /dev/drbd1;
        disk    /dev/sdb3;
        address 192.168.1.61:7788;
        meta-disk internal;
    }
    on two.soulboy.com {
        device  /dev/drbd1;
        disk    /dev/sdb2;
        address 192.168.1.62:7788;
        meta-disk internal;
    }
}

   同步配置文件到從節點

scp /etc/drbd.d/* two.soulboy.com:/etc/drbd.d/

   初始化資源(分別在兩個節點上執行)

drbdadm create-md mfs

   啓動資源(分別在兩個節點上執行)

service drbd start

   將某節點變爲主節點(192.168.1.61爲主節點)

drbdadm primary --force mydata

   查看狀態肯定同步完畢

[root@one packages]# service drbd status
1:mfs     Connected  Primary/Secondary  UpToDate/UpToDate  C  /mfs     ext4

   格式化文件系統(在主節點)

mke2fs -t ext4 /dev/drbd1

   容許對方搶佔(分別在兩節點上執行)

drbdadm primary mfs

   開機不要自動啓動

chkconfig drbd off

部署MFS

   MFS工做原理

       MFS文件系統可以實現RAID功能,節約成本,不遜色於專業的存儲系統,能夠實如今線擴容。

   MFS的四種角色

       MasterServer(元數據服務器):負責管理各個ChunkServer及調度文件讀寫,回收文件空間及恢復多節點拷貝。

       Metalogger(元數據日誌服務器):負責備份管理服務器的變化日誌文件。

       ChunkServer(數據存儲服務器):真正存儲用戶數據的服務器,將文件切塊相互同步,遵從MasterServer的調度爲Client提供數據傳輸,Chunk節點數量越多,可靠性和MFS可用的磁盤空間就會越大。

       Client(客戶端):客戶端經過fuse內核接口遠程管理服務器上所管理的數據存儲服務器,和使用本地文件系統同樣。

   安裝配置元數據服務

mount /dev/drbd1 /mfs               #掛載drbd設備
groupadd -g 1000 mfs                #兩邊節點的uid要統一
useradd -u 1000 -g mfs -s /sbin/nologin mfs  #兩邊節點都須要建立
mkdir -pv /mfs                      #主節點建立數據目錄便可
chown -R mfs.mfs /mfs               #兩個節點修改目錄屬主和屬組爲mfs
tar xf mfs-1.6.26.tar.gz
cd mfs-1.6.26
./configure --prefix=/mfs --with-default-user=mfs --with-default-group=mfs
make && make install
cp /mfs/etc/mfsmaster.cfg.dist  /mfs/etc/mfsmaster.cfg
cp /mfs/etc/mfsexports.cfg.dist  /mfs/etc/mfsexports.cfg
cp /mfs/var/mfs/metadata.mfs.empty  /mfs/var/mfs/metadata.mfs

   主配置文件

vim /mfs/etc/mfsmaster.cfg
    # WORKING_USER = mfs            #運行用戶
    # WORKING_GROUP = mfs           #運行組
    # SYSLOG_IDENT = mfsmaster      #在syslog中標識本身
    # LOCK_MEMORY = 0               #是否執行mlockall()以免mfsmaster進程溢出(默認爲0)
    # NICE_LEVEL = -19              #運行的優先級
    # EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg   #目錄控制文件路徑
    # TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfstopology.cfg #拓撲類型文件路徑
    # DATA_PATH = /usr/local/mfs/var/mfs    #數據存放路徑(changelog,sessions,stats)
    # BACK_LOGS = 50                        #元數據的改變日誌文件數量
    # BACK_META_KEEP_PREVIOUS = 1           #
    # REPLICATIONS_DELAY_INIT = 300         #延遲複製時間(300秒)
    # REPLICATIONS_DELAY_DISCONNECT = 3600  #ChunkServer斷開復制的延遲
    # MATOML_LISTEN_HOST = *                #元數據日誌服務器監聽的IP地址(*表明任何IP)
    # MATOML_LISTEN_PORT = 9419             #元數據日誌服務器監聽的端口地址(9419)
    # MATOCS_LISTEN_HOST = *                #用於ChunkServer鏈接的IP地址(*表明任何IP)
    # MATOCS_LISTEN_PORT = 9420             #用於ChunkServer鏈接的端口(9420)
    # MATOCL_LISTEN_HOST = *                #用於客戶端鏈接的地址
    # MATOCL_LISTEN_PORT = 9421             #用於客戶端鏈接的端口
    # CHUNKS_LOOP_CPS = 100000       
    # CHUNKS_LOOP_TIME = 300                #Chunks迴環頻率
    # CHUNKS_SOFT_DEL_LIMIT = 10     
    # CHUNKS_HARD_DEL_LIMIT = 25
    # CHUNKS_WRITE_REP_LIMIT = 2            #在一個循環裏複製到一個ChunkServer的最大Chunks數目
    # CHUNKS_READ_REP_LIMIT = 10
    # REJECT_OLD_CLIENTS = 0                #彈出低於1.6.0客戶端的鏈接

   目錄掛載控制文件

vim /mfs/etc/mfsexports.cfg #分爲三個部分,無需修改
*                       .           rw
*                       /           rw,alldirs,maproot=0
客戶端IP         被掛載目錄       客戶端擁有的權限

   爲MasterServer提供lsb格式啓動腳本

cat /etc/init.d/mfsmaster
# chkconfig: 345 91 10
# description: mfs start.
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
path="/mfs/sbin"
[ "${NETWORKING}" = "no" ] && exit 0
start() {
$path/mfsmaster start
$path/mfscgiserv start
}
stop() {
$path/mfsmaster stop
$path/mfscgiserv start
}
restart() {
$path/mfsmaster restart
$path/mfscgiserv restart
}
status() {
$path/mfsmaster test
$path/mfscgiserv test
}
case "$1" in
 start)
     start
     ;;
 stop)
     stop
     ;;
 restart)
     restart
     ;;
 status)
     status
     ;;
 *)
     echo $"Usage: $0 start|stop|restart|status"
     exit 1
     esac
     exit 0

   修改權限

chmod 755 /etc/init.d/mfsmaster

   導出命令

echo 'export PATH=$PATH:/mfs/sbin' > /etc/profile.d/mfs.sh
. /etc/profile.d/mfs.sh

   同步啓動腳本至從節點

scp -p /etc/init.d/mfsmaster two:/etc/init.d/

   關閉服務卸載drbd設備

service mfsmaster stop
umount /dev/drbd1


部署Corosync+Pacemaker

wKiom1NFX5jzjqXfAAI-RkHOIo4110.jpg

   Corosync是集羣管理套件的一部分,它在傳遞信息的時候能夠經過一個簡單的配置文件來定義信息傳遞的方式和協議等,RHCS集羣套件就是基於corosync實現。但corosync只提供了message layer的能力。集羣的資源管理則須要Pacemaker,其管理接口有兩個分別是crmsh和pcs。

   環境準備

       service NetworkManager stop

       時間同

       主機名稱解析的結果等於uname -n

   安裝(pacemaker做爲corosync的插件運行)

yum install -y corosync pacemaker

   資源管理器配置接口基於crmsh

yum install -y crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm

   生成密鑰

corosync-keygen
cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

   配置文件

vim /etc/corosync/corosync.conf #添加pacemaker插件
            compatibility: whitetank    #是否兼容0.8版本的corosync
            totem {                     #用來定義集羣節點心跳信息傳遞
                version: 2              #版本號
                secauth: on             #啓用安全認證機制
                threads: 0              #啓用多少線程完成心跳信息傳遞
                interface {                   #定義心跳信息傳遞的接口
                    ringnumber: 0             #避免循環轉發心跳信息
                    bindnetaddr: 192.168.2.0  #指定網卡的網絡地址
                    mcastaddr: 226.194.61.21   #心跳信息使用的組播地址
                    mcastport: 5405            #組播監聽端口
                    ttl: 1
                }
            }
            logging {               #心跳信息層日誌
                fileline: off       #
                to_stderr: no       #是否把錯誤信息發往屏幕
                to_logfile: yes     #使用自定義日誌文件logfile
                to_syslog: no       #是否記錄到系統日誌
                logfile: /var/log/cluster/corosync.log
                debug: off          #調試功能
                timestamp: on       #每次記錄心跳信息是否記錄時間戳
                logger_subsys {
                    subsys: AMF
                    debug: off
                }
            }
            amf {
                mode: disabled
            }
            service {       #添加pacemaker插件
                ver: 0
                name: pacemaker
            }
            aisexec {       #可省略
                user: root
                group: root
            }

   複製配置文件到其餘節點

scp -p /etc/corosync/corosync.conf /etc/corosync/authkey two.soulboy.com:/etc/corosync/

  分別在兩節點啓動corosync服務

service corosync start

   使用crmsh接口定義drbd資源(忽略法定票數、禁用stonith設備)

crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# property stonith-enabled=false

   定義原始資源

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   #定義drbd資源
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"   #定義drbd的克隆資源、克隆屬性
crm(live)configure# primitive mfsstore ocf:heartbeat:Filesystem params device="/dev/drbd1" directory="/mfs" fstype="ext4" op monitor interval=40 timeout=40 op start timeout=60 op stop timeout=60   #定義本地掛載資源
crm(live)configure# primitive mfsip ocf:heartbeat:IPaddr params ip="192.168.1.40" op monitor interval=20 timeout=20 on-fail=restart   #定義vip
crm(live)configure# primitive mfsserver lsb:mfsmaster   #定義mfs服務

   定義colocation約束(資源運行在同一個節點上的偏好)

crm(live)configure# colocation mfsstore_with_ms_mfs_drbd_master inf: mfsstore ms_mfs_drbd:Master   #掛載資源追隨drbd主資源在一塊兒
crm(live)configure# colocation mfsserver_with_mfsstore inf: mfsserver mfsstore   #mfs服務追隨掛載資源
crm(live)configure# colocation mfsip_with_mfsserver inf: mfsip mfsserver   #vip追隨mfs服務

 定義資源組(若是定義了資源組就沒有必要定義colocation約束了)

crm(live)configure# group ha_mfsservice mfsstore mfsserver mfsip   #本文沒有這樣作,但特此說明這樣作也是能夠的

   定義order約束(資源啓動和關閉的次序)  

crm(live)configure# order ms_mfs_drbd_before_mfsstore mandatory: ms_mfs_drbd:promote mfsstore:start   #節點上存在drbdMaster才能啓動mystore服務
crm(live)configure# order mfsstore_before_mfsserver mandatory: mfsstore:start mfsserver:start   #mystore服務啓動才能啓動mfs服務
crm(live)configure# order mfsip_before_mfsserver mandatory: mfsip mfsserver   #vip啓動才能啓動mfs服務   

 定義location約束(資源對節點的傾向性)

location mfsservice_prefer_one ha_mfsservice 500: one.soulboy.com   #主節點從故障中回覆是否能夠將資源搶奪回來,本文沒有這樣作,特此說明這樣作是能夠完成資源搶佔的。

   檢查語法並保存

crm(live)configure# verify
crm(live)configure# commit

   查看集羣狀態(發現資源都運行在主節點上)

[root@one packages]# crm
crm(live)# status
Online: [ one.soulboy.com two.soulboy.com ]
Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ one.soulboy.com ]
     Slaves:  [ two.soulboy.com ]
 mfsstore   (ocf::heartbeat:Filesystem):    Started one.soulboy.com
 mfsserver  (lsb:mfsmaster):                Started one.soulboy.com
 mfsip      (ocf::heartbeat:IPaddr):        Started one.soulboy.com

  查看驗證

[root@one ~]# drbd-overview               #drbd資源正常
  1:mfs/0     Connected Primary/Secondary UpToDate/UpToDate C r----- /mfs    ext4 5.0G 142M 4.6G 3%
[root@one ~]# service mfsmaster status       #mfs資源正常
mfsmaster pid: 13966
mfscgiserv pid:14158
[root@one ~]# ip addr show  | grep 192.168.1.40  #vip資源正常
    inet 192.168.1.40/24 brd 192.168.1.255 scope global secondary eth0
[root@one ~]# ls /mfs               #掛載資源正常
etc  lost+found  sbin  share  var

故障模擬測試

   安裝ChunkServer

useradd mfs -s /sbin/nologin
tar xf mfs-1.6.26.tar.gz
cd mfs-1.6.26
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
make && make install
cp /usr/local/mfs/etc/mfschunkserver.cfg.dist /usr/local/mfs/etc/mfschunkserver.cfg
cp /usr/local/mfs/etc/mfshdd.cfg.dist /usr/local/mfs/etc/mfshdd.cfg

   主配置文件

vim /usr/local/mfs/etc/mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfschunkserver
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /usr/local/mfs/var/mfs
# MASTER_RECONNECTION_DELAY = 5
# BIND_HOST = *
MASTER_HOST = 192.168.1.40         #元數據服務器的地址
MASTER_PORT = 9420                 #元數據服務器監聽端口
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422       #此端口用戶和其餘ChunkServer間複製數據
# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg   #分配給MFS磁盤使用空間配置文件路徑
# HDD_TEST_FREQ = 10
# LOCK_FILE = /var/run/mfs/mfschunkserver.lock
# BACK_LOGS = 50
# CSSERV_TIMEOUT = 5

   磁盤空間配置文件

vim /usr/local/mfs/etc/mfshdd.cfg
/data      #/data是一個MFS的分區,實例化爲本機一個獨立的磁盤掛載分區。

   修改權限並啓動服務

chown -R mfs:mfs /data
mfschunkserver start

   Client編譯安裝

   MFS客戶端依賴於fuse

tar xf fuse-2.9.2.tar.gz
cd fuse-2.9.2
./configure
make && make install
vim /etc/profile     #在最後添加
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile   #即時生效
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

   安裝MFS客戶端

useradd mfs -s /sbin/nologin
tar xf mfs-1.6.26.tar.gz
cd mfs-1.6.26
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
make && make install
modprobe fuse    #加載fuse到內核

   掛載MFS文件系統

mkdir /webdata       #建立本地目錄做爲掛載點
/usr/local/mfs/bin/mfsmount /webdata -H 192.168.1.40   #掛載MFS到本地/webdata目錄

   掛載MFSMeta文件系統

mkdir /webdatameta   #建立本地MFSMeta目錄
/usr/local/mfs/bin/mfsmount -m /webdatameta -H 192.168.1.40   #掛載MFSMeta文件系統

   client建立文件並查看信息(正常)

[root@five /]# echo "123" > /webdata/one   #建立文件
[root@five /]# mfsfileinfo  /webdata/one  #查看副本和存儲節點
/webdata/one:
    chunk 0: 0000000000000006_00000001 / (id:6 ver:1)
        copy 1: 192.168.1.50:9422
        copy 2: 192.168.1.64:9422

   登陸web管理控制檯(正常)

wKiom1NFcaqDOh_vAAJDlBgddZY353.jpg

   模擬主節點故障

crm(live)node# standby    #離線,等待幾秒鐘
crm(live)node# online     #上線
crm(live)node# cd         #回退
crm(live)# status         #查看集羣資源狀態
Online: [ one.soulboy.com two.soulboy.com ]
 Master/Slave Set: ms_mfs_drbd [mfs_drbd]
     Masters: [ two.soulboy.com ]
     Slaves: [ one.soulboy.com ]
 mfsstore   (ocf::heartbeat:Filesystem):    Started two.soulboy.com
 mfsserver  (lsb:mfsmaster):                Started two.soulboy.com
 mfsip      (ocf::heartbeat:IPaddr):        Started two.soulboy.com

   client再次建立文件並查看副本數(正常)

[root@five /]# echo "123" > /webdata/two
[root@five /]# mfsfileinfo  /webdata/two
/webdata/two:
    chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
        copy 1: 192.168.1.50:9422
        copy 2: 192.168.1.64:9422

   再次登陸web管理控制檯(正常)

wKiom1NFdEKAHQEPAAJDlBgddZY112.jpg


補充和總結

   解決MFS單點故障的主要思路是將MasterServer安裝在drbd設備目錄中,經過corosync+pacemaker將drbd、vip、mount、mfsmaster資源粘合在一塊兒,並經過colocation和order的約束保證了資源間依賴關係和啓動次序,此外mfsmaster的啓動在pacemaker中定義爲lsb風格RA,也就是形如/etc/init.d/目錄下的sysv風格的腳本。值得一提的是pacemaker的管理接口,本文中使用的是crmsh,而pcs接口有着比crmsh更強大的功能,能夠實現管理集羣整個生命週期,支持節點的添加、移除、啓動、關閉等操做。

   實現mysql的高可用也能夠經過本文這種思路實現,具體步驟可參考本文,這裏補充下pcs接口的用法,方便讀者作對比。

pcs resource create myvip ocf:heartbeat:IPaddr params ip=192.168.1.70 op monitor interval=20 timeout=20 on-fail=restart   #定義vip
pcs resource create mystore ocf:heartbeat:Filesystem params device="192.168.1.50:/mysqldata" directory="/mydata" fstype="nfs" op monitor interval=40 timeout=40 on-fail=restart op start timeout=60 op stop timeout=60   #定義nfs
pcs resource create mysqlserver lsb:mysqld op monitor interval=20 timeout=20 on-fail=restart   #定義httpd
pcs resource group add mysqlservice myvip mystore mysqlserver   #定義webservice資源組
pcs constraint location mysqlservice prefers two.soulboy.com=500   #定義資源傾向性,資源組webservice對節點二的傾向性爲500
pcs constraint order start myvip then start mystore   #定義資源的order執行次序,這個貌似不能一會兒定義三個資源月約束
pcs constraint order start mystore then start mysqlserver   #定義資源的order執行次序
pcs constraint colocation add myvip mystore   #定義colocation,若是有資源組能夠省略。這個貌似不能一次定義三個資源月約束
pcs constraint colocation add mystore mysqlserver   #定義colocation

   實現mfs的高可用也能夠經過heartbeat+drbd來實現,思路和本文相似,已經大牛撰寫,文章內容優質,請參考:  qzhijun的BLOG

相關文章
相關標籤/搜索