DRBD (Distributed Replicated Block Device)分布式復制塊設備,它是 Linux 平台上的分散式儲存系統,通常用於高可用性(high availability, HA)集群中。DRBD 類似磁盤陣列的RAID 1(鏡像),只不過 RAID 1 一般配置在一台服務器內,而 DRBD 是通過網絡。
DRBD Resource:DRBD所具有的幾種屬性:
resource name:可以使用除空白字符外的任意ACSII表中的字符;
drbd設備:drbd的設備的訪問路徑,設備文件/dev/drbd#;
disk:各節點為組成此drbd設備所提供的塊設備,通常是一個磁盤分區;
網絡屬性:節點間為了實現跨主機磁盤鏡像而使用的網絡配置;
注意:用戶空間工具與drdb與內核中使用的模塊版本要保持一致,只有在使用drbdadm工具時才會讀取配置文件,對多個資源的公共配置,可以提取出來只配置一次,通常保存在Common中,此外還有global配置,這種配置跟資源本身沒有關系的;
drbd的組成部分:第一部分用戶空間工具;第二部分是內核模塊(在2.6.33及以後版本的內核直接在內核中就有了)
用戶空間工具:跟內核版本關系比較松散,只要是能適用於CentOS 6及對應硬件平台的就OK;
內核模塊:必須與當下內核版本嚴格對應;其中drbd內核模塊代碼已經整合進Linux內核2.6.33以後的版本中,因此,如果您的內核版本高於此版本的話,你只需要安裝管理工具即可;否則,您需要同時安裝內核模塊和管理工具兩個軟件包,並且此兩者的版本號一定要保持對應。
進程間通信的三種方式:消息序列、旗語及共享內存:
什麼是消息隊列:
消息被發送到隊列中,"消息隊列"是在消息的傳輸過程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由並保證消息的傳遞;如果發送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它;消息隊列就是一個消息的鏈表。可以把消息看作一個記錄,具有特定的格式以及特定的優先級。對消息隊列有寫權限的進程可以向消息隊列中按照一定的規則添加新消息;對消息隊列有讀權限的進程則可以從消息隊列中讀走消息。消息隊列是隨內核持續的。
什麼是旗語、什麼是信號量:
Linux的旗語就是操作系統原理中的信號量,有PV操作,釋放旗語會自動喚醒下一個等待獲取旗語的進程;
為了防止出現因多個程序同時訪問一個共享資源而引發的一系列問題,我們需要一種方法,它可以通過生成並使用令牌來授權,在任一時刻只能有一個執行線程訪問代碼的臨界區域。臨界區域是指執行數據更新的代碼需要獨占式地執行。而信號量就可以提供這樣的一種訪問機制,讓一個臨界區同一時間只有一個線程在訪問它,也就是說信號量是用來調協進程對共享資源的訪問的。
信號量是一個特殊的變量,程序對其訪問都是原子操作,且只允許對它進行等待(即P(信號變量))和發送(即V(信號變量))信息操作。最簡單的信號量是只能取0和1的變量,這也是信號量最常見的一種形式,叫做二進制信號量。而可以取多個正整數的信號量被稱為通用信號量。
什麼是共享內存:
顧名思義,共享內存就是允許兩個不相關的進程訪問同一個邏輯內存。共享內存是在兩個正在運行的進程之間共享和傳遞數據的一種非常有效的方式。不同進程之間共享的內存通常安排為同一段物理內存。進程可以將同一段共享內存連接到它們自己的地址空間中,所有進程都可以訪問共享內存中的地址,就好像它們是由用C語言函數malloc分配的內存一樣。而如果某個進程向共享內存寫入數據,所做的改動將立即影響到可以訪問同一段共享內存的任何其他進程。
數據存儲的幾種類型:
DAS:(Direct Attach Srorage)直接附加存儲,DAS這種存儲方式與我們普通的PC存儲架構一樣,外部存儲設備都是直接掛接在服務器內部總線上,數據存儲設備是整個服務器結構的一部分。是指將存儲設備通過SCSI接口或光纖通道直接連接到一台計算機上。
NAS:(Network Attach Srorage)網絡附加存儲,它就是個文件服務器,是文件系統級別,NAS和傳統的文件存儲服務或直接存儲設備不同的地方在於NAS設備上面的操作系統和軟件只提供了數據存儲、數據訪問、以及相關的管理功能;此外,NAS設備也提供了不止一種文件傳輸協議。NAS系統通常有一個以上的硬盤,而且和傳統的文件服務器一樣,通常會把它們組成RAID來提供服務;有了NAS以後,網絡上的其他服務器就可以不必再兼任文件服務器的功能。NAS的型式很多樣化,可以是一個大量生產的嵌入式設備,也可以在一般的計算機上運行NAS的軟件。
NAS用的是以文件為單位的通信協議,例如像是NFS(在UNIX系統上很常見)或是SMB(常用於Windows系統)。NAS所用的是以文件為單位的通信協議,大家都很清楚它們的運作模式,相對之下,存儲區域網絡(SAN)用的則是以區塊為單位的通信協議、通常是通過SCSI再轉為光纖通道或是iSCSI。(還有其他各種不同的SAN通信協議,像是ATA over Ethernet和HyperSCSI,不過這些都不常見。)
SAN:(Storage Area Network)存儲區域網絡,把SCSI協議借助於其它網絡協議實現傳送的;1991年,IBM公司在S/390服務器中推出了ESCON(Enterprise System Connection)技術。它是基於光纖介質,最大傳輸速率達17MB/s的服務器訪問存儲器的一種連接方式。在此基礎上,進一步推出了功能更強的ESCON Director(FC SWitch),構建了一套最原始的SAN系統。
它是一種高速網絡或子網絡,提供在計算機與存儲系統之間的數據傳輸。存儲設備是指一台或多台用以存儲計算機數據的磁盤設備,通常指磁盤陣列。
DAS、NAS和SAN三種存儲方式比較
存儲應用最大的特點是沒有標准的體系結構,這三種存儲方式共存,互相補充,已經很好滿足企業信息化應用。
從 連接方式上對比,DAS采用了存儲設備直接連接應用服務器,具有一定的靈活性和限制性;NAS通過網絡(TCP/IP,ATM,FDDI)技術連接存儲設備和應用服務器,存儲設備位置靈活,隨著萬兆網的出現,傳輸速率有了很大的提高;SAN則是通過光纖通道(Fibre Channel)技術連接存儲設備和應用服務器,具有很好的傳輸速率和擴展性能。三種存儲方式各有優勢,相互共存,占到了磁盤存儲市場的70%以上。SAN和NAS產品的價格仍然遠遠高於DAS.許多用戶出於價格因素考慮選擇了低效率的直連存儲而不是高效率的共享存儲。
客觀的說,SAN和NAS系統已經可以利用類似自動精簡配置(thin provisioning)這樣的技術來彌補早期存儲分配不靈活的短板。然而,之前它們消耗了太多的時間來解決存儲分配的問題,以至於給DAS留有足夠的時間在數據中心領域站穩腳跟。此外,SAN和NAS依然問題多多,至今無法解決。
DRBD在遠程傳輸上支持三種模式:
1、異步:所謂異步就是指數據只需要發給本地的TCP/IP協議棧就可以了,本地存完就OK;而DRBD只需要把數據放到TCP/IP協議棧,放到發送隊列中准備發送就返回了;這種方式更高效;
2、半同步:數據已經發送到對方的TCP/IP協議棧上,對方的TCP/IP協議棧已經把數據接收下來了就返回,數據存不存下來就不管了;
3、同步:數據必須確保對方把數據寫入對方的磁盤再返回的就叫同步;這種方式數據更可靠;
官方提供的DRBD的工作流程圖:
DRBD + Corosync、Pacemaker實現DRBD角色自動切換
在運行drbd時,他並不會自動完成角色的切換,那怎麼讓它具有這樣的功能呢,這裡就得用到Corosync+Pacemaker了,結合corosync+pacemaker的drbd就可以自動完成角色的切換,一旦一個drbd的節點出現故障就可以自動切換到別一個節點上繼續提供服務,那接下來我們就來配置一下drbd + corosync、pacemaker的實現;
第一步:配置兩個節點上的雙機互信、名稱解析、時間服務及本地yum源(corosync版本有要求,最好使用centos6.5光盤作為yum源):
1、節點名稱很關鍵,集群每個節的名稱都得能互相解析;
用hosts文件,/etc/hosts:hosts中主機名的正反解析結果必須跟”uname -n”的結果保持一致;
vim /etc/hosts
192.168.8.39 node2.chinasoft.com node2
192.168.8.42 node3.chinasoft.com node4
# cat /etc/sysconfig/network 如果這個與web1或2不一致就改一下,這個改配置文件保證下次系統重啟時主機名依然有效,
2、時間必須得同步,使用網絡時間服務器同步時間到公司內部服務器,再次通過局域網同步時間(具體搭建過程可參考企業內部在centos7.2系統中配置NTP服務及內網服務器時間同步:http://blog.csdn.net/reblue520/article/details/51143450);
# yum install -y ntp
# vim /etc/ntp.conf
加入如下內容:
server 192.168.8.102
# service ntpd start
# service ntpd restart
手動同步一次時間,後續ntp會自動同步
# ntpdate -u 192.168.8.102
3、各節點間能基於ssh密鑰互相認證通信;
node2 8.39執行:
# ssh-keygen -t rsa -P '' 這個生成一個密碼為空的公鑰和一個密鑰,把公鑰復制到對方節點上即可
# ssh-copy-id -i .ssh/id_rsa.pub [email protected] 對方主機名用登錄用戶名
node4 8.42執行:
# ssh-keygen -t rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
通過在node2執行date命令查看是否配置成功
# ssh node4.chinasoft.com 'date';date
Wed Apr 27 17:41:51 CST 2016
Wed Apr 27 17:41:51 CST 2016
4.將node2和node4的yum源改為本地yum源(詳見 centos6環境創建局域網http方式的yum源 :http://blog.csdn.net/reblue520/article/details/51164294)
# cd /etc/yum.repos.d
# mv CentOS-Base.repo CentOS-Base.repo.bak
# vim localyum.repo
加入:
[base]
name=localyum
baseurl=http://192.168.8.20
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[updates]
name=localyum
baseurl=http://192.168.8.20
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
# yum clean all
# yum makecache
第二步:安裝DRBD程序包,這一步一定要格外注意版本匹配問題:
內核模塊程序包一定要跟你的系統內核保持一致,uname -r查看你的內核版本,內核模塊的版本必須要嚴格對應,而用戶空間的模塊就不那麼嚴格要求了,兩個節點的時間也需要保持一致性;
# uname -r
2.6.32-431.el6.x86_64
drbd-8.4.3-33.el6.x86_64.rpm -->用戶空間工具
drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm -->內核空間模塊,這個必須要跟內核版本保持一致
下載地址:
ftp://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/
每個節點都需要安裝上這兩個程序包,不依賴其他包,可以直接用rpm安裝
# rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
warning: drbd-8.4.3-33.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 66534c2b: NOKEY
Preparing... ########################################### [100%]
1:drbd-kmdl-2.6.32-431.el########################################### [ 50%]
2:drbd ########################################### [100%]
# scp drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm node4.chinasoft.com:/root
編輯drbd的配置文件:
# vim /etc/drbd.conf 主配置文件
# vim /etc/drbd.d/global_common.conf 全局和common的配置
global { #全局配置
usage-count no; #這個為yes表示如果你本機可以連接互聯網時drbd會通過互聯網收集到你安裝drbd的信息,官方統計說又多了一個人使用drbd實例,不用可以改為no
# minor-count dialog-refresh disable-ip-verification
}
common {
handlers { #處理器
# These are EXAMPLE handlers only.
# They may have severe implications,
# like hard resetting the node under certain circumstances.
# Be careful when chosing your poison.
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"; 定義了一旦本地節點發生IO錯誤時應該怎麼處理
# 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 {
protocol C;
cram-hmac-alg "sha1";
shared-secret "drbd.tanxw.com";
# 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;
}
}
第三步:為兩個節點准備等同大小的磁盤分區,分區好之後不需要格式化,分好區保證系統能識別
# fdisk /dev/sda
n
報錯:No free sectors available
發現是沒有剩余空間了(之前全部分配給了lvm),添加一塊硬盤重啟
# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x831a7283.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x831a7283
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-5221, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-5221, default 5221): +5G
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@node2 ~]# kpartx -af /dev/sdb
[root@node2 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
[root@node2 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
[root@node2 ~]# cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 512000 sda1
8 2 125316096 sda2
8 16 41943040 sdb
8 17 5253223 sdb1
253 0 30720000 dm-0
253 1 4096000 dm-1
253 2 25600000 dm-2
253 3 30720000 dm-3
253 4 10240000 dm-4
253 5 5253223 dm-5
第四步:根據上面的描述,我們要給它定義資源,包括資源名,drbd設備,disk以及網絡屬性,主要是這四個方面;
定義一個資源/etc/drbd.d/,內容如下:
# cd /etc/drbd.d/
# vim mystore.res
resource mystore { #定義一個資源,用關鍵字resource;
on node2.chinasoft.com { #on說明在哪個節點上,跟uname -n保持一致,有多少個節點就定義多少個;
device /dev/drbd0; #在磁盤上表現的drbd叫什麼名;
disk /dev/sdb1; #所使用的磁盤設備是哪個;
address 192.168.8.39:7789; #在node2這個節點上監聽的套接字,默認監聽在7789端口上;
meta-disk internal; #保存drbd元數據信息的,表示就放在自己的磁盤區分上,也可以放在外部的磁盤上;
}
on node4.chinasoft.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.8.42:7789;
meta-disk internal;
}
}
復制一份到別一個節點上,它們的配置文件要保持一致:
# scp global_common.conf mystore.res node4.chinasoft.com:/etc/drbd.d/
# drbdadm create-md mystore 在各自的節點上初始化資源
Writing meta data...
initializing activity log
NOT initializing bitmap
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
New drbd meta data block successfully created.
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
# service drbd start 啟動drbd
# watch -n 1 'cat /proc/drbd' 實現查看磁盤信息
# drbdadm primary --force mystore 在節點上把其中一個提升為主的
# watch -n 1 'cat /proc/drbd' 提升為主的之後再實現查看磁盤信息
報錯:
0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup 0 primary' terminated with exit code 17
安裝網上的做法執行:
# drbdadm -- --overwrite-data-of-peer primary restore
沒有用
關閉防火牆,selinux
service iptables stop
setenforce 0
依舊報錯,
vim /etc/sysconfig/selinux
SELINUX=disabled
重啟問題解決
注意:哪個是主節點哪個就可以掛載使用,不是主節點的連掛載都不可以掛載;
OK、看到兩個節點上的數據正在同步了,磁盤越大同步時需要時間越久;
第五步:在其中一個提升為主服務的節點上進行格式化:
# mke2fs -t ext4 /dev/drbd0 格式化drbd0
# mkdir /drbd 創建一個測試目錄
# mount /dev/drbd0 /drbd 把創建好的drbd目錄掛載到/dev/drbd0上
# cd /drbd
# cp /etc/fstab ./ 復制一個文件過來
# vim fstab 編輯這個文件,在裡面隨便修改修改
# cd
# umount /dev/drbd0 卸載剛編輯的這個節點上的drbd0設備
# drbdadm secondary mystore 降級這個節點
切換到另一個節點上:
# drbdadm primary mystore 提升為主的
# mkdir /drbd 創建目錄用來掛載
# mount /dev/drbd0 /drbd 掛載
# cd /drbd
# vim /fstab 再查看剛才編輯的這個文件,內容被修改了
到此處已完成drbd的工作模式
要完成drbd的角色自動切換得要借助於corosync+pacmaker,那接下來我們就來安裝配置corosync和pacemaker
為了讓高可用的配置順利,兩個節點都不能設置為主的,而且都不能啟動,也不能開機自動啟動,所以卸載降級
# cd
# umount /dev/drbd0
# drbdadm secondary mystore 哪個是主的就在哪個節點上降級
# service drbd stop 兩個節點都需要停止服務
# chkconfig drbd off 禁止開機啟動
# chkconfig --list drbd 驗證是否關閉成功
drbd 0:off1:off2:off3:off4:off5:off6:off
第六步:安裝corosync + pacemaker,這裡直接用yum來安裝,兩個節點都要安裝上
# yum install -y corosync pacemaker
# yum install -y crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm
# cd /etc/corosync/
# cp corosync.conf.example corosync.conf
# vim /etc/corosync/corosync.conf
compatibility: whitetank
totem {
version: 2
secauth: on
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.8.0
mcastaddr: 226.99.11.199
mcastport: 5405
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: no
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
service {
name: pacemaker
ver: 0
}
aisexce {
user: root
group: root
}
# corosync-keygen # 生成密鑰文件,用於雙機通信互信,會生成一authkey的文件
另外開啟一個窗口安裝lftp命令,並且通過ftp獲取一個較大文件
# yum install -y lftp
# lftp 192.168.8.53 -uadmin,pass
> get bigdata.zip
# corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Press keys on your keyboard to generate entropy (bits = 152).
Press keys on your keyboard to generate entropy (bits = 224).
Press keys on your keyboard to generate entropy (bits = 288).
Press keys on your keyboard to generate entropy (bits = 352).
Press keys on your keyboard to generate entropy (bits = 416).
Press keys on your keyboard to generate entropy (bits = 480).
Press keys on your keyboard to generate entropy (bits = 544).
Press keys on your keyboard to generate entropy (bits = 608).
Press keys on your keyboard to generate entropy (bits = 672).
Press keys on your keyboard to generate entropy (bits = 736).
Press keys on your keyboard to generate entropy (bits = 800).
Press keys on your keyboard to generate entropy (bits = 864).
Press keys on your keyboard to generate entropy (bits = 928).
Press keys on your keyboard to generate entropy (bits = 992).
Writing corosync key to /etc/corosync/authkey.
再把改好的配置復制一份到別一個節點上去,也保留一份給另一個節點:
# scp -p authkey corosync.conf node4.chinasoft.com:/etc/corosync/
啟動Corosync,每個節點都需要啟動;
第七步:接下來進入crm命令行接口定義資源:
[root@node2 corosync]# crm configure
crm(live)configure# property stonith-enabled=false
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# rsc_defaults resource-stickiness=100
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node node2.chinasoft.com
node node4.chinasoft.com
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \
resource-stickiness="100"
crm(live)configure# cd
crm(live)# ra
crm(live)ra# classes
lsb
ocf / heartbeat linbit pacemaker
service
stonith
crm(live)ra# meta ocf:linbit:drbd 查看drbd的詳細信息
# 定義資源,切換到configure中,mysqlstore定義資源名,drbd_resource=mystore這個是drbd名,後面定義的都是一些監控
crm(live)ra# cd
crm(live)# configure
crm(live)configure# primitive mysqlstore ocf:linbit:drbd params drbd_resource=mystore op monitor role=Master interval=30s timeout=20s op monitoer role=Slave interval=60s timeout=20s op start timeout=240s op stop timeout=100s
crm(live)configure# verify
WARNING: mysqlstore: action monitoer not advertised in meta-data, it may not be supported by the RA
crm(live)configure# delete mysqlstore
crm(live)configure# primitive mysqlstore ocf:linbit:drbd params drbd_resource=mystore op monitor role=Master interval=30s timeout=20s op monitor role=Slave interval=60s timeout=20s op start timeout=240s op stop timeout=100s
crm(live)configure# verify 檢查語法
# 定義主資源
crm(live)configure# master ms_mysqlstore mysqlstore 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
定義共享文件的資源,並且讓服務器切換時可以自動掛載,device=/dev/drbd0掛載的設備,directory=/drbd掛載點,兩個掛載點的文件名要一致:
crm(live)configure# primitive mysqlfs ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/drbd fstype=ext4 op monitor interval=30s timeout=40s on-fail=restart op start timeout=60s op stop timeout=60s
crm(live)configure# verify
先不要提交,接著定義排列約束:
crm(live)configure# collocation mysqlfs_with_ms_mysqlstore_master inf: mysqlfs ms_mysqlstore:Master
crm(live)configure# verify
定義順序約束:
crm(live)configure# order mysqlfs_after_ms_mysqlstore_master mandatory: ms_mysqlstore:promote mysqlfs:start
crm(live)configure# verify
crm(live)configure# commit
此時,再查看一下它們現在的狀態,node2是主的,而node4是從的,可以到node2上查看文件是否已經掛載上去的,驗證一下,再創建或修改幾個文件進去都可以做一下測試的,而後再讓node2停掉,看看node4是否會自動切換為主的:
改變節點的主從位置:
crm(live)# node standby node2.chinasoft.com 把node2改為備用的
crm(live)# node online node2.chinasoft.com 讓node2上線
crm(live)# node standby node4.chinasoft.com 把node4改為備用的
crm(live)# node online node4.chinasoft.com 讓node4上線,都可以隨意切換一下再檢測一下掛載的效果
可以看到當node2或node4為主節點時,文件系統會自動切換到當前主節點,如果讓之前的主節點上線也不會切換回去