HA

HAProxy Configuration(.cfg設定)

HAProxy的設定主要可以分為三個部分:

  1. command-line最為優先
  2. cfg檔的global section做全域設定
  3. cfg檔的proxy section做其他設定(“defaults", “listen", “frontend", “backend")

HAProxy會試著透過frontend端的socket監聽client的request,經過Http Header的驗證或修改後,再轉送到backend端來執行。

$ cat /etc/haproxy/haproxy.cfg
global #global section
# 1.Process Management And Security
    chroot [jail dir] #執行chroot(),把process搬到jail dir運行,提高安全性
    daemon #執行fork,在背後運行一個相同的process
    gid [number] #把group ID設成數字
    group [group name] #把group ID設成名字
    log [address] [facility] [max level] #syslog server設定位址、實施應用類型,以及log必須具備等級 
    log-send-hostname [name] #在syslog表頭設定hostname
    log-tag [string] #在syslog表頭設定tag,預設tag為program name
    pidfile [pidfile] #把所有daemons的pid紀錄到這個pidfile
    stats socket #在path創建一個UNIX Socket 
    stats timeout [timeout, in milliseconds] #stats socket的timeout預設10秒 
    stats maxconn [conn] #stats socket的連接數量預設10 
    uid [number] #把user ID設成數字 
    user [user name] #把user ID設成名字 
    node [name] #設定node name 
    description [text] #設定一段文字來描述這個實體 
# 2.Performance Tuning 
    maxconn [number] #設定每個process最大可連接數量 
    maxpipes [number] #設定每個process最大pipes數量 
    noepoll #no epoll,禁用epoll(註:epoll可支援打開大量socket) 
    nopoll #no poll,禁用poll 
    spread-checks <0..50, in percent> #避免同時送出health check到server,增加隨機性 
    tune.XXXXX #其他tune相關設定 
# 3.Userlists 
userlist [list name] 
group [groupname] [users [user],[user],(...)]
user [username] [password|insecure-password [password]] [groups [group],[group],(...)] 
#例如: 
#userlist L1 
#    group G1 users tiger,scott 
#    group G2 users xdb,scott 
#    user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91 
#    user scott insecure-password elgato 
#    user xdb insecure-password hello

文章參考資料

  1. HAProxy Configuration Manual
  2. HAProxy 實現 load balance 負載平衡
  3. HAProxy – Maxkit
HA

Corosync / Pacemaker Tool command操作

Corosync

用於HA的環境中,提供通訊服務,在各個node間傳送heartbeat的訊息。

透過/ete/corosync/corosync.conf可以定義corosync的配置,其中totem標籤內定義的是node之間的通訊協議。


Pacemaker

用於HA的環境中,負責資源的管理,若需通訊時,則透過底層的corosync來達成。

主要元件

pcmk-internals

pacemaker 扮演資源管理的大腦角色,內部自然就有多個元件緊密的運作著,而主要的元件共有五個:

  1. Cluster Information Base (CIB): 儲存 cluster 中所有 resource 資訊,訊會同步到所有 pacemaker 的 CIB 上,確保每一個 pacemaker 服務都有 cluster 完整的 resource 資訊。
  2. Cluster Resource Management daemon (CRMd): CRMd 會接收來自 PEngine 的資訊,傳遞控制訊息至 LRMd 來進行 resource 的調配。
  3. Local Resource Management daemon (LRMd): LRMd進行resource的調配。
  4. Policy Engine (PEngine or PE): 運用CIB 資訊,在依照制定好的 policy 為前提下,作為將 cluster 最佳化的依據。
  5. Fencing daemon (STONITHd): CRMd 可能會下命令給 STONITHd,將遠端的某個 resource 關閉,甚至把機器關機(進行隔離)。

Cluster Resource Management: crm

#crm指令格式
$ crm [-D display_type] [-f file] [-c cib] [-H hist_src] [-hFRDw] [--version] [args]
#讀並且執行file上的指令
$ crm -f file
#與cib進行session
$ crm -c cib
#不加參數,直接進行互動模式
$ crm
#秀出目前配置
$ crm configure show
#以XML秀出目前配置
$ crm configure show xml
#把Resource設在同一個群組
$ crm configure group G_name R1 R2 R3
#定義Resource啟動順序(級別可分為:mandatory強制/Optional選擇/Serialize序列化)
$ crm configure order O_name mandatory: R1 R2 R3
#cluster中的節點訊息
$ crm status
#列出Resource Agent(ra)支援的provider類別
$ crm ra classes
#列出Resource Agent(ra)中某個類別(ex:ocf)的所有provider清單
$ crm ra list ocf
#查詢provider的資訊及使用方式
$ crm ra info ocf:heartbeat:IPaddr2

詳細內容可以連至參考資料3.

Start/Stop Pacemaker: pacemakerd

#版本及feature資訊
$ pacemakerd --feature

Summary of cluster’s current state: crm_mon

#resource failcounts
$ crm_mon -f

check the validity of the configuration: crm_verify

#秀出目前配置有問題的地方
$ crm_verify -L

文章參考資料

  1. [HA] 建置 Two Nodes HA Cluster by corosync & pacemake @ Ubuntu 14.04 淺談 Pacemaker 架構
  2. Pacemaker – Chapter 4. Pacemaker Tools
  3. corosync+pacemaker的crmsh常用指令介绍
  4. Pacemaker中的资源管理工具–CRM基本指令及用法