Centos 7 下 Corosync + Pacemaker + psc 實現 httpd 服務高可用

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

相關文章
相關標籤/搜索