集羣管理 pacemaker
1.pacemaker
pacemaker是一個開源的高可用資源管理器(CRM),位於HA集羣架構中資源管理、資源代理(RA)這個層次,它不能提供底層心跳信息傳遞的功能,要想與對方節點通信需要藉助底層的心跳傳遞服務,將信息通告給對方。(作爲通信層和提供關係管理服務,心跳引擎,檢測心跳信息)
2.Corosync
Corosync是集羣管理套件的一部分,它在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等。
主機環境:RHEL6.5 selinux and iptables disabled
Master: server4:172.25.254.4 server7:172.25.254.7
Chunkserver: server5:172.25.254.5 server6:172.25.254.6
Client,vm_fence: 172.25.254.56
scsi: server8:172.25.254.8
使用pacemaker配置時需要安裝pacemaker的接口,程序接口爲crmshell,早期裝上pacemaker自帶有crmshell接口,新版本已被獨立出來,不再是pacemaker組成部分。而crmshell又依賴於pssh相關包,因此得安裝這兩個組件。
使用yum install安裝pacemaker時會安裝其大量相關性依賴包,包括corosync,所以corosync可以不用獨立安裝,直接修改其配置文件/etc/corosync/corosync.conf。
[root@server4 corosync]# yuyum install pacemaker -y
[root@server4 corosync]# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y
[root@server4 ~]# cd /etc/corosync/
[root@server4 corosync]# cp corosync.conf.example corosync.conf
[root@server4 corosync]# vim corosync.conf
compatibility: whitetank ##兼容0.8以前的版本
##totem定義集羣內各節點間是怎麼通信的,totem本是一種協議,專用於corosync專用於各節點間的協議
totem {
version: 2 ##totem的版本,不可更改
secauth: off ##安全認證
threads: 0 ##用於安全認證開啓的併線程數
interface {
ringnumber: 0 ##迴環號碼
bindnetaddr: 172.25.254.0
##綁定心跳網段,corosync會自動判斷本地網卡上配置的哪個ip地址是屬於這個網絡的,並把這個接口作爲多播心跳信息傳遞的接口
mcastaddr: 226.94.1.1
##心跳信息組播地址,每個節點的組播地址必須爲同一個
mcastport: 23 ##組播時使用的端口
ttl: 1 ##只向外一跳心跳信息,避免組播報文迴路
}
}
logging {
fileline: off ##指定要打印的行
to_stderr: no ##日誌信息是否發往錯誤輸出(默認否)
to_logfile: yes ##是否記錄日誌文件
to_syslog: yes ##是否記錄於syslog日誌-->此類日誌記錄於/var/log/message中
logfile: /var/log/cluster/corosync.log ##日誌存放位置
debug: off ##只要不是爲了排錯,最好關閉debug,它記錄的信息過於詳細,會佔用大量的磁盤IO.
timestamp: on ##是否打印時間戳,利於定位錯誤,但會產生大量系統調用,消耗CPU資源
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
##如果想讓pacemaker在corosync中以插件方式啓動,需要 在corosync.conf文件中加上如下內容:
service {
name: pacemaker ##模塊名,啓動corosync時同時啓動pacemaker
ver: 0
[root@server4 corosync]# /etc/init.d/corosync start
[root@server4 corosync]# scp corosync.conf server7:/etc/corosync/ ## server7與server4配置相同
[root@server7 corosync]# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y
[root@server7 corosync]# /etc/init.d/corosync restart
查看corosync和pacemaker服務是否成功開啓。開啓了就說明成功了。
關於crm shell的使用
crm可以顯示並修改配置文件
直接執行crm命令進行交互式修改配置文件,交互式輸入的內容被記錄在配置文件中
show 顯示配置文件
commit提交
如果添加資源時出錯,首先進入resource,將添加的資源stop,然後進入cofigure,delete錯誤的資源
[root@server4 corosync]# crm
crm(live)# configure
crm(live)configure# show
node server4
node server7
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2"
crm(live)configure# property stonith-enabled=false
crm(live)configure# commit
crm(live)configure# quit
bye
[root@server4 corosync]# crm_verify -LV
在將MFS系統服務交由集羣接管之前,需建立一個虛擬IP(VIP),VIP對外爲master節點,當集羣裏某個master節點資源宕機,則服務通過VIP將資源遷移到另一個master節點,對client來說,絲毫沒有感覺。
# 添加配置vip資源
[root@server4 corosync]# crm
crm(live)# configure
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.254.100 op monitor interval=1min
crm(live)configure# commit
crm(live)configure# show
node server4
node server7
primitive vip ocf:heartbeat:IPaddr2 \
params ip="172.25.254.100" \
op monitor interval="1min"
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"
crm(live)configure# quit
[root@server4 corosync]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:76:8c:2e brd ff:ff:ff:ff:ff:ff
inet 172.25.254.4/24 brd 172.25.254.255 scope global eth0
inet 172.25.254.100/24 brd 172.25.254.255 scope global secondary eth0
[root@server7 corosync]# crm_mon #開啓監控
# 在添加資源時命令寫錯的解決方法
[root@server4 mfs]# crm
crm(live)# resource
crm(live)resource# show
vip (ocf::heartbeat:IPaddr2): Started
crm(live)resource# stop vip ##首先停掉資源,當資源在使用時是無法對他進行改動的
crm(live)resource# delete vip ##但是不能在這裏delete,會報錯語法錯誤
ERROR: syntax: delete vip
crm(live)resource# cd ..
crm(live)# configure ##進入configure執行delete
crm(live)configure# delete vip ##刪除後一定要提交,接下來就可以重新進行配置了
crm(live)configure# commit
# 配置存儲:
[root@server8 ~]# yum install scsi-* -y
[root@server4 ~]# yum install iscsi-* -y
[root@server7 ~]# yum install iscsi-* -y
[root@server8 ~]# vim /etc/tgt/targets.conf
38 <target iqn.2018-03.com.example:server.target1>
39 backing-store /dev/vdb
40 </target>
[root@server8 ~]# /etc/init.d/tgtd start
Starting SCSI target daemon: [ OK ]
# server7和server4都進行下面的操作
[root@server7 corosync]# iscsiadm -m discovery -t st -p 172.25.254.8 #發現172。25。254。8共享出來的磁盤
Starting iscsid: [ OK ]
172.25.254.8:3260,1 iqn.2018-03.com.example:server.target1
[root@server7 corosync]# iscsiadm -m node -l #登陸
Logging in to [iface: default, target: iqn.2018-03.com.example:server.target1, portal: 172.25.254.8,3260] (multiple)
Login to [iface: default, target: iqn.2018-03.com.example:server.target1, portal: 172.25.254.8,3260] successful.
[root@server7 corosync]# fdisk -l #查看本地磁盤分區,共享磁盤已經存在本地,並以sda形式存在。
Disk /dev/sda: 8589 MB, 8589934592 bytes
64 heads, 32 sectors/track, 8192 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
# 只在server4或者server7上任一個上面劃分分區和做文件系統,因爲是共享磁盤,所以另一臺主機也會同步到分區文件系統信息。
[root@server4 mfs]# fdisk /dev/sda
[root@server4 mfs]# cat /proc/partitions
8 1 8388592 sda1
[root@server4 mfs]# mkfs.ext4 /dev/sda1
[root@server7 corosync]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
64 heads, 32 sectors/track, 8192 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbc55d1d5
Device Boot Start End Blocks Id System
/dev/sda1 1 8192 8388592 83 Linux
[root@server7 corosync]# partprobe
[root@server7 corosync]# blkid
/dev/sda1: UUID="66c873bc-6d23-4a93-9e96-9059d1ffaab0" TYPE="ext4"
# 將/var/lib/mfs/* 所有數據移到網絡磁盤/dev/sda1中去,然後將其掛載到/var/lib/mfs
[root@server4 ~]# crm
crm(live)# configure
crm(live)configure# primitive mfsdata ocf:heartbeat:Filesystem params device=/dev/sda1 directory=/var/lib/mfs fstype=ext4 op monitor interval=30s
crm(live)configure# property no-quorum-policy="ignore" # 默認結點數若只有一個,表示集羣不存在,忽視
crm(live)configure# commit
# 修改啓動腳本
2213 ? S< 0:01 mfsmaster start
2215 pts/0 R+ 0:00 ps ax
# moosefs-master在不正常結束時,下一次是無法直接開啓的。前面有介紹到一種命令行方法。接下來介紹修改啓動服務腳本的方法。
[root@server4 ~]# kill -9 2213
[root@server4 ~]# /etc/init.d/moosefs-master start
Starting mfsmaster: [FAILED]
[root@server4 ~]# cd /var/lib/mfs/
[root@server4 mfs]# ls
changelog.5.mfs changelog.7.mfs metadata.mfs.back.1 stats.mfs
changelog.6.mfs metadata.mfs.back metadata.mfs.empty
[root@server4 mfs]# vim /etc/init.d/moosefs-master
29 start () {
30 echo -n $"Starting $prog: "
31 $prog start >/dev/null 2>&1
32 if [ $? -ne 0 ];then
33 $prog -a > /dev/null 2>&1 && success || failure
34 fi
35 RETVAL=$?
36 echo
37 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
38 return $RETVAL
39 }
# 測試:
[root@server4 mfs]# /etc/init.d/moosefs-master start
Starting mfsmaster: [ OK ]
[root@server4 mfs]# scp /etc/init.d/moosefs-master server7:/etc/init.d/
# 添加啓動服務資源(腳本)
[root@server4 corosync]# crm
crm(live)# configure
crm(live)configure# primitive mfsmaster lsb:moosefs-master op monitor interval=30s
crm(live)configure# commit
# 創建組,將vip mfsdata mfsmaster三個資源綁在一起,這樣他們三個就只能同時存在一臺主機上。綁定順序即是啓動順序。
[root@server4 corosync]# crm
crm(live)# configure
crm(live)configure# group mfsgroup vip mfsdata mfsmaster
crm(live)configure# commit
# 本次部署採用外部fence ,fence是C/S架構,在fence服務端節點需要安裝如下三個軟件包。
[root@foundation56 ~]# yum install -y fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64
安裝好之後使用命令fence_virtd -c進入交互式界面配置fence文件,在配置時需要注意的是選擇接口(interface)時選主機之間通信的網卡。
[root@foundation56 Desktop]# mkdir /etc/cluster # 默認不存在cluster;
服務端和客戶端之間通過key文件進行通信,key文件默認不存在,需要手動生成並拷貝到所有客戶端節點。節點默認沒有/etc/cluster目錄,需自己建立
[root@foundation56 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key
[root@foundation56 ~]# systemctl start fence_virtd.service
# 在mfsmaster端(server4,server7)安裝fence_virt服務
[root@server4 ~]# yum install fence-virt -y
[root@server7 etc]# stonith_admin -I
fence_xvm
fence_virtd
fence_virt
fence_pcmk
fence_legacy
5 devices found
# 添加fence資源
# 首先將fence服務交由集羣。由於外部fence只能識別domain,所以需要將domain與hostname綁定,並每隔30s監控一次。
[root@server4 ~]# crm
crm(live)# configure
crm(live)configure# crm(live)configure# property stonith-enabled=true
crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map="server4:server4;server7:server7" op monitor interval=30s
crm(live)configure# commit
# 配置文件總集:
[root@server4 ~]# crm
crm(live)# configure
crm(live)configure# show
node server4
node server7 \
attributes standby="off"
primitive mfsdata ocf:heartbeat:Filesystem \
params device="/dev/sda1" directory="/var/lib/mfs" fstype="ext4" \
op monitor interval="1min"
primitive mfsmaster lsb:moosefs-master \
op monitor interval="1min"
primitive vip ocf:heartbeat:IPaddr2 \
params ip="172.25.254.100" \
op monitor interval="1min"
primitive vmfence stonith:fence_xvm \
params pcmk_host_map="server4:server4;server7:server7" \
op monitor interval="1min"
group mfsgroup vip mfsdata mfsmaster
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="true" \
no-quorum-policy="ignore"
測試:查看此時vip等在server4主機上,將其斃掉或者standby,此時,所有的資源會轉移到server7主機上。同時,由於有fence的存在,斃掉的主機會自動重啓,但需要手動重啓corosync加入集羣。
[root@server4 ~]# crm node standby
[root@server4 ~]# crm node online
mfsgroup 和 vmfence資源總不會主動在一臺主機上:原因?