Corosync是OpenAIS發展到Wilson版本後衍生出來的開放性集羣引擎工程。能夠說Corosync是OpenAIS工程的一部分,Corosync執行高可用應用程序的通訊組系統,它有如下特徵: 一個封閉的程序組通訊模式,這個模式提供一種虛擬的同步方式來保證可以複製服務器的狀態。java
一個簡單可用性管理組件,這個管理組件能夠從新啓動應用程序的進程當它失敗後。node
一個配置和內存數據的統計,內存數據可以被設置,回覆,接受通知的更改信息。mysql
一個定額的系統,定額完成或者丟失時通知應用程序。web
corosync是高可用集羣中的Cluster Messaging Layer(集羣信息層),是主要傳遞發集羣信息與心跳信息的,並無資源管理功能,資源管理還得依賴於上層的crm(Cluster resource Manager,集羣資源管理器),最著名的資源管理器,就是pacemaker,它是heartbeat v3分離出去的子項目。而如今corosync+pacemaker成了高可用集羣中的最佳組合。sql
pacemaker是一個羣集資源管理器。它實現最大可用性羣集服務(亦稱資源管理)的節點和資源級故障檢測和恢復使用。 它能夠作乎任何規模的集羣,並配備了一個強大的依賴模型,使管理員可以準確地表達羣集資源之間的關係(包括順序和位置)。幾乎任何能夠編寫腳本,能夠管理做爲心臟起搏器集羣的一部分。 pacemaker是個資源管理器,不是提供心跳信息的,pacemaker是一個延續的CRM(亦稱Heartbeat V2資源管理器),最初是爲心跳,但已經成爲獨立的項目。apache
pacemaker 特色vim
1.主機和應用程序級別的故障檢測和恢復服務器
2.幾乎支持任何冗餘配置cors
3.同時支持多種集羣配置模式ssh
4.配置策略處理法定人數損失(多臺機器失敗時)
5.支持應用啓動/關機順序
6.支持在同一臺機器上運行的應用程序
7.支持多種模式的應用程序(如主/從)
8.能夠測試任何故障或羣集的羣集狀態
配置pacemaker有兩種配置途徑,一時命令行工具包括crm和pcs,二是圖形工具:pugui,LCMC,pcsd和mgmt,其中LCMC是java編寫的圖形管理界面;Hawk是官方推薦代替mgmt的web界面配置工具,pcsd是pcs的圖形界面。
從pacemaker1.1.8開始crmsh就做爲一個獨立項目再也不提供須要另行下載。
crm有兩種工做方式:
1.批處理模式就是在命令行中直接輸入命令(如執行crm status)
2.交互式模式:運行crm,進入crm(live)# , 按2次Tab鍵可顯示該層級全部指令
crm中經常使用一級命令:
configure 用於設置具體參數
resource 對已定義資源進行各類操做
ra resource agents center, 可查看哪些resource agent可供使用
cib 相似於configure,只是操做的是cib shadow
node 對節點進行各種操做
status 顯示集羣狀態信息
cd 返回上一級
Ctrl+c 退出
configure中的指令
show 查看當前配置
verify 檢查當前配置是否正確, 至關於crm_verify -L
commit 提交配置使配置生效,修改後沒提交系統不會保存更改的信息
delete 刪除某項配置, name爲該項的名稱
edit 編輯某項配置,name爲該項的名稱
primitive 定義資源
monitor 資源檢視
group 建立組資源,將幾項資源編成一組
clone 克隆已建的資源
ms/master 定義master/slave資源
primitive中參數說明
資源代理類型: lsb, ocf, stonith, service
資源代理的提供程序: heartbeat , pacemaker
資源代理名稱:即resource agent, 如:IPaddr2,httpd, mysql
meta--元屬性, 是能夠爲資源添加的選項。它們告訴 CRM 如何處理特定資源。
params--實例屬性,是特定資源類的參數,用於肯定資源類的行爲方式及其控制的服務實例。
op--操做,默認狀況下,羣集不會確保您的資源一直正常。要指示羣集確保資源情況依然正常,須要向資源的定義中添加一個監視操做monitor。可爲全部類或資源代理添加monitor。
op_type :包括 start,stop,monitor
interval :執行操做的頻率。單位:秒。
timeout : 須要等待多久才聲明操做失敗。
requires :須要知足什麼條件才能發生此操做。容許的值:nothing、quorum 和 fencing。默認值取決因而否啓用屏障和資源的類是否爲 stonith。對於 STONITH 資源,默認值爲 nothing。
on-fail :此操做失敗時執行的操做。容許的值:
ignore:僞裝資源沒有失敗。
block:不對資源執行任何進一步操做。
stop:中止資源而且不在其餘位置啓動該資源。
restart:中止資源並重啓動。
fence:關閉資源失敗的節點 (STONITH)。
standby:將全部資源從資源失敗的節點上移走。
enabled 若是值爲 false,將操做視爲不存在。容許的值:true、false。
下面是pacemaker的配置
yum install pacemaker cd /etc/corosync/ cp corosync.conf.example corosync.conf vim corosync.conf bindnetaddr: 172.25.9.0 #設定網段 mcastaddr: 226.94.1.1 #多波地址 mcastport:5405 #多波端口 service{ name:pacemaker #添加pacemaker服務 ver:0 #0爲啓動corsync時自動啓動pacemaker服務,1爲不接管服務 }
在其餘節點作相同配置
啓動corosync
/etc/init.d/corosync start crm_verify -LV #查看配置文件是否正確 crm_mon #查看節點狀態
安裝crm命令來配置pacemaker
yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y crm #進入crm交互界面 configure show#查看當前配置
忽略法定節點數:(集羣不會覺得節點不夠而失效)
property no-quorum-policy=ignore commi #將修改同步到其餘節點
添加fence(要安裝cman)
primitive vmfence stonith:fence_xvm params pcmk_host_map="server2.example.com:vm2;server3.example.com:vm3" op monitor interval=1min #server2/3.example.com是節點名,vm2/3爲虛擬機名稱 commi #將修改同步到其餘節點
用show命令能夠看到fence的添加
添加vip
primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.9.100 cidr_netmask=32 op monitor interval=30s commi #將修改同步到其餘節點
用crm_mon命令能夠看到vip在server2主機上
添加apache服務
primitive httpd ocf:heartbeat:apache params configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s commi #將修改同步到其餘節點
用crm_mon命令能夠看到apache運行在server3主機上
注意爲了監控Apache的健康狀態,並在它掛掉的時候恢復Apache服務,server-status URL是可用的:
vim /etc/httpd/conf/httpd.conf <Location /server-status> SetHandler server-status Order deny,allow Allow from 127.0.0.1 </Location>
粘滯服務(使得服務與vip在同一主機上運行)
colocation httpd-with-ip inf: httpd vip #方法一 group apache vip httpd #方法二 commi #將修改同步到其餘節點
用crm_mon命令能夠看到vip和apache都運行在server2主機上
作完實驗咱們能夠用delete apache 和delete httpd刪除apache組和服務
用drdb同步存儲
primitive sqldata ocf:linbit:drbd params drbd_resource=westos op monitor interval=60s ms sqldataclone sqldata meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
用crm_mon命令能夠看到drdb已加入集羣:
掛載文件系統
primitive sqlfs ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/var/lib/mysql fstype=ext4 colocation sqlfs_on_drbd inf: sqlfs sqldataclone:Master order sqlfs-after-sqldata inf: sqldataclone:promote sqlfs:start
用crm_mon命令能夠看到文件系統已掛載
添加mysql服務
primitive mysql lsb:mysqld op monitor interval=60s group mygroup vip sqlfs mysql #將vip,文件系統,mysql進行粘滯