1、介紹node
高可用,你們可能會想到比較簡單的Keepalived,或者更早一點的 heartbeat,也可能會用到 Corosync+Pacemaker,那麼他們之間有什麼區別。python
Heartbeat到了v3版本後,拆分爲多個子項目:Heartbeat、cluster-glue、Resource Agent、Pacemaker。linux
Heartbeat:只負責維護集羣各節點的信息以及它們以前通訊。apache
Cluster-glue:當於一箇中間層,能夠將heartbeat和crm(pacemaker)聯繫起來,主要包含2個部分,LRM和STONITH;vim
Resource Agent :用來控制服務啓停,監控服務狀態的腳本集合,這些腳本將被LRM調用從而實現各類資源啓動、中止、監控等等。瀏覽器
pacemaker:原Heartbeat 拆分出來的資源管理器,用來管理整個HA的控制中心,客戶端經過pacemaker來配置管理監控整個集羣。它不能提供底層心跳信息傳遞的功能,它要想與對方節點通訊須要藉助底層(新拆分的heartbeat或corosync)的心跳傳遞服務,將信息通告給對方。安全
Pacemaker 配置文件比較不太容易修改,可使用命令行界面的crmsh、pcs和圖形化界面pygui、hawk等進行管理,看我的喜愛。ssh
Heartbeat 和 Corosync 的區別:ide
一、通過安裝heartbeat 體驗,Heartbeat 配置比較簡單,主要修改三個文件便可: ha.cf、 haresources、 authkeys ,可是在支持多節點的時候不知道我的配置問題,仍是其餘,腦裂嚴重(查看不少博客說只支持2個節點),而且自帶的服務腳本較少,不少服務監控腳本須要本身編寫。測試
二、Heartbeat只能爲全部的資源配置一個主服務,而corosync則容許爲不一樣的資源組配置不一樣的主服務 ,corosync支持多個節點的集羣,支持把資源進行分組,按照組進行資源的管理,設置主服務,自行進行啓停 。
三、管理資源的靈活性:在corosync中,其會自行處理配置文件的同步問題,heartbeat則無此功能
2、環境
一、系統:CentOS Linux release 7.4.1708 (Core) 三臺
二、hosts (三個節點修改):
10.6.32.20 ceph1
10.6.32.21 ceph2
10.6.32.22 ceph3
三、時間同步 chrony
四、關閉防火牆 firewalld 和 Selinux。
五、配置節點ssh信任(controller1 節點操做)。
# ssh-keygen (生成默認證書便可)
# ssh-copy-id 127.0.0.1
# 將 .ssh 文件拷貝覆蓋到其餘節點。
# scp -r .ssh/ root@ceph2:/root/
# scp -r .ssh/ root@ceph3:/root/
3、配置安裝
一、安裝(all-node)
# yum install -y pacemaker pcs psmisc policycoreutils-python
二、查看服務是否已安裝
# rpm -qa | grep corosync
# rpm -qa | grep pacemaker
# rpm -qa | grep pcs
# rpm -qa | grep psmisc
# rpm -qa | grep policycoreutils-python
安裝完成以後,會生成一個用戶:hacluster ,供集羣使用。
三、啓動 pcs 服務,並設置開機自啓動(all-node)
# systemctl start pcsd.service
# systemctl enable pcsd.service
建立了一個軟鏈接。
四、設置 hacluster密碼
安裝組件生成的hacluster用戶,用來本地啓動pcs進程,所以咱們須要設定密碼,每一個節點的密碼相同。
五、驗證集羣節點(其中一個節點測試)
# pcs cluster auth ceph1 ceph2 ceph3
六、生成corosync 配置文件 (其中一個節點操做)
# pcs cluster setup --name openstack_cluster ceph{1,2,3}
創建集羣:openstack_cluster,生成corosync文件 /etc/corosync/corosync.conf
七、啓動集羣並設置開機自啓動 (其中一個節點操做)
# pcs cluster start --all (# all 參數標識全部節點生效,不加all 本地生效,也能夠指定某節點:pcs cluster start ceph2)
# pcs cluster enable --all
八、查看集羣
一、查看 集羣狀態
# pcs status
Online: ceph1 ceph2 ceph3 存活, 0 resources configured:尚未配置資源 ,有一個 WARNING 報錯。
二、查看corosync
# corosync-cfgtool -s
# corosync-cmapctl | grep members #查當作員信息
# pcs status corosync #查看狀態
三、查看 pacemaker
# ps axf |grep pacemaker
九、檢查配置文件
# crm_verify -L -V
爲保證集羣數據安全,pacemaker默認啓動STONITH 。因沒有配置,先禁用
# pcs property set stonith-enabled=false # 禁用 STONITH
# crm_verify -L -V
十、添加虛擬IP(VIP)
# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=10.6.32.254 cidr_netmask=32 op monitor interval=30s
添加成功,目前虛擬IP在 ceph1 節點上,經過 ip add list 可查看。(虛擬ip:10.6.32.254 資源名稱:VIP,檢測時間:30s/次)
# ip add list
十一、httpd 高可用
一、開啓 apache status url 監控頁
# vim /etc/httpd/conf.d/status.conf
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from all </Location>
二、關閉 httpd 服務,添加httpd 資源時會從新啓動http服務,若是不關閉,會報錯。
# systemctl stop httpd
三、添加 httpd 資源 到集羣。
# pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=30s
建立了一個httpd 的集羣資源 WebSite,主節點在 ceph2 上。檢測頁:http://localhost/server-status, 檢測時間:30s/次。 可是有一個新的問題,虛擬IP在ceph1 上, httpd資源在 ceph2 上,會致使客戶端沒法訪問。若是VIP在任何節點都不存在,那麼WebSite也不能運行。
四、設置 資源檢測超時時間
# pcs resource op defaults timeout=120s
# pcs resource op defaults
五、綁定服務資源和 VIP 資源,始終保持在一個節點上
# pcs constraint colocation add WebSite with VIP INFINITY
十二、瀏覽器訪問測試
成功!!!!
OK,博客到此處,已經搞定需求。
5、後期維護+知識擴展
一、上節提到建立 服務資源, ocf:heartbeat:apache 這是是用來告訴pacemaker,第一個部分ocf,指明瞭這個資源採用的標準(類型)以及在哪能找到它。第二個部分標明這個資源腳本的在ocf中的名字空間,在這個例子中是heartbeat。最後一個部分指明瞭資源腳本的名稱。
二、查看 pacemaker 默認支持的資源
一、查看資源採用的標準類型
# pcs resource standards
二、查看可用的ocf資源提供者
# pcs resource providers
三、查看特定標準下所支持的腳本,例:ofc:heartbeat 下的腳本
# pcs resource agents ocf:heartbeat
三、手動切換某節點到 standby 狀態及取消standby 狀態
# pcs cluster standby ceph1
# pcs cluster unstandby ceph1
四、防止資源在節點恢復後當即遷移
# pacemaker默認全部節點的stickiness都爲0
# pcs resource defaults resource-stickiness=100
# pcs resource defaults #查看
五、重啓資源
# pcs resource restart resource_name
六、查看幫助
# pcs resource --help
七、清理集羣錯誤日誌
# pcs resource cleanup
八、在集羣節點小於2個,沒法仲裁時,忽略仲裁,保證業務提供(集羣全部節點均正常時配置)
# pcs property set no-quorum-policy=ignore