高可用分布式存儲(Corosync+Pacemaker+DRBD+MooseFS)
高可用分布式存儲(Corosync+Pacemaker+DRBD+MooseFS)
配置步驟:
(1) 安裝與配置DRBD編譯安裝Master-server
(2)安裝配置使用pcs安裝corosync+pacemaker
(3)安裝crm配置安裝mfs+DRBD+corosync+pacemaker的高可用集群
(4)編譯安裝Chunk-server和Matelogger主機
(5)安裝mfs客戶端測試高可用集群
(個人覺得還是先安裝好drbd,然後安裝master-server,最後才安裝chunk-server和matelogger主機。因為之前的配置的時候出現過掛載目錄寫不進數據的情況,後來經過排查最終把drbd的掛載磁盤格式化後重新安裝chunk-server和matelogger主機。)
一、介紹
DRBD:
DRBD是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲復制解決方案。 DRBD Logo數據鏡像:實時、透明、同步(所有服務器都成功後返回)、異步(本地服務器成功後返回)。DBRD的核心功能通過Linux的內核實現,最接近系統的IO棧,但它不能神奇地添加上層的功能比如檢測到EXT3文件系統的崩潰。DBRD的位置處於文件系統以下,比文件系統更加靠近操作系統內核及IO棧。
MooseFS:
MooseFS(mfs)被稱為對象存儲,提供了強大的擴展性、高可靠性和持久性。它能夠將文件分布存儲於不同的物理機器上,對外卻提供的是一個透明的接口的存儲資源池。它還具有在線擴展(這是個很大的好處)、文件切塊存儲、讀寫效率高等特點。
MFS分布式文件系統由元數據服務器(Master Server)、元數據日誌服務器(Metalogger Server)、數據存儲服務器(Chunk Server)、客戶端(Client)組成。
(1)元數據服務器:MFS系統中的核心組成部分,存儲每個文件的元數據,負責文件的讀寫調度、空間回收和在多個chunk server之間的數據拷貝等。目前MFS僅支持一個元數據服務器,因此可能會出現單點故障。針對此問題我們需要用一臺性能很穩定的服務器來作為我們的元數據服務器,這樣可以降低出現單點故障的概率。
(2) 元數據日誌服務器:元數據服務器的備份節點,按照指定的周期從元數據服務器上將保存元數據、更新日誌和會話信息的文件下載到本地目錄下。當元數據服務器出現故障時,我們可以從該服務器的文件中拿到相關的必要的信息對整個系統進行恢復。
此外,利用元數據進行備份是一種常規的日誌備份手段,這種方法在某些情況下並不能完美的接管業務,還是會造成數據丟失。此次將采用通過iSCSI共享磁盤對元數據節點做雙機熱備。
(3) 數據存儲服務器:負責連接元數據管理服務器,聽從元數據服務器的調度,提供存儲空間,並為客戶端提供數據傳輸,MooseFS提供一個手動指定每個目錄的備份個數。假設個數為n,那麽我們在向系統寫入文件時,系統會將切分好的文件塊在不同的chunk server上復制n份。備份數的增加不會影響系統的寫性能,但是可以提高系統的讀性能和可用性,這可以說是一種以存儲容量換取寫性能和可用性的策略。
(4) 客戶端:使用mfsmount的方式通過FUSE內核接口掛接遠程管理服務器上管理的數據存儲服務器到本地目錄上,然後就可以像使用本地文件一樣來使用我們的MFS文件系統了。
個人總結筆記:
分布式存儲:要使用源數據做(調度的作用),所以源數據也要做高可用
ceph:雲,openstack,kubernats,剛出來,可能不太穩定
glusterfs:存儲大文件。支持塊設備,FUSE,直接掛載
mogilefs:性能高,海量小文件。但是FUSE性能不太好,需要折騰。支持對象存儲,需要編程語言調用API,最大優勢是有api
fastDFS:mogilefs的C語言實現形式,國人開發,不支持FUSE..存儲內存,也支持海量小文件,都存在內存裏面,所以很快(相對缺陷很大)
HDFS:海量大文件。(google的)
moosefs:(這次主要介紹因為國內比較受歡迎)存儲海量小文件,支持FUSE.加服務器把ip指向源數據服務器就自動做成ha。
常用高可用集群解決方案:
Heatbeat+peachmaker:已慢慢淘汰
Cman+rgmanager
Cman+pacemaker
Corosync+pacemaker(corosync:提供信息傳遞、不做任何事情。只做心跳檢測。Pacemaker:只作為資源管理器)
cman+clvm(一般做磁盤塊的高可用cman:也逐漸淘汰,因為corosync有個優秀的投票機制。)
環境介紹:
系統版本: centos7
Yum源:http://mirrors.aliyun.com/repo/
cml1=Master Server(master):192.168.5.101 (VIP:192.168.5.200)
cml2=Master Server(slave):192.168.5.102
cml5=Chunk server:192.168.5.104
cml4=Chunk server:192.168.5.105
cml5=Metalogger Server:192.168.5.103
cml6=Client:192.168.5.129
二、配置步驟
(1)安裝與配置DRBD編譯安裝Master-server
1、修改hosts文件保證hosts之間能夠互相訪問:
[root@cml1 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4localhost4.localdomain4
::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain6
192.168.5.101 cml1 mfsmaster
192.168.5.102 cml2
192.168.5.103 cml5
192.168.5.104 cml3
192.168.5.105 cml4
192.168.5.129 cml6
2、修改ssh互信:
[root@cml1 ~]#ssh-keygen [root@cml1 ~]#ssh-copy-id cml2
3、設置時鐘同步:
[root@cml1 ~]#crontab -l */5 * * * *ntpdate cn.pool.ntp.org
4、安裝derb:
# rpm --importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org # rpm -Uvhhttp://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # yum install-y kmod-drbd84 drbd84-utils
5、主配置文件:
/etc/drbd.conf#主配置文件
/etc/drbd.d/global_common.conf#全局配置文件
6、查看主配置文件:
[root@cml1 ~]#cat /etc/drbd.conf
# You can findan example in /usr/share/doc/drbd.../drbd.conf.example
include"drbd.d/global_common.conf";
include"drbd.d/*.res";
7、配置文件說明:
[root@cml1 ~]#vim /etc/drbd.d/global_common.conf global { usage-count no; #是否參加DRBD使用統計,默認為yes。官方統計drbd的裝機量 # minor-count dialog-refreshdisable-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-timeoutoutdated-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-errorfencing disk-barrier disk-flushes # disk-drain md-flushes resync-rateresync-after al-extents # c-plan-ahead c-delay-targetc-fill-target c-max-rate # c-min-rate disk-timeout } net { # protocol timeout max-epoch-sizemax-buffers unplug-watermark # connect-int ping-int sndbuf-size rcvbuf-sizeko-count # allow-two-primaries cram-hmac-algshared-secret after-sb-0pri # after-sb-1pri after-sb-2prialways-asbp rr-conflict # ping-timeout data-integrity-algtcp-cork on-congestion # congestion-fill congestion-extentscsums-alg verify-alg # use-rle } syncer { rate 1024M; #設置主備節點同步時的網絡速率 } }
8、創建配置文件:
[root@cml1 ~]#cat /etc/drbd.d/mfs.res resource mfs { protocol C; meta-diskinternal; device/dev/drbd1; syncer { verify-alg sha1; } net { allow-two-primaries; } on cml1 { disk/dev/sdb1; address192.168.5.101:7789; } on cml2 { disk/dev/sdb1; address192.168.5.102:7789; } }
9、然後把配置文件copy到對面的機器上:
scp -rp /etc/drbd.d/* cml2:/etc/drbd.d/
10、在cml1上面啟動:
[root@cml1~]# drbdadm create-md mfs initializingactivity log initializingbitmap (160 KB) to all zero Writing metadata... New drbd metadata block successfully created. [root@cml1 ~]#modprobe drbd ##查看內核是否已經加載了模塊: [[email protected]]# lsmod | grep drbd drbd 396875 1 libcrc32c 12644 4 xfs,drbd,ip_vs,nf_conntrack ### [root@cml1 ~]#drbdadm up mfs [root@cml1 ~]#drbdadm -- --force primary mfs 查看狀態: [root@cml1 ~]#cat /proc/drbd version:8.4.10-1 (api:1/proto:86-101) GIT-hash:a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-1514: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:0ua:0 ap:0 ep:1 wo:f oos:5240636
10、在對端(cml2)節點執行:
[root@cml2 ~]# drbdadmcreate-md mfs [root@cml2 ~]# modprobe drbd [root@cml2 ~]# drbdadm up mfs
11、格式化並掛載:
[root@cml1 ~]#mkfs.ext4 /dev/drbd1 [root@cml1 ~]#mkdir /usr/local/mfs [root@cml1 ~]#mount /dev/drbd1 /usr/local/mfs [root@cml1 ~]#df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-rootxfs 19G 6.8G 13G 36% / devtmpfs devtmpfs 501M 0 501M 0% /dev tmpfs tmpfs 512M 56M 456M 11% /dev/shm tmpfs tmpfs 512M 33M 480M 7% /run tmpfs tmpfs 512M 0 512M 0% /sys/fs/cgroup /dev/sda1 xfs 521M 160M 362M 31% /boot tmpfs tmpfs 103M 0 103M 0% /run/user/0 /dev/drbd1 ext4 5.2G 30M 4.9G 1% /usr/local/mfs
####註意要想使得從可以掛載,我們必須,先把主切換成叢,然後再到從上面掛載:
###查看狀態:
[root@cml1 ~]#cat /proc/drbd version:8.4.10-1 (api:1/proto:86-101) GIT-hash:a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-1514:23:22 1: cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDate C r----- ns:520744 nr:0 dw:252228 dr:300898 al:57bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
12、安裝與配置Master Server:
##MFS安裝:下載3.0包:
[root@cml1src]# yum install zlib-devel -y [root@cml1src]# wget https://github.com/moosefs/moosefs/archive/v3.0.96.tar.gz
(1)安裝master:
[[email protected]]# useradd mfs [root@cml1src]# tar -xf moosefs.3.0.96.tar.gz [root@cml1src]# cd moosefs-3.0.96/ [[email protected]]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount [[email protected]]# ls /usr/local/mfs/ bin etc sbin share var
(etc和var目錄裏面存放的是配置文件和MFS的數據結構信息,因此請及時做好備份,防止災難損毀。做了Master Server雙機之後,就可以解決這個問題。)
##註意:所有主機上的mfs,用戶id和組id要一樣:
(2)配置master:
[root@cml1mfs]# pwd /usr/local/mfs/etc/mfs [root@cml1mfs]# ls mfsexports.cfg.sample mfsmaster.cfg.sample mfsmetalogger.cfg.sample mfstopology.cfg.sample
##都是sample文件,所以我們要命名成.cfg文件:
[root@cml1mfs]# cp mfsexports.cfg.sample mfsexports.cfg [root@cml1mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
(3)看一下默認配置的參數:
[root@cml1mfs]# vim mfsmaster.cfg
# WORKING_USER = mfs # 運行 master server 的用戶
# WORKING_GROUP = mfs # 運行 master server 的組
# SYSLOG_IDENT = mfsmaster # 是master server在syslog中的標識,也就是說明這是由master serve產生的
# LOCK_MEMORY = 0 # 是否執行mlockall()以避免mfsmaster 進程溢出(默認為0)
# NICE_LEVEL = -19 # 運行的優先級(如果可以默認是 -19; 註意: 進程必須是用root啟動)
# EXPORTS_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfsexports.cfg # 被掛載目錄及其權限控制文件的存放路徑
# TOPOLOGY_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfstopology.cfg # mfstopology.cfg文件的存放路徑
# DATA_PATH = /usr/local/mfs-1.6.27/var/mfs # 數據存放路徑,此目錄下大致有三類文件,changelog,sessions和stats;
# BACK_LOGS = 50 # metadata的改變log文件數目(默認是 50)
# BACK_META_KEEP_PREVIOUS = 1 # metadata的默認保存份數(默認為1)
# REPLICATIONS_DELAY_INIT = 300 # 延遲復制的時間(默認是300s)
# REPLICATIONS_DELAY_DISCONNECT = 3600 # chunkserver斷開的復制延遲(默認是3600)
# MATOML_LISTEN_HOST = * # metalogger監聽的IP地址(默認是*,代表任何IP)
# MATOML_LISTEN_PORT = 9419 # metalogger監聽的端口地址(默認是9419)
# MATOML_LOG_PRESERVE_SECONDS = 600
# MATOCS_LISTEN_HOST = * # 用於chunkserver連接的IP地址(默認是*,代表任何IP)
# MATOCS_LISTEN_PORT = 9420 # 用於chunkserver連接的端口地址(默認是9420)
# MATOCL_LISTEN_HOST = * # 用於客戶端掛接連接的IP地址(默認是*,代表任何IP)
# MATOCL_LISTEN_PORT = 9421 # 用於客戶端掛接連接的端口地址(默認是9421)
# CHUNKS_LOOP_MAX_CPS = 100000 # chunks的最大回環頻率(默認是:100000秒)
# CHUNKS_LOOP_MIN_TIME = 300 # chunks的最小回環頻率(默認是:300秒)
# CHUNKS_SOFT_DEL_LIMIT = 10 # 一個chunkserver中soft最大的可刪除數量為10個
# CHUNKS_HARD_DEL_LIMIT = 25 # 一個chuankserver中hard最大的可刪除數量為25個
# CHUNKS_WRITE_REP_LIMIT = 2 # 在一個循環裏復制到一個chunkserver的最大chunk數目(默認是1)
# CHUNKS_READ_REP_LIMIT = 10 # 在一個循環裏從一個chunkserver復制的最大chunk數目(默認是5)
# ACCEPTABLE_DIFFERENCE = 0.1 # 每個chunkserver上空間使用率的最大區別(默認為0.01即1%)
# SESSION_SUSTAIN_TIME = 86400 # 客戶端會話超時時間為86400秒,即1天
# REJECT_OLD_CLIENTS = 0 # 彈出低於1.6.0的客戶端掛接(0或1,默認是0)
##因為是官方的,默認配置,我們投入即可使用。
(4)修改控制文件:
[root@cml1mfs]# vim mfsexports.cfg * / rw,alldirs,maproot=0,password=cml * . rw
##mfsexports.cfg文件中,每一個條目就是一個配置規則,而每一個條目又分為三個部分,其中第一部分是mfs客戶端的ip地址或地址範圍,第二部分是被掛載的目錄,第三個部分用來設置mfs客戶端可以擁有的訪問權限。
(5)開啟元數據文件默認是empty文件,需要我們手工打開:
[root@cml1mfs]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty/usr/local/mfs/var/mfs/metadata.mfs
(6)啟動master:
[root@cml1mfs]# /usr/local/mfs/sbin/mfsmaster start open fileslimit has been set to: 16384 workingdirectory: /usr/local/mfs/var/mfs lockfilecreated and locked initializingmfsmaster modules ... exports filehas been loaded mfstopologyconfiguration file (/usr/local/mfs/etc/mfstopology.cfg) not found - usingdefaults loadingmetadata ... metadata filehas been loaded no charts datafile - initializing empty charts master<-> metaloggers module: listen on *:9419 master<-> chunkservers module: listen on *:9420 main masterserver module: listen on *:9421 mfsmasterdaemon initialized properly
(7)檢查進程是否啟動:
[root@cml1mfs]# ps -ef | grep mfs
mfs 8109 1 5 18:40 ? 00:00:02/usr/local/mfs/sbin/mfsmaster start
root 8123 1307 0 18:41 pts/0 00:00:00 grep --color=auto mfs
(8)查看端口:
[root@cml1mfs]# netstat -ntlp
Active Internetconnections (only servers)
Proto Recv-QSend-Q Local Address ForeignAddress State PID/Program name
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 8109/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 8109/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 8109/mfsmaster
(9)當關閉的時候直接使用:
[root@cml1mfs]# /usr/local/mfs/sbin/mfsmaster stop sendingSIGTERM to lock owner (pid:8109) waiting fortermination terminated
(2)安裝配置使用pcs安裝corosync+pacemaker
##pcs相關配置:(因為在7版本,所以pcs支持比較好,crmsh比較復雜)
1、兩個結點上執行:
[root@cml1corosync]# yum install -y pacemaker pcs psmisc policycoreutils-python
2、啟動pcs並且讓開機啟動:
[root@cml1corosync]# systemctl start pcsd.service [root@cml1corosync]# systemctl enable pcsd
3、修改用戶hacluster的密碼:
[root@cml1corosync]# echo 123456 | passwd --stdin hacluster
4、註冊pcs集群主機(默認註冊使用用戶名hacluster,和密碼):
[root@cml1corosync]# pcs cluster auth cml1 cml2 ##設置註冊那個集群節點 cml2: Alreadyauthorized cml1: Alreadyauthorized
5、在集群上註冊兩臺集群:
[root@cml1corosync]# pcs cluster setup --name mycluster cml1 cml2 --force。
##設置集群
6、接下來就在某個節點上已經生成來corosync配置文件:
[root@cml1corosync]# ls corosync.conf corosync.conf.example corosync.conf.example.udpu corosync.xml.example uidgid.d
#我們看到生成來corosync.conf配置文件:
7、我們看一下註冊進來的文件:
[root@cml1corosync]# cat corosync.conf totem { version: 2 secauth: off cluster_name: mycluster transport: udpu } nodelist { node { ring0_addr: cml1 nodeid: 1 } node { ring0_addr: cml2 nodeid: 2 } } quorum { provider: corosync_votequorum two_node: 1 } logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes } 8、啟動集群: [root@cml1corosync]# pcs cluster start --all cml1: StartingCluster... cml2: StartingCluster...
##相當於啟動來pacemaker和corosync:
9、可以查看集群是否有錯:
[root@cml1corosync]# crm_verify -L -V error: unpack_resources: Resource start-up disabled since no STONITHresources have been defined error: unpack_resources: Either configure some or disable STONITHwith the stonith-enabled option error: unpack_resources: NOTE: Clusters with shared data needSTONITH to ensure data integrity Errors found duringcheck: config not valid
##因為我們沒有配置STONITH設備,所以我們下面要關閉
10、關閉STONITH設備:
[root@cml1corosync]# pcs property set stonith-enabled=false [root@cml1corosync]# crm_verify -L -V [root@cml1corosync]# pcs property list ClusterProperties: cluster-infrastructure: corosync cluster-name: mycluster dc-version: 1.1.16-12.el7_4.2-94ff4df have-watchdog: false stonith-enabled: false
(3)安裝crm配置安裝mfs+DRBD+corosync+pacemaker的高可用集群:
1、安裝crmsh:
集群我們可以下載安裝crmsh來操作(從github來下載,然後解壓直接安裝):只在一個節點安裝即可。(但最好選擇兩節點上安裝這樣測試時方便點)
[root@cml1 ~]#cd /usr/local/src/ You have newmail in /var/spool/mail/root [root@cml1src]# ls nginx-1.12.0 php-5.5.38.tar.gz crmsh-2.3.2.tar nginx-1.12.0.tar.gz zabbix-3.2.7.tar.gz [root@cml1src]# tar -xf crmsh-2.3.2.tar [[email protected]]# python setup.py install
2、用crmsh來管理:
[root@cml1 ~]#crm help
Help overview forcrmsh
Available topics:
Overview Help overview for crmsh
Topics Available topics
Description Program description
CommandLine Command line options
Introduction Introduction
Interface User interface
Completion Tab completion
Shorthand Shorthand syntax
Features Features
Shadows Shadow CIB usage
Checks Configuration semantic checks
Templates Configuration templates
Testing Resource testing
Security Access Control Lists (ACL)
Resourcesets Syntax: Resource sets
AttributeListReferences Syntax:Attribute list references
AttributeReferences Syntax: Attributereferences
RuleExpressions Syntax: Ruleexpressions
Lifetime Lifetime parameter format
Reference Command reference
3、借助crm管理工具配置DRBD+nfs+corosync+pacemaker高可用集群:
##先卸載掉掛載點和停掉drbd服務
[root@cml1 ~]#systemctl stop drbd [root@cml1 ~]#umount /usr/local/mfs/ [root@cml2 ~]#systemctl stop drbd
[root@cml1 ~]#crm crm(live)#status Stack:corosync Current DC:cml2 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum Last updated:Fri Oct 27 19:15:54 2017 Last change:Fri Oct 27 10:52:35 2017 by root via cibadmin on cml1 2 nodesconfigured 5 resourcesconfigured Online: [ cml25pxl2 ] No resources crm(live)configure#property stonith-enabled=false crm(live)configure#property no-quorum-policy=ignore crm(live)configure#property migration-limit=1 ###表示服務搶占一次不成功就給另一個節點接管 crm(live)#configure
4、寫一個mfsmaster的啟動腳本:
[root@cml1mfs]# cat /etc/systemd/system/mfsmaster.service [Unit] Description=mfs After=network.target [Service] Type=forking ExecStart=/usr/local/mfs/sbin/mfsmasterstart ExecStop=/usr/local/mfs/sbin/mfsmasterstop PrivateTmp=true [Install] WantedBy=multi-user.target
##開機啟動:
[root@cml1mfs]# systemctl enable mfsmaster
##停止mfsmaster服務
[root@cml1mfs]# systemctl stop mfsmaster
5、開啟工具:
[root@cml1src]# systemctl start corosync [root@cml1src]# systemctl start pacemaker [root@cml1src]# ssh cml2 systemctl start corosync [root@cml1src]# ssh cml2 systemctl start pacemaker
6、配置資源:
crm(live)configure#primitive mfs_drbd ocf:linbit:drbd params drbd_resource=mfs op monitorrole=Master interval=10 timeout=20 op monitor role=Slave interval=20 timeout=20op 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
7、配置掛載資源:
crm(live)configure#primitive mystore ocf:heartbeat:Filesystem params device=/dev/drbd1directory=/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
8、配置mfs資源:
crm(live)configure#primitive mfs systemd:mfsmaster op monitor timeout=100 interval=30 op starttimeout=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 crm(live)configure#commit
9、配置VIP:
crm(live)configure#primitive vip ocf:heartbeat:IPaddr params ip=192.168.5.200 crm(live)configure#colocation vip_with_msf inf: vip mfs crm(live)configure#verify crm(live)configure#commit
10、查看配置:
crm(live)configure#show node 1: cml1 attributes standby=off node 2: cml2 attributes standby=off primitive mfssystemd:mfsmaster op monitor timeout=100 interval=30 op start timeout=30 interval=0 op stop timeout=30 interval=0 primitivemfs_drbd ocf:linbit:drbd params drbd_resource=mfs op monitor role=Master interval=10timeout=20 op monitor role=Slave interval=20timeout=20 op start timeout=240 interval=0 op stop timeout=100 interval=0 primitivemystore Filesystem params device="/dev/drbd1"directory="/usr/local/mfs" fstype=ext4 op start timeout=60 interval=0 op stop timeout=60 interval=0 primitive vipIPaddr params ip=192.168.5.200 ms ms_mfs_drbdmfs_drbd meta master-max=1 master-node-max=1clone-max=2 clone-node-max=1 notify=true colocationmfs_with_mystore inf: mfs mystore orderms_mfs_drbd_before_mystore Mandatory: ms_mfs_drbd:promote mystore:start colocationms_mfs_drbd_with_mystore inf: mystore ms_mfs_drbd ordermystor_befor_mfs Mandatory: mystore mfs colocationvip_with_msf inf: vip mfs propertycib-bootstrap-options: have-watchdog=false dc-version=1.1.16-12.el7_4.4-94ff4df cluster-infrastructure=corosync cluster-name=webcluster stonith-enabled=false no-quorum-policy=ignore migration-limit=1 crm(live)configure#commit crm(live)configure#cd crm(live)#status Stack:corosync Current DC:cml2 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum Last updated:Fri Oct 27 19:27:23 2017 Last change:Fri Oct 27 10:52:35 2017 by root via cibadmin on cml1 2 nodesconfigured 5 resourcesconfigured Online: [ cml25pxl2 ] Full list ofresources: Master/Slave Set: ms_mfs_drbd [mfs_drbd] Masters: [ cml1 ] Slaves: [ cml2 ] mystore (ocf::heartbeat:Filesystem): Started cml1 mfs (systemd:mfsmaster): Started cml1 vip (ocf::heartbeat:IPaddr): Started cml1
##檢查是否已經掛載到cml1主機上
[root@cml1 ~]#df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-rootxfs 19G 6.8G 13G 36% /
devtmpfs devtmpfs 501M 0 501M 0% /dev
tmpfs tmpfs 512M 41M 472M 8% /dev/shm
tmpfs tmpfs 512M 33M 480M 7% /run
tmpfs tmpfs 512M 0 512M 0% /sys/fs/cgroup
/dev/sda1 xfs 521M 160M 362M 31% /boot
tmpfs tmpfs 103M 0 103M 0% /run/user/0
/dev/drbd1 ext4 5.2G 30M 4.9G 1% /usr/local/mfs
[root@cml1 ~]#ip addr
2: ens34:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000
link/ether 00:0c:29:4d:47:ed brdff:ff:ff:ff:ff:ff
inet 192.168.5.101/24 brd 192.168.5.255scope global ens34
valid_lft forever preferred_lft forever
inet 192.168.5.200/24brd 192.168.5.255 scope global secondary ens34
##vip已經被cml1(master)接管了。
(4)編譯安裝Chunk-server和Matelogger主機:
一、安裝Metalogger Server: (這步驟在cml5上配置,其實做了mfsmaster高可用可以不需要這步驟了。)
前面已經介紹了,MetaloggerServer 是 Master Server 的備份服務器。因此,Metalogger Server 的安裝步驟和 Master Server 的安裝步驟相同。並且,最好使用和 Master Server 配置一樣的服務器來做 Metalogger Server。這樣,一旦主服務器master宕機失效,我們只要導入備份信息changelogs到元數據文件,備份服務器可直接接替故障的master繼續提供服務。
1、從master把包copy過來:
[root@cml1mfs]# scp /usr/local/src/v3.0.96.tar.gz cml5:/usr/local/src/ v3.0.96.tar.gz [root@cml5src]# tar -xf moosefs.3.0.96.tar.gz [[email protected]]# useradd mfs [[email protected]]# yum install zlib-devel -y [[email protected]]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount [[email protected]]# make && make install
2、配置Metalogger Server:
[root@cml5mfs]# cd /usr/local/mfs/etc/mfs/ [root@cml5mfs]# ls mfsexports.cfg.sample mfsmaster.cfg.sample mfsmetalogger.cfg.sample mfstopology.cfg.sample [root@cml5mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg [root@cml5mfs]# vim mfsmetalogger.cfg MASTER_HOST =192.168.5.200 ##指向vip #MASTER_PORT = 9419 ##鏈接端口 # META_DOWNLOAD_FREQ = 24 # #元數據備份文件下載請求頻率,默認為24小時,即每個一天從元數據服務器下載一個metadata.mfs.back文件。當元數據服務器關閉或者出故障時,metadata.mfs.back文件將小時,那麽要恢復整個mfs,則需要從metalogger服務器取得該文件。請註意該文件,它與日誌文件在一起,才能夠恢復整個被損壞的分布式文件系統。
3、啟動Metalogger Server:
[root@cml5 ~]#/usr/local/mfs/sbin/mfsmetalogger start open fileslimit has been set to: 4096 workingdirectory: /usr/local/mfs/var/mfs lockfilecreated and locked initializingmfsmetalogger modules ... mfsmetaloggerdaemon initialized properly [root@cml5 ~]#netstat -lantp|grep metalogger tcp 0 0 192.168.113.144:45620 192.168.113.143:9419 ESTABLISHED 1751/mfsmetalogger [root@cml5 ~]#netstat -lantp|grep 9419 tcp 0 0 192.168.113.144:45620 192.168.113.143:9419 ESTABLISHED 1751/mfsmetalogger
4、查看一下生成的日誌文件:
[root@cml5 ~]#ls /usr/local/mfs/var/mfs/ changelog_ml_back.0.mfs changelog_ml_back.1.mfs metadata.mfs.empty metadata_ml.mfs.back
二、安裝chunk servers(註意在cml5和cml4主機上做相同的配置)
1、下載包編譯安裝
[root@cml3 ~]#useradd mfs ##註意uid和gid必須整個集群都要相同的 [root@cml3 ~]#yum install zlib-devel -y [root@cml3 ~]#cd /usr/local/src/ [root@cml3src]# tar -xf moosefs.3.0.96.tar.gz [[email protected]]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfsmaster --disable-mfsmount [[email protected]]# make && make install
2、配置check server:
[[email protected]]# cd /usr/local/mfs/etc/mfs/ You have newmail in /var/spool/mail/root [root@cml3mfs]# mv mfschunkserver.cfg.sample mfschunkserver.cfg [root@cml3mfs]# vim mfschunkserver.cfg MASTER_HOST =192.168.5.200 ##指向vip
3、配置mfshdd.cfg主配置文件
mfshdd.cfg該文件用來設置你將 Chunk Server 的哪個目錄共享出去給 Master Server進行管理。當然,雖然這裏填寫的是共享的目錄,但是這個目錄後面最好是一個單獨的分區。
[root@cml3mfs]# cp /usr/local/mfs/etc/mfs/mfshdd.cfg.sample /usr/local/mfs/etc/mfs/mfshdd.cfg [root@cml3mfs]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg /mfsdata
##自己定義的目錄
4、啟動check Server:
[root@cml3mfs]# mkdir /mfsdata [root@cml3mfs]# chown mfs:mfs /mfsdata/ [root@cml3mfs]# /usr/local/mfs/sbin/mfschunkserver start open fileslimit has been set to: 16384 workingdirectory: /usr/local/mfs/var/mfs lockfilecreated and locked setting glibcmalloc arena max to 4 setting glibcmalloc arena test to 4 initializingmfschunkserver modules ... hdd spacemanager: path to scan: /mfsdata/ hdd spacemanager: start background hdd scanning (searching for available chunks) main servermodule: listen on *:9422 no charts datafile - initializing empty charts mfschunkserverdaemon initialized properly
###檢查監聽端口:
[root@cml3mfs]# netstat -lantp|grep 9420 tcp 0 0 192.168.113.145:45904 192.168.113.143:9420 ESTABLISHED 9896/mfschunkserver
###在master上面查看變化:
(5)安裝mfs客戶端測試高可用集群:
1、安裝FUSE:
[root@cml6mfs]# lsmod|grep fuse [root@cml6mfs]# yum install fuse fuse-devel [root@cml6 ~]#modprobe fuse [root@cml6 ~]#lsmod | grep fuse fuse 91874 0
2、安裝掛載客戶端
[root@cml6 ~]#yum install zlib-devel -y [[email protected]]# yum install fuse-devel [root@cml6 ~]#useradd mfs [root@cml6src]# tar -zxvf v3.0.96.tar.gz [root@cml6src]# cd moosefs-3.0.96/ [[email protected]]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver--enable-mfsmount [[email protected]]# make && make install
3、在客戶端上掛載文件系統,先創建掛載目錄:
[[email protected]]# mkdir /mfsdata [[email protected]]# chown -R mfs:mfs /mfsdata/ [root@cml6 ~]#/usr/local/mfs/bin/mfsmount -H 192.168.5.200 /mfsdata/ -p MFS Password: mfsmasteraccepted connection with parameters: read-write,restricted_ip ; root mapped toroot:root [root@cml6 ~]#df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg_cml-lv_root ext4 19G 4.9G 13G 28% / tmpfs tmpfs 977M 0 977M 0% /dev/shm /dev/sda1 ext4 500M 29M 445M 7% /boot 192.168.5.200:9421 fuse.mfs 38G 14G 25G 36% /mfsdata [root@cml6mfsdata]# echo "test" > a.txt [root@cml6mfsdata]# ls a.txt [root@cml6mfsdata]# cat a.txt test
測試master server(master)主機down掉切到(slave)上文件是否還在
crm(live)#node standby crm(live)#status Stack:corosync Current DC:cml2 (version 1.1.16-12.el7_4.4-94ff4df) - partition with quorum Last updated:Fri Oct 27 19:55:15 2017 Last change:Fri Oct 27 19:55:01 2017 by root via crm_attribute on cml1 2 nodesconfigured 5 resourcesconfigured Node cml1:standby Online: [ cml2] Full list ofresources: Master/Slave Set: ms_mfs_drbd [mfs_drbd] Masters: [ cml2 ] Stopped: [ cml1 ] mystore (ocf::heartbeat:Filesystem): Started cml2 mfs (systemd:mfsmaster): Started cml2 vip (ocf::heartbeat:IPaddr): Started cml2
##顯示業務已經切到cml2主機上了
[root@cml2 ~]#df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-rootxfs 19G 6.7G 13G 36% / devtmpfs devtmpfs 501M 0 501M 0% /dev tmpfs tmpfs 512M 56M 456M 11% /dev/shm tmpfs tmpfs 512M 14M 499M 3% /run tmpfs tmpfs 512M 0 512M 0% /sys/fs/cgroup /dev/sda1 xfs 521M 160M 362M 31% /boot tmpfs tmpfs 103M 0 103M 0% /run/user/0 /dev/drbd1 ext4 5.2G 30M 4.9G 1% /usr/local/mfs [root@cml2 ~]#ip addr 2: ens34:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000 link/ether 00:0c:29:5a:c5:ee brd ff:ff:ff:ff:ff:ff inet 192.168.5.102/24 brd 192.168.5.255scope global ens34 valid_lft forever preferred_lft forever inet192.168.5.200/24 brd 192.168.5.255 scope global secondary ens34
##掛載點和vip已經切到cml2上面了
##重新掛載看看業務是否正常
[root@cml6 ~]#umount /mfsdata/ [root@cml6 ~]#/usr/local/mfs/bin/mfsmount -H 192.168.5.200 /mfsdata/ -p MFS Password: mfsmasteraccepted connection with parameters: read-write,restricted_ip ; root mapped toroot:root [root@cml6 ~]#cd /mfsdata/ [root@cml6mfsdata]# ls a.txt [root@cml6mfsdata]# cat a.txt test
##剛剛寫進去的a.txt文件還在證明業務正常
本文出自 “第一個legehappy51cto博客” 博客,請務必保留此出處http://legehappy.blog.51cto.com/13251607/1977270
高可用分布式存儲(Corosync+Pacemaker+DRBD+MooseFS)