1 Linux集群架構(gòu)
Linux集群架構(gòu)一般分為四個層次結(jié)構(gòu):
信息層:負責心跳信息的傳遞摊趾,corosync負責
成員關系層:集群中成員關系的選舉,確定游两,corosync負責
資源管理層:集群資源的管理砾层,如虛擬IP,存儲贱案,數(shù)據(jù)庫等等肛炮,pacemaker負責
資源層:資源代理止吐,pacemaker負責
管理工具:
pcs:(Pacemaker Corosync Server)
CLVM:
集群化的LVM(Clustered LVM)
LVM的集群擴展,允許集群中的計算機通過LVM管理共享存儲
DRBD:
Distributed Replicated Block Device
軟件實現(xiàn)的侨糟、無共享的碍扔、服務器之間的鏡像塊設備內(nèi)容的存儲復制解決方案
GFS2/OCFS
Global File System 2/Oracle Cluster File System
集群文件系統(tǒng),使集群中的所有節(jié)點并發(fā)的通過標準文件系統(tǒng)接口來訪問存儲設備
2 Pacemaker體系結(jié)構(gòu)
集群總的結(jié)構(gòu)分三個部分秕重,資源代理不同,資源管理,信息及成員管理部分溶耘。
Pacemaker內(nèi)部組件
CIB主要負責集群最基本的信息配置與管理二拐,Pacemaker中的 CIB主要使用 XML的格式來顯示集群的配置信息和集群所有資源的當前狀態(tài)信息。CIB所管理的配置信息會自動在集群節(jié)點之間進行同步凳兵, PE將會使用 CIB所提供的集群信息來規(guī)劃集群的最佳運行狀態(tài)百新。并根據(jù)當前 CIB信息規(guī)劃出集群應該如何控制和操作資源才能實現(xiàn)這個最佳狀態(tài),在 PE做出決策之后庐扫,會緊接著發(fā)出資源操作指令饭望,而 PE發(fā)出的指令列表最終會被轉(zhuǎn)交給集群最初選定的控制器節(jié)點( Designated controller,DC),通常 DC便是運行 Master CRMd的節(jié)點形庭。
在集群啟動之初铅辞, pacemaker便會選擇某個節(jié)點上的 CRM進程實例來作為集群 Master CRMd,然后集群中的 CRMd便會集中處理 PE根據(jù)集群 CIB信息所決策出的全部指令集。在這個過程中萨醒,如果作為 Master的 CRM進程出現(xiàn)故障或擁有 Master CRM進程的節(jié)點出現(xiàn)故障巷挥,則集群會馬上在其他節(jié)點上重新選擇一個新的 Master CRM進程。
在PE的決策指令處理過程中验靡,DC會按照指令請求的先后順序來處理PEngine發(fā)出的指令列表倍宾,簡單來說, DC處理指令的過程就是把指令發(fā)送給本地節(jié)點上的 LRMd(當前節(jié)點上的 CRMd已經(jīng)作為 Master在集中控制整個集群胜嗓,不會再并行處理集群指令)或者通過集群消息層將指令發(fā)送給其他節(jié)點上的 CRMd進程高职,然后這些節(jié)點上的 CRMd再將指令轉(zhuǎn)發(fā)給當前節(jié)點的 LRMd去處理。當集群節(jié)點運行完指令后辞州,運行有 CRMd進程的其他節(jié)點會把他們接收到的全部指令執(zhí)行結(jié)果以及日志返回給 DC(即 DC最終會收集全部資源在運行集群指令后的結(jié)果和狀態(tài))怔锌,然后根據(jù)執(zhí)行結(jié)果的實際情況與預期的對比,從而決定當前節(jié)點是應該等待之前發(fā)起的操作執(zhí)行完成再進行下一步的操作变过,還是直接取消當前執(zhí)行的操作并要求 PEngine根據(jù)實際執(zhí)行結(jié)果再重新規(guī)劃集群的理想狀態(tài)并發(fā)出操作指令埃元。
在某些情況下,集群可能會要求節(jié)點關閉電源以保證共享數(shù)據(jù)和資源恢復的完整性媚狰,為此岛杀, Pacemaker引人了節(jié)點隔離機制,而隔離機制主要通過 STONITH進程實現(xiàn)崭孤。 STONITH是一種強制性的隔離措施类嗤, STONINH功能通常是依靠控制遠程電源開關以關閉或開啟節(jié)點來實現(xiàn)糊肠。在 Pacemaker中, STONITH設備被當成資源模塊并被配置到集群信息 CIB中遗锣,從而使其故障情況能夠被輕易地監(jiān)控到货裹。同時, STONITH進程( STONITHd)能夠很好地理解 STONITH設備的拓撲情況精偿,因此弧圆,當集群管理器要隔離某個節(jié)點時,只需 STONITHd的客戶端簡單地發(fā)出 Fencing某個節(jié)點的請求笔咽, STONITHd就會自動完成全部剩下的工作搔预,即配置成為集群資源的 STONITH設備最終便會響應這個請求,并對節(jié)點做出 Fenceing操作拓轻,而在實際使用中,根據(jù)不同廠商的服務器類型以及節(jié)點是物理機還是虛擬機经伙,用戶需要選擇不同的 STONITH設備扶叉。
3 管理工具pcs
[root@controller1 ~]$ pcs --help
Usage: pcs [-f file] [-h] [commands]...
Control and configure pacemaker and corosync.
Options:
-h, --help Display usage and exit.
-f file Perform actions on file instead of active CIB.
--debug Print all network traffic and external commands run.
--version Print pcs version information.
--request-timeout Timeout for each outgoing request to another node in
seconds. Default is 60s.
Commands:
cluster Configure cluster options and nodes.
resource Manage cluster resources.
stonith Manage fence devices.
constraint Manage resource constraints.
property Manage pacemaker properties.
acl Manage pacemaker access control lists.
qdevice Manage quorum device provider on the local host.
quorum Manage cluster quorum settings.
booth Manage booth (cluster ticket manager).
status View cluster status.
config View and manage cluster configuration.
pcsd Manage pcs daemon.
node Manage cluster nodes.
alert Manage pacemaker alerts.
最為常用的管理命令有:
cluster 配置集群選項和節(jié)點
status 查看當前集群資源和節(jié)點以及進程狀態(tài)
resource 創(chuàng)建和管理集群資源
constraint 管理集群資源約束和限制
property 管理集群節(jié)點和資源屬性
config 以用戶可讀格式顯示完整集群配置信息
4 集群資源
在 pacemaker高可用集群中产弹,資源就是集群所維護的高可用服務對象褂删。根據(jù)用戶的配置冯勉,資源有不同的種類损敷,其中最為簡單的資源是原始資源(primitive Resource),此外還有相對高級和復雜的資源組(Resource Group)和克隆資源(Clone Resource)等集群資源概念氓侧。在 Pacemaker集群中祥国,每一個原始資源都有一個資源代理(Resource Agent, RA), RA是一個與資源相關的外部腳本程序培他,該程序抽象了資源本身所提供的服務并向集群呈現(xiàn)一致的視圖以供集群對該資源進行操作控制绸罗。
使用pcs resource agent可以查看當前集群正在使用的agent
[root@node1 ~]$ pcs resource agent
使用pcs resource 可以查看當前集群正在使用的資源
[root@node1 ~]$ pcs resource
4.1 Fencing Agent
隔離代理,Fencing在一個節(jié)點不穩(wěn)定或者無應答時將其關閉,使得它不會損壞集群的其他資源,用于消除腦裂荒典。
常見Fencing Agent類型:
- Power類型
將節(jié)點的電源斷電,通常連接到物理設備如UPS - Storage類型
確保某個時間只有一個節(jié)點會讀寫共享的存儲
4.2 STONITH(shoot the other node in the head)
Heartbeat軟件包的一個組件酪劫,用于防止集群出現(xiàn)腦裂現(xiàn)象。一旦集群中的節(jié)點相互之間失去了通信寺董,無法知道其他節(jié)點的狀態(tài)覆糟,此時集群中的每個節(jié)點將嘗試fence(隔離或“射殺”)失去通信的節(jié)點,確保這些節(jié)點不再搶奪資源遮咖,然后才繼續(xù)啟動服務資源滩字,對外提供服務。
- 主服務器可以復位備用服務器的電源
- 備用服務器也可以復位主服務器的電源
安裝fence-agents軟件包
yum -y install fence-agents
安裝完畢后可查看到系統(tǒng)支持的stonith設備類型
[root@node1 ~]$ pcs stonith list
fence_apc - Fence agent for APC over telnet/ssh
fence_apc_snmp - Fence agent for APC, Tripplite PDU over SNMP
fence_bladecenter - Fence agent for IBM BladeCenter
fence_brocade - Fence agent for HP Brocade over telnet/ssh
fence_cisco_mds - Fence agent for Cisco MDS
fence_cisco_ucs - Fence agent for Cisco UCS
fence_compute - Fence agent for the automatic resurrection of OpenStack compute
instances
fence_drac5 - Fence agent for Dell DRAC CMC/5
fence_eaton_snmp - Fence agent for Eaton over SNMP
fence_emerson - Fence agent for Emerson over SNMP
fence_eps - Fence agent for ePowerSwitch
fence_evacuate - Fence agent for the automatic resurrection of OpenStack compute
instances
fence_hpblade - Fence agent for HP BladeSystem
fence_ibmblade - Fence agent for IBM BladeCenter over SNMP
fence_idrac - Fence agent for IPMI
fence_ifmib - Fence agent for IF MIB
fence_ilo - Fence agent for HP iLO
fence_ilo2 - Fence agent for HP iLO
fence_ilo3 - Fence agent for IPMI
fence_ilo3_ssh - Fence agent for HP iLO over SSH
fence_ilo4 - Fence agent for IPMI
fence_ilo4_ssh - Fence agent for HP iLO over SSH
fence_ilo_moonshot - Fence agent for HP Moonshot iLO
fence_ilo_mp - Fence agent for HP iLO MP
fence_ilo_ssh - Fence agent for HP iLO over SSH
fence_imm - Fence agent for IPMI
fence_intelmodular - Fence agent for Intel Modular
fence_ipdu - Fence agent for iPDU over SNMP
fence_ipmilan - Fence agent for IPMI
fence_kdump - Fence agent for use with kdump
fence_mpath - Fence agent for multipath persistent reservation
fence_rhevm - Fence agent for RHEV-M REST API
fence_rsa - Fence agent for IBM RSA
fence_rsb - I/O Fencing agent for Fujitsu-Siemens RSB
fence_sbd - Fence agent for sbd
fence_scsi - Fence agent for SCSI persistent reservation
fence_virt - Fence agent for virtual machines
fence_vmware_soap - Fence agent for VMWare over SOAP API
fence_wti - Fence agent for WTI
fence_xvm - Fence agent for virtual machines
以上輸出中的每個Fence agent都是一種Stonith設備御吞,從名字的后綴可以看出麦箍,這些Agent有以下幾類:
通過服務器的管理口來關閉被fencing節(jié)點的電源,如ilo陶珠,ipmi挟裂,drac,絕大多數(shù)Agent屬于此類揍诽,這些用于控制物理服務器節(jié)點话瞧。
通過Hybervisor虛擬層或云平臺關閉被fencing的節(jié)點嫩与,如virt,vmware交排,xvm划滋,compute,這些用于控制虛機節(jié)點埃篓。
通過禁止被fencing節(jié)點訪問特定資源阻止起啟動处坪,如scsi,math架专,brocade同窘。
前兩種都屬于電源類型的Stonith設備,而第三種和電源無關部脚,之所以要這樣劃分想邦,是因為:
使用非電源類型Stonith設備時,被fenced的節(jié)點沒有關閉電源委刘,僅僅是服務沒有啟動丧没。在對其重啟前,必須進行unfence锡移,這樣節(jié)點才能正常重啟呕童。因此創(chuàng)建此種類型的Stonith設備時需指定參數(shù)meta provides=unfencing。
使用電源類型的stonith設備則無需指定淆珊,因為被fenced的節(jié)點電源已經(jīng)被關閉夺饲,而啟動節(jié)點這個操作本身即為unfenced。
4.3 Pacemaker服務模式
- Active/Active模式
負載均衡模式 - Active/Passive模式
主備模式 - N+1模式
所謂的N+1就是多準備一個額外的備機節(jié)點施符,當集群中某一節(jié)點故障后該備機節(jié)點會被激活從而接管故障節(jié)點的服務往声。在不同節(jié)點安裝和配置有不同軟件的集群中,即集群中運行有多個服務的情況下戳吝,該備機節(jié)點應該具備接管任何故障服務的能力烁挟,而如果整個集群只運行同一個服務,則N+1模式便退變?yōu)?Active/Passive模式骨坑。 - N+M模式
在單個集群運行多種服務的情況下撼嗓,N+1模式下僅有的一個故障接管節(jié)點可能無法提供充分的冗余,因此欢唾,集群需要提供 M(M>l)個備機節(jié)點以保證集群在多個服務同時發(fā)生故障的情況下仍然具備高可用性且警, M的具體數(shù)目需要根據(jù)集群高可用性的要求和成本預算來權衡。
5 集群安裝及基本配置
5.1 安裝軟件
需要安裝pacemaker礁遣、corosync斑芜、pcs、psmic祟霍、policycoretils-python杏头、fence-agents-all
5.2 配置SSH免密登錄
使用ssh-keygen盈包,ssh-copy-id命令
5.3 配置時鐘服務器
在crontab中寫入定時同步任務
每隔30分鐘,同步一次時間
[root@node1 ~]$ crontab -e
*/30 * * * * /usr/sbin/ntpdate time.windows.com &> /dev/null
5.4 添加防火墻規(guī)則
firewalld自帶high-availability服務醇王,可以打開以下端口:
- TCP:端口2224呢燥、3121、21064
- UDP:端口5405
- DLM:端口21064
[root@node1 ~]$ firewall-cmd --add-service=high-availability --permanent
[root@node1 ~]$ firewall-cmd --reload
5.5 配置pcsd守護程序
pcs軟件包包括守護程序寓娩、命令行工具叛氨、GUI工具
打開pcsd守護程序,并設置自動啟動
[root@node1 ~]$ systemctl start pcsd
[root@node1 ~]$ systemctl enable pcsd
5.6 配置hacluster賬戶密碼
安裝集群軟件包時棘伴,會創(chuàng)建一個hacluster賬戶寞埠,它的密碼默認是禁用的
[root@node1 ~]$ getent shadow hacluster
hacluster:!:18531::::::
第二個字段是!表示禁止此賬號登錄
此賬號是用于集群之間通信時的身份認證的,必須要在每個節(jié)點上設置密碼以啟用此賬戶
[root@node1 ~]$ echo 'linuxplus' | passwd --stdin hacluster
[root@node1 ~]$ getent shadow hacluster
hacluster:$6$UbmPEg20$UMxkxEBbeQHadgq6dgmM87LZ8s5yDcnnEDnuTdMQ3.CrdCULHVX8TxTNAKeR6MVMWC0i.wbGWFmvMuMdfajki/:18531::::::
第二個字段變?yōu)榱思用艿拿艽a
5.7 集群及Pacemaker配置文件
配置文件為corosync.conf和cib.xml焊夸,默認不存在仁连。
/etc/corosync/下有corosync.conf.example官方的配置示例。
/var/lib/pacemaker/cib/cib.xml是自動生成的集群數(shù)據(jù)庫文件阱穗。
corosync.conf提供corosync使用的集群參數(shù)饭冬。
cib.xml存儲集群配置及所有資源的信息,pcsd負責在集群的所有節(jié)點上同步cib的內(nèi)容颇象。
不推薦手工修改配置文件伍伤,推薦使用pcs工具進行管理維護
6 集群的創(chuàng)建
6.1 認證集群節(jié)點
認證組成集群的節(jié)點并徘,在任意一個節(jié)點上驗證所有的節(jié)點遣钳,使用之前配置的hacluster賬號。
pcs cluster auth [<node>[:<port>]] [...] [-u <username>] [-p <password>] [--force] [--local]
[root@node1 ~]$ pcs cluster auth node1 node2 -u hacluster -p linuxplus
node1: Authorized
node2: Authorized
6.2 配置和同步集群節(jié)點
創(chuàng)建配置文件/etc/corosync/corosync.conf:
- 手工創(chuàng)建:參考example文件
- 自動生成:通過pcs cluster setup命令創(chuàng)建麦乞,推薦使用這種方式
pcs cluster setup --name <cluster name> <node1[,node1-altaddr]> [<node2[,node2-altaddr]>]
[root@node1 ~]$ pcs cluster setup --name cluster1 node1 node2
6.3 在集群節(jié)點中啟動集群服務
使用pcs cluster start命令蕴茴,默認只會啟動本節(jié)點,需要添加--all參數(shù)
[root@node1 ~]$ pcs cluster start --help
Usage: pcs cluster start...
start [--all | <node>... ] [--wait[=<n>]] [--request-timeout=<seconds>]
Start a cluster on specified node(s). If no nodes are specified then
start a cluster on the local node. If --all is specified then start
a cluster on all nodes. If the cluster has many nodes then the start
request may time out. In that case you should consider setting
--request-timeout to a suitable value. If --wait is specified, pcs
waits up to 'n' seconds for the cluster to get ready to provide
services after the cluster has successfully started.
[root@node1 ~]$ pcs cluster start --all
node1: Starting Cluster (corosync)...
node2: Starting Cluster (corosync)...
node1: Starting Cluster (pacemaker)...
node2: Starting Cluster (pacemaker)...
查看集群狀態(tài)姐直,發(fā)現(xiàn)集群組件已經(jīng)啟動倦淀,node1是目前的DC
[root@node1 ~]$ pcs cluster status
Cluster Status:
Stack: corosync
Current DC: node1 (version 1.1.21-4.el7-f14e36fd43) - partition WITHOUT quorum
Last updated: Mon Sep 28 12:29:38 2020
Last change: Sat Sep 26 21:27:37 2020 by hacluster via crmd on node1
2 nodes configured
0 resources configured
PCSD Status:
node1: Online
node2: Online