1. 程式人生 > >corosync+pacemaker高可用部署

corosync+pacemaker高可用部署

entos 結構圖 {} ESS 狀態 null rep download verbose

OpenAIS:是實現高可用集群的一種完備解決方案;Corosync是集群管理套件的一部分,通常會與其他資源管理器一起組合使用它在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等,Pacemaker是一個集群資源管理器。它利用集群基礎構件(OpenAIS 、heartbeat或corosync)提供的消息和成員管理能力來探測並從節點或資源級別的故障中恢復,以實現群集服務(亦稱資源)的最大可用性。

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高可用部署