corosync+pacemaker高可用部署
OpenAIS:分為3個層次
Messaging Layer:infrastructure layer
CRM:cluster resource layer(包括local resource layer)
RA:resource agent:管理機制:start,stop,restart,status,monitor
Messaging Layer:集群事務信息及心跳信息傳播方式,unicast、broadcast、multicast
如圖架構所示:
組合實現的方式
heartbeat v1 (haresources):獨立實現
heartbeat v2 (crm) :獨立實現
heartbeat v3 + pacemaker
corosync + pacemaker
corosync v1 + pacemaker (plugin) )—(v1 -沒有投票系統)
corosync v2 + pacemkaer (standalone service)
cman + rgmanager (RHCS)
corosync v1 + cman + pacemaker----(cman提供投票系統)
CRM:資源管理:
資源類型:
primitive:主資源,基本資源,在集群中只能運行在一個節點
clone:克隆資源,在集群中可以運行多個實例,運行在多個節點
multi-state(master/salve):多狀態克隆,副本間存在主從關系
group:組資源,將一個高可用服務所需要的所有資源組織在一起
RA:recourse agent資源代理
代理的類別:classes
LSB(linux standard base):腳本文件:/etc/init.d/*、/etc/rc.d/init.d/*、(start|stop|restart|status|running,|reload)--註:不能開機自動運行
service:(heartbeat legacy):/etc/ha.d/haresources.d/* IPAddr(ifcfg)、IPAddr2(ip)
OCF(Open Cluster Framework):/usr/lib/ocf/resource.d/provider,類似LSB腳本 但支持:start,stop,monitor,meta-data
provider :.isolation heartbeat openstack pacemaker
stonish:隔離設備專用資源
systemd:/usr/lib/systemd/system/ 註:必須設置開機能自動啟動。systemctl enable *.service
資源屬性:定義格式 meta attribute=value
priority:優先級
target-role:started,stopped,master;如果設置為stopped,配置完後資源沒有立即啟動
is-managed:是否允許crm管理此資源
resource-stickiness:資源黏性,對當前節點的傾向性
allow-migrate:是否允許遷移,新版本migrate改為使用move
資源的傾向性,約束關系:
location:位置約束,資源對當前節點傾向性
colocation:排列約束 ,資源彼此間是否能運行在同一個節點的傾向性
order:順序約束,多個資源啟動順序依賴關系
安裝:CentOS 7: corosync v2 + pacemaker
結構圖如圖:
配置HA的群集前提:
(1) 時間同步;crontab -e */5 * * * * /sbin/ntpdate 192.168.1.112 &>dev/null
配置ntp同步服務器
(2) 基於當前正使用的主機名互相訪問;嚴格與hostname一致
名稱解析:不建議依賴於dns服務進行解析;
hostnamectl set-hostname node1.xuetong.com:立即生效並永久有效
(3)基於ssh互信
ssh-keygen -t rsa -P ''
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
(4) 隔離設備;
各節點安裝:
#yum -y install corosync pacemaker (可以直接安裝pacemaker即可,依賴於corosync)
corosync的配置文件:/etc/corosync/corosync.conf,/etc/corosync/authkey
totem { }:通信協議,節點間通信,加密與否
interface{}:至少有一個用於監聽集群信息
logging {}:日誌系統,日記記錄及存儲
quorum {}:投票系統
nodelist {}:節點列表
pacemaker:配置文件(配置進程的運行特性):/etc/sysconfig/pacemaker :默認即可
配置文件:
totem {
version: 2 #corosync版本
cluster_name: mycluster #設置集群名稱
crypto_cipher: aes128 #設置安全機制
crypto_hash: sha1
interface { #配置接口
ringnumber: 0 #The ringnumber must start at 0
bindnetaddr: 192.168.1.0 #設置監聽的IP地址
mcastaddr: 239.255.1.1 #設置多播地址
mcastport: 5405 #多播地址端口
ttl: 1
}
}
logging { #日誌相關信息配置
fileline: off
to_stderr: no
to_logfile: yes
logfile: /var/log/cluster/corosync.log
to_syslog: yes
debug: off
timestamp: on
logger_subsys {
subsys: QUORUM
debug: off
}
}
quorum {
provider: corosync_votequorum #定義投票機制
}
nodelist { #添加節點信息
node {
ring0_addr: 192.168.1.120
nodeid: 1
}
node {
ring0_addr: 192.168.1.112
nodeid: 2
}
}
本次實驗通過使用crmsh來管理集群事務:
可以通過http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/noarch/下載相關組件
crmsh命令使用:ls,help
command --help
查看集群信息狀態
status [<option> ...]
option:: full | bynode | inactive | ops| timing | failcounts | verbose | quiet | html | xml |simple | tickets | noheaders | detail | brie
配置集群CIB:configure 步驟
配置集群屬性:property
配置資源默認屬性:rsc_default
配置集群資源:primitive、group、clone、master/slave
配置約束:location、colacation、order
通過help命令可以獲取ra/resource/node 使用幫助:
配置集群資源:
primitive <rsc> {[<class>:[<provider>:]]<type>|@<template>}
<rsc>配置資源名稱
校驗編寫是否存在錯誤:
提示錯誤因為沒有定義stonish資源,關閉stonish設備
默認啟用對稱設備,這樣運行在任何節點都一樣
配置完成後需要commit提交才會保存生效;
測試高可用效果:讓某個節點待定,查看資源遷移情況,重新上線後的結果,資源的黏性:可以強制遷移
standby [<node>] [<lifetime>] ,沒指名node,表示當前節點
遷移資源:
move <rsc> [<node>] [<lifetime>] [force] {migrate之前版本} unmigrate--->clear <rsc>
mv webvip node1.xuetong.com
停止某個資源:stop <src>
配置httpd服務:
安裝httpd後要確保開機能自動啟動enable:systemctl enable httpd.service
查看ra資源代理是否有httpd服務
配置http資源,出現告警通過配置資源時設置:資源的operations :op op_type [attribute <timeout>]
兩個資源分散均衡至不同節點,高可用實現期望一類資源運行在同一個節點,通過定義資源約束關系,在一個組服務。
把兩個資源定義在同一個組:
兩個資源運行在一個節點上
測試結果,並模擬節點遷移
再次讓node1節點上線,資源的傾向性,因此服務運行在node3,實現資源手動遷移:
配置文件系統:filesystem,提供同樣的資源:使用集中式存儲nas-->NFS
yum install nfs-utils.x86_64
vim /etc/exports
/www/html 192.168.1.0/24(rw,no_root_squash)
systemctl start nfs.server
手動測試NFS能否正常工作然後掛載使用:mount -t nfs nfsserver-ip:/www/html /var/www/html
測試正常後,通過配置資源來實現NFS部署:
重新定義group關系:group web webvip webstore webserver,這樣能夠簡單實現nfs提供共享文件存儲:
為了區分資源的啟動順序、運行在哪個節點可以通過定義約束關系:
colocation:定義資源能否運行在同一節點
colocation <id> <score>: <rsc>[:<role>] <with-rsc>[:<role>]
coloaction webserver_with_webip inf: webserver webip:表示這兩個資源必須運行在一起
order:定義資源啟動先後順序:
order <id> [{kind|<score>}:] first then [symmetrical=<bool>]
kind :: Mandatory | Optional | Serialize
order o-1 Mandatory: webip webserver :表示先啟動webip資源再到webserver資源
location:定義資源運行在哪個節點上傾向性
location webip_pre_node1 webip 50: node1.xuetong.com
location webip_pre_node2 webip inf: node2.xuetong.com
corosync+pacemaker高可用部署