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


一、介紹

  高可用,大家可能會想到比較簡單的Keepalived,或者更早一點的 heartbeat,也可能會用到 Corosync+Pacemaker,那么他們之間有什么區別。

  Heartbeat到了v3版本后,拆分為多個子項目:Heartbeat、cluster-glue、Resource Agent、Pacemaker。

    Heartbeat:只負責維護集群各節點的信息以及它們之前通信。

    Cluster-glue:當於一個中間層,可以將heartbeat和crm(pacemaker)聯系起來,主要包含2個部分,LRM和STONITH;

      Resource Agent :用來控制服務啟停,監控服務狀態的腳本集合,這些腳本將被LRM調用從而實現各種資源啟動、停止、監控等等。

    pacemaker:原Heartbeat 拆分出來的資源管理器,用來管理整個HA的控制中心,客戶端通過pacemaker來配置管理監控整個集群。它不能提供底層心跳信息傳遞的功能,它要想與對方節點通信需要借助底層(新拆分的heartbeat或corosync)的心跳傳遞服務,將信息通告給對方。

 

  Pacemaker 配置文件比較不太容易修改,可以使用命令行界面的crmsh、pcs和圖形化界面pygui、hawk等進行管理,看個人喜好。

  Heartbeat 和 Corosync 的區別:

    1、經過安裝heartbeat 體驗,Heartbeat 配置比較簡單,主要修改三個文件即可:  ha.cf、  haresources、  authkeys ,但是在支持多節點的時候不知道個人配置問題,還是其他,腦裂嚴重(查看很多博客說只支持2個節點),並且自帶的服務腳本較少,很多服務監控腳本需要自己編寫。

    2、Heartbeat只能為所有的資源配置一個主服務,而corosync則允許為不同的資源組配置不同的主服務 ,corosync支持多個節點的集群,支持把資源進行分組,按照組進行資源的管理,設置主服務,自行進行啟停 。

    3、管理資源的靈活性:在corosync中,其會自行處理配置文件的同步問題,heartbeat則無此功能 

二、環境

  1、系統:CentOS Linux release 7.4.1708 (Core)  三台

  2、hosts (三個節點修改):

    10.6.32.20  ceph1

    10.6.32.21  ceph2

    10.6.32.22  ceph3

  3、時間同步 chrony

  4、關閉防火牆 firewalld 和 Selinux。

  5、配置節點ssh信任(controller1 節點操作)。

      # ssh-keygen   (生成默認證書即可)

      # ssh-copy-id 127.0.0.1

      # 將 .ssh 文件拷貝覆蓋到其他節點。

      # scp -r .ssh/ root@ceph2:/root/

      # scp -r .ssh/ root@ceph3:/root/

三、配置安裝

  1、安裝(all-node

    # yum install -y pacemaker pcs psmisc policycoreutils-python

   2、查看服務是否已安裝

    # rpm -qa | grep corosync

    # rpm -qa | grep pacemaker

    # rpm -qa | grep pcs

    # rpm -qa | grep psmisc

    # rpm -qa | grep policycoreutils-python

    

    安裝完成之后,會生成一個用戶:hacluster ,供集群使用。

    

  3、啟動 pcs 服務,並設置開機自啟動(all-node

     # systemctl start pcsd.service

     # systemctl enable pcsd.service

     

    創建了一個軟連接。

  4、設置 hacluster密碼 

    安裝組件生成的hacluster用戶,用來本地啟動pcs進程,因此我們需要設定密碼,每個節點的密碼相同。

     

  5、驗證集群節點(其中一個節點測試)

    # pcs cluster auth ceph1 ceph2 ceph3

     

  6、生成corosync 配置文件 (其中一個節點操作

    # pcs cluster setup --name openstack_cluster ceph{1,2,3}

    

    建立集群:openstack_cluster,生成corosync文件 /etc/corosync/corosync.conf

   7、啟動集群並設置開機自啟動 (其中一個節點操作

    # pcs cluster start --all    (# all 參數標識所有節點生效,不加all 本地生效,也可以指定某節點:pcs cluster start ceph2

    # pcs cluster enable --all

     

  8、查看集群

    1、查看 集群狀態

      # pcs status

         

        Online: ceph1 ceph2 ceph3  存活, 0 resources configured:還沒有配置資源 ,有一個 WARNING 報錯。

     2、查看corosync 

      # corosync-cfgtool -s

         

      # corosync-cmapctl | grep members      #查看成員信息

         

      # pcs status corosync      #查看狀態

         

    3、查看 pacemaker 

      # ps axf |grep pacemaker

         

  9、檢查配置文件

    # crm_verify -L -V

      

      為保證集群數據安全,pacemaker默認啟動STONITH 。因沒有配置,先禁用

    # pcs property set stonith-enabled=false        # 禁用 STONITH

    #  crm_verify -L -V    

       

  10、添加虛擬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

       

  11、httpd 高可用

    1、開啟 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>

 

     2、關閉 httpd 服務,添加httpd 資源時會重新啟動http服務,如果不關閉,會報錯。

      # systemctl stop httpd

    3、添加 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也不能運行。

     4、設置 資源檢測超時時間

      # pcs resource op defaults timeout=120s

      # pcs resource op defaults

       

    5、綁定服務資源和 VIP 資源,始終保持在一個節點上

      # pcs constraint colocation add WebSite with VIP INFINITY

      

  12、瀏覽器訪問測試

    

    成功!!!!

  OK,博客到此處,已經搞定需求。

五、后期維護+知識擴展    

  1、上節提到創建 服務資源, ocf:heartbeat:apache  這是是用來告訴pacemaker,第一個部分ocf,指明了這個資源采用的標准(類型)以及在哪能找到它。第二個部分標明這個資源腳本的在ocf中的名字空間,在這個例子中是heartbeat。最后一個部分指明了資源腳本的名稱。

  2、查看 pacemaker 默認支持的資源

    1、查看資源采用的標准類型

      # pcs resource standards

      

    2、查看可用的ocf資源提供者

      # pcs resource providers

       

    3、查看特定標准下所支持的腳本,例:ofc:heartbeat 下的腳本

      # pcs resource agents ocf:heartbeat

       

 

  3、手動切換某節點到 standby 狀態及取消standby 狀態

    # pcs cluster standby ceph1

    

    # pcs cluster unstandby ceph1

  4、防止資源在節點恢復后立即遷移

    # pacemaker默認所有節點的stickiness都為0

    # pcs resource defaults resource-stickiness=100

    # pcs resource defaults   #查看

     

  5、重啟資源

    #  pcs resource restart resource_name

   6、查看幫助

    # pcs resource --help

   7、清理集群錯誤日志

    # pcs resource cleanup

  8、在集群節點小於2個,無法仲裁時,忽略仲裁,保證業務提供(集群所有節點均正常時配置)

    # pcs property set no-quorum-policy=ignore


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM