Linux高可用HA集群之Corosync详解.docx
《Linux高可用HA集群之Corosync详解.docx》由会员分享,可在线阅读,更多相关《Linux高可用HA集群之Corosync详解.docx(11页珍藏版)》请在冰豆网上搜索。
![Linux高可用HA集群之Corosync详解.docx](https://file1.bdocx.com/fileroot1/2022-12/13/b364e20a-5669-46ff-9f5a-e5cbc120f1c4/b364e20a-5669-46ff-9f5a-e5cbc120f1c41.gif)
Linux高可用HA集群之Corosync详解
Linux高可用(HA)集群之Corosync 詳解
大綱
一、Corosync概述
二、Corysync與Pacemaker安裝
三、Corosync詳細配置
四、Corosync啟動信息
一、Corosync概述
1.簡單概述
要說明corosync的由來,首先我們得從AIS說起,然後說明OpenAIS,最後才會說到corosync。
2.AIS概述
應用介面規範(AIS)是用來定義應用程式介面(API)的開放性規範的集合,這些應用程式作為中間件為應用服務提供一種開放、高移植性的程式介面。
是在實現高可用應用過程中是亟需的。
服務可用性論壇(SAForum)是一個開放性論壇,它開發並發布這些免費規範。
使用AIS規範的應用程式介面(API),可以減少應用程式的複雜性和縮短應用程式的開發時間,這些規範的主要目的就是為了提高中間組件可攜性和應用程式的高可用性。
SAFAIS是一個開放性工程,在不斷更新中。
3.OpenAIS概述
OpenAIS是基於SAForum標準的集群框架的應用程式介面規範。
OpenAIS提供一種集群模式,這個模式包括集群框架,集群成員管理,通信方式,集群監測等,能夠為集群軟件或工具提供滿足AIS標準的集群介面,但是它沒有集群資源管理功能,不能獨立形成一個集群。
OpenAIS組件包括AMF,CLM,CKPT,EVT,LCK,MSG,TMR,CPG,EVS等,因OpenAIS分支不同,組件略有不同。
(下面介紹)OpenAIS主要包含三個分支:
Picacho,Whitetank,Wilson。
Wilson是最新的,比較穩定的版本是從openais1.0.0到openais1.1.4。
Whitetank現在是主流分支版本,比較穩定的版本是openais0.80到openais0.86。
Picacho第一代的OpenAIS的分支,比較穩定的版本是openais0.70和openais0.71。
現在比較常用的是Whitetank和Wilson,兩者之間有很多不同。
OpenAIS從Whitetank升級到Wilson版本後,組件變化很大,Wilson把Openais核心架構組件獨立出來放在Corosync(Corosync是一個集群管理引擎)裡面。
Whitetank包含的組件有AMF,CLM,CKPT,EVT,LCK,MSG,CPG,CFG,EVS,aisparser,VSF_ykd,bojdb等。
而Wilson只含有AMF,CLM,CKPT,LCK,MSG,EVT,TMR(TMR,Whitetank裡面沒有),這些都是AIS組件。
其他核心組件被放到了Corosync內。
Wilson被當做Corosync的一個外掛程式。
(詳細請查看官方文檔)
4.Corosync概述
Corosync是OpenAIS發展到Wilson版本後衍生出來的開放性集群引擎工程。
可以說Corosync是OpenAIS工程的一部分。
OpenAIS從openais0.90開始獨立成兩部分,一個是Corosync;另一個是AIS標準介面Wilson。
Corosync包含OpenAIS的核心框架用來對Wilson的標準介面的使用、管理。
它為商用的或開源性的集群提供集群執行框架。
Corosync執行高可用應用程式的通信組系統,它有以下特徵:
一個封閉的程式組(Aclosedprocessgroupcommunicationmodel)通信模式,這個模式提供一種虛擬的同步方式來保證能夠複製服務器的狀態。
一個簡單可用性管理組件(Asimpleavailabilitymanager),這個管理組件可以重新啟動應用程式的進程當它失敗後。
一個配置和內存數據的統計(Aconfigurationandstatisticsin-memorydatabase),內存數據能夠被設置,回復,接受通知的更改資訊。
一個定額的系統(Aquorumsystem?
),定額完成或者丟失時通知應用程式。
5.AIS、OpenAIS,Corosync的關係
(1).AIS與Whitetank的關係
由圖3,可以看出,OpenAIS的分支版本Whitetank除了包含AIS標準的應用程式介面,同時也有自己獨立的管理模塊,這些獨立的模塊為圖3中淺黃色部分,包含CPG,CFG,EVS,aisparser,VSF_ykd,bojdb等控制模塊。
(2).AIS與Wilson的關係
當OpenAIS到了Wilson以後,OpenAIS一分為二,Wilson的組件基本都是AIS組件。
其他控制的核心組件被添加到Corosync中,關係如圖4所示。
(3).Corosync與OpenAIS關係
圖5所示,Wilson與Whitetank的主要區別在於Wilson相比Whitetank缺少核心架構。
Wilson作為Corosync的外掛程式支持SAForum。
6.OpenAIS集群實例
(1).CMAN
CMAN是紅帽RHCS套件的核心部分,CCS是CMAN集群配置系統,配置cluster.conf,而cluster.conf其實就是openais的設定檔,通過CCS映射到openais。
(2).Pacemaker1.x+corosync1.x
Pacemaker升級到1.0版本後,從Heartbeat獨立出來,Pacemakerachievesmaximumavailabilityforyourclusterservicesbydetectingandrecoveringfromnodeandservice-levelfailures. Itachievesthisbyutilizingthemessagingandmembershipcapabilitiesprovidedbyyourpreferredclusterinfrastructure(currentlyeitherCorosyncorHeartbeat)
7.總結
簡單的說,AIS就是一個通用的應用程式編程介面,OpenAIS是AIS的子項目,標準的集群框架的應用程式介面規範,而corosync是OpenAIS是具體實現。
這樣說大家應該很好理解吧!
8.corosync
版本
官方網站:
http:
//corosync.github.io/corosync/ ,目前官方同在維護兩個版本分別為,
corosync1.x–>corosync1.4.6(最新)代號:
flatiron
corosync2.x–>corosync2.3.1(最新)代號:
needle
9.corosync與pacemaker組合
從上圖中我們可以看到,不管heartbeat,還是corosync都是高可用集群中的ClusterMessagingLayer(集群資訊層),是主要傳遞發集群資訊與心跳資訊的,並沒有資源管理功能,資源管理還得依賴於上層的crm(ClusterresourceManager,集群資源管理器),最著名的資源管理器,就是pacemaker,它是heartbeatv3分離出去的子項目。
而現在corosync+pacemaker成了高可用集群中的最佳組合。
好了,到這裡corosync與pacemaker的基礎知識就說到這裡了,下面我們來看看怎麼安裝corosync與pacemaker。
二、Corysync與Pacemaker安裝
1.環境說明
(1).作業系統
CentOS 6.4X86_64位元系統
(2).軟體環境
corosync-1.4.1-15.el6_4.1.x86_64
pacemaker-1.1.8-7.el6.x86_64
(3).拓撲環境
2.前提條件
node1:
(1).各節點之間主機名稱互相解析
[root@node1~]#uname-n
[root@node1~]#vim/etc/hosts
127.0.0.1 localhostlocalhost.localdomainlocalhost4localhost4.localdomain4
:
:
1 localhostlocalhost.localdomainlocalhost6localhost6.localdomain6
192
.168.18.201 node1
192.168.18.202 node2
[root@node1~]#pingnode1
[root@node1~]#pingnode2
(2).各節點之間時間同步
1[root@node1~]#ntpdate210.72.145.44
(3).各節點之間ssh互信
[root@node1~]#ssh-keygen -trsa-f~/.ssh/id_rsa -P''
[root@node1~]#ssh-copy-id-i.ssh/id_rsa.pubroot@
node2:
(1).各節點之間主機名稱互相解析
[root@node2~]#uname-n
[root@node2~]#vim/etc/hosts
127.0.0.1 localhostlocalhost.localdomainlocalhost4localhost4.localdomain4
:
:
1 localhostlocalhost.localdomainlocalhost6localhost6.localdomain6
192.168.18.201 node1
192.168.18.202 node2
[root@node2~]#pingnode1
[root@node2~]#pingnode2
(2).各節點之間時間同步
[root@node2~]#ntpdate210.72.145.44
(3).各節點之間ssh互信
[root@node2~]#ssh-keygen -trsa-f~/.ssh/id_rsa -P''
[root@node2~]#ssh-copy-id-i.ssh/id_rsa.pubroot@
3.配置yum源(EPEL源)
node1:
[root@node1src]#wgethttp:
//download.Fedora project.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node1src]#rpm-ivhepel-release-5-4.noarch.rpm
warning:
epel-release-5-4.noarch.rpm:
HeaderV3DSAsignature:
NOKEY,keyID217521f6
Preparing... ###########################################[100%]
1:
epel-release ###########################################[100%]
[root@node1
src]#rpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@node1src]#yumlist
node2:
[root@node2src]#wgethttp:
//download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node2src]#rpm-ivhepel-release-5-4.noarch.rpm
warning:
epel-release-5-4.noarch.rpm:
HeaderV3DSAsignature:
NOKEY,keyID217521f6
Preparing... ###########################################[100%]
1:
epel-release ###########################################[100%]
[root@node2src]#rpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@node2src]#yumlist
4.關閉防火牆與SELinux
node1:
[root@node1~]#serviceiptablesstop
[root@node1~]#vim/etc/selinux/config
#ThisfilecontrolsthestateofSELinuxonthesystem.
#SELINUX=cantakeoneofthesethreevalues:
# enforcing-SELinuxsecuritypolicyisenforced.
# permissive-SELinuxprintswarningsinsteadofenforcing.
# disabled-SELinuxisfullydisabled.
SELINUX=disabled
#SELINUXTYPE=typeofpolicyinuse. Possiblevaluesare:
# targeted-Onlytargetednetworkdaemonsareprotected.
# strict-FullSELinuxprotection.
SELINUXTYPE=targeted
node2:
[root@node2~]#serviceiptablesstop
[root@node2~]#vim/etc/selinux/config
#ThisfilecontrolsthestateofSELinuxonthesystem.
#SELINUX=cantakeoneofthesethreevalues:
# enforcing-SELinuxsecuritypolicyisenforced.
# permissive-SELinuxprintswarningsinsteadofenforcing.
# disabled-SELinuxisfullydisabled.
SELINUX=disabled
#SELINUXTYPE=typeofpolicyinuse. Possiblevaluesare:
# targeted-Onlytargetednetworkdaemonsareprotected.
#
strict-FullSELinuxprotection.
SELINUXTYPE=targeted
5.安裝corosync與pacemaker
node1:
12[root@node1~]#yuminstall-ycorosync*
[root@node1~]#yuminstall-ypacemaker*
node2:
[root@node2~]#yuminstall-ycorosync*
[root@node2~]#yuminstall-ypacemaker*
三、Corosync詳細配置
1.提供設定檔
[root@node1~]#cd/etc/corosync/
[root@node1corosync]#ll
總用量24
-rw-r--r--1rootroot 4455月 1505:
09corosync.conf.example
-rw-r--r--1rootroot10845月 1505:
09corosync.conf.example.udpu
drwxr-xr-x2rootroot40965月 1505:
09service.d
drwxr-xr-x2rootroot40965月 1505:
09uidgid.d
注:
大家可以看到提供一個樣例檔corosync.conf.example
[root@node1corosync]#cpcorosync.conf.examplecorosync.conf
2.修改設定檔
[root@node1corosync]#catcorosync.conf
#Pleasereadthecorosync.conf.5manualpage
compatibility:
whitetank
totem{
version:
2
secauth:
on#啟動認證
threads:
2
interface{
ringnumber:
0
bindnetaddr:
192.168.18.0#修改心跳線網段
mcastaddr:
226.99.10.1#組播傳播心跳資訊
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
}
#啟用pacemaker
service{
ver:
0
name:
pacemaker
}
aisexec{
user:
root
group:
root
}
注:
用mancorosync.conf可以查看所有選項的意思。
3.生成金鑰檔
注:
corosync生成key檔會預設調用/dev/random亂數設備,一旦系統中斷的IRQS的亂數不夠用,將會產生大量的等待時間,因此,為了節約時間,我們在生成key之前講random替換成urandom,以便節約時間。
[root@node1corosync]#mv/dev/{random,random.bak}
[root@node1corosync]#ln-s/dev/urandom/dev/random
[root@node1corosync]#corosync-keygen
CorosyncClusterEngineAuthenticationkeygenerator.
Gathering1024bitsforkeyfrom/dev/random.
Presskeysonyourkeyboardtogenerateentropy
.
Writingcorosynckeyto/etc/corosync/authkey.
4.查看生成的key文件
[root@node1corosync]#ll
總用量24
-r--------1rootroot 1288月 1314:
16authkey
-rw-r--r--1rootroot 5218月 1311:
11corosync.conf
-rw-r--r--1rootroot 4455月 1505:
09corosync.conf.example
-rw-r--r--1rootroot10845月 1505:
09corosync.conf.example.udpu
drwxr-xr-x2rootroot40965月 1505:
09service.d
drwxr-xr-x2rootroot40965月 1505:
09uidgid.d
5.將key文件authkey與設定檔corosync.conf複製到node2上
[root@node1corosync]#scp-pauthkeycorosync.confnode2:
/etc/corosync/
authkey 100% 128 0.1KB/s 00:
00
corosync.conf 100% 521 0.5KB/s 00:
00
[root@node2~]#cd/etc/corosync/
[root@node2corosync]#ll
總用量24
-r--------1rootroot 1288月 1314:
16authkey
-rw-r--r--1rootroot 5218月 1311:
11corosync.conf
-rw-r--r--1rootroot 4455月 1505:
09corosync.conf.example
-rw-r--r--1rootroot10845月 1505:
09corosyn