Was this page helpful?

Elastix HA Cluster - DRBD

    簡介

    此篇將介紹如何建立一個具備 HA(High Availability) 環境的 Elastix 系統架構。
    解決方案使用 DRBD + Heartbeat 兩套軟體完成。

    特點:

    • 避免因單個主機的硬體故障影響系統運作。
    • 系統轉移(take over)時間僅需要幾秒鐘。
    • 兩台主機的資料藉由 DRBD 機制作即時性同步,不會發生資料不一致的問題。

     

    DRBD 是一個 Distributed Replicated Block Device 的縮寫,簡單的說,這是一個遠端資料備份的機制,不同rsync,這是透過網路 Realtime 的 mirror Local 端與遠端的 Device。
    官網位址:http://www.drbd.org/

    Heartbeat 是 Linux 實現 HA Cluster 常用的軟體工具,這提供了基本所需要的功能,例如資源的監控、啟動/停止服務、系統轉移等等。

    更新:

    2017/2/28
    另一個類似 DRBD 的解決方案 GlusterFS,參考教學 How to install GlusterFS with a replicated high availability storage volume on Ubuntu Linux 16.04 LTS (注意:這與 RedHat 的 GFS 是不同的套件)

    安裝前準備

    準備兩台已經安裝好的 Elastix server,其環境設定分別為:

    primary server)

    hostname = node1.example.com
    eth0 = 10.10.10.111 (LAN - persistent IP)
    eth0:0 = 10.10.10.113 (LAN - floating/service IP)
    eth1 = 172.16.1.1 (Heartbeat/DRBD)

    secondary server)

    hostname = node2.example.com
    eth0 = 10.10.10.112 (LAN - persistent IP)
    eth0:0 = 10.10.10.113 (LAN - floating/service IP)
    eth1 = 172.16.1.2 (Heartbeat/DRBD)

     Tips:

    eth0:0 這裡所設置的是 Elastix 的服務  IP 位址,不用手動設定,而是交由 heartbeat 來控制。

     

    elastix_HA.png

    // node1 與 node2 的 /etc/hosts

    10.10.10.111          node1.example.com  node1
    10.10.10.112          node2.example.com  node2
    172.16.1.1              ha1
    172.16.1.2              ha2
    

    設定開始

    //新增共用磁區

    node1 & node2)

    兩主機各新增一個 partition 作為共用儲存空間,這是用來存放 asterisk 主程式及所有相關的資料,容量可依實際運用自行估算。

    • fdisk /dev/sdb
    • mkfs.ext3 /dev/sdb1
    • dd if=/dev/zero of=/dev/sdb1 bs=1M count=1;sync (required)

    Tips:

    * 兩主機所新增的 partition 大小必須是一樣。
    * 如果有啟用通話錄音,要注意估算這裡所需要的空間。

    //安裝套件

    node1 & node2)

    yum install drbd83 kmod-drbd82 OpenIPMI-libs heartbeat-pils openhpi heartbeat heartbeat-stonith

    Tips:

    請不要安裝 drbd-8.0.x,筆者安裝後,覺得有許多怪怪問題。

    // 編輯 /etc/drbd.conf

    node1 & node2)

    global {
      usage-count yes;
    }
    
    resource ippbx {
      protocol C;
      disk { on-io-error pass_on; }
      startup { wfc-timeout 5; degr-wfc-timeout 3; }
      syncer { rate 100M; }
      on node1 {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 172.16.1.1:7789;
        meta-disk internal;
      }
      on node2 {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 172.16.1.2:7789;
        meta-disk internal;
      }
    }
    

    Tips:

    * usage-count 這是用來回報官方的用戶統計,可為 yes|no|ask,預設是 ask 每次啟動 DRBD 都會有一堆文字要確認。
    * node1, node2 必須是電腦名稱,且有區分大小寫。檢查電腦名稱可以執行 uname -n。

    #drbdadm create-md r0
    #service drbd start
    #service drbd status

    [root@node1 ~]# service drbd status
    drbd driver loaded OK; device status:
    version: 8.2.6 (api:88/proto:86-88)
    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
    m:res  cs         st                   ds                         p  mounted  fstype
    0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  A
    
    

    一開始,兩個主機會是 secondary/secondary 狀態,請在 node1 下執行以下指令,可將 node1 切換為 primary 狀態

    // 切換 node1 狀態為 primary

    node1 only)

    #drbdadm -- --overwrite-data-of-peer primary ippbx

    Tips:

    drbdadm 接著兩個 dash 不能忽略喔!

    [root@node1 ~]# cat /proc/drbd
    version: 8.2.6 (api:88/proto:86-88)
    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
     0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
        ns:1250452 nr:0 dw:0 dr:1258624 al:0 bm:76 lo:1 pe:9 ua:256 ap:0 oos:1890368
            [======>.............] sync'ed: 39.9% (1890368/3140544)K
            finish: 0:00:22 speed: 82,960 (56,824) K/sec
    
    

    兩主機進行磁區同步。
    同步完成後,如下訊息

    [root@node1 ~]# service drbd status
    DRBD module version: 8.2.6
       userland version: 8.3.2
    preferably kernel and userland versions should match.
    drbd driver loaded OK; device status:
    version: 8.2.6 (api:88/proto:86-88)
    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
    m:res    cs         ro                 ds                 p  mounted  fstype
    0:ippbx  Connected  Primary/Secondary  UpToDate/UpToDate  C
    
    

    //複製 asterisk 所有目錄至同步區

    node1 only)

    #mkfs.ext3 /dev/drbd0
    #mkdir /replica
    #mount /dev/drbd0 /replica

    將以下目錄資料複製到 /replica

    • /etc/asterisk
    • /var/lib/asterisk
    • /usr/lib/asterisk
    • /var/spool/asterisk
    • /var/lib/mysql
    • /var/log/asterisk
    • /var/www

     

    //停止 asterisk, MySQL 服務
    #amportal stop
    #service mysqld stop

    //指令複製,移除,連結
    #cd /replica
    #tar -czf etc-asterisk.tgz /etc/asterisk
    #tar -czf var-lib-asterisk.tgz /var/lib/asterisk
    #tar -czf usr-lib-asterisk.tgz /usr/lib/asterisk
    #tar -czf var-www.tgz /var/www
    #tar -czf var-spool-asterisk.tgz /var/spool/asterisk
    #tar -czf var-lib-mysql.tgz /var/lib/mysql
    #tar -czf var-log-asterisk.tgz /var/log/asterisk
    #tar -xpzf etc-asterisk.tgz
    #tar -xpzf var-lib-asterisk.tgz
    #tar -xpzf usr-lib-asterisk.tgz
    #tar -xpzf var-www.tgz
    #tar -xpzf var-spool-asterisk.tgz
    #tar -xpzf var-lib-mysql.tgz
    #tar -xpzf var-log-asterisk.tgz

    #rm -f *.tgz
    #rm -rf /etc/asterisk /var/lib/asterisk /usr/lib/asterisk /var/www /var/spool/asterisk /var/lib/mysql /var/log/asterisk
    #ln -s /replica/etc/asterisk /etc/asterisk
    #ln -s /replica/var/lib/asterisk /var/lib/asterisk
    #ln -s /replica/usr/lib/asterisk /usr/lib/asterisk
    #ln -s /replica/var/www /var/www
    #ln -s /replica/var/spool/asterisk /var/spool/asterisk
    #ln -s /replica/var/lib/mysql /var/lib/mysql
    #ln -s /replica/var/log/asterisk /var/log/asterisk

    //啟動 MySQL,asterisk 服務
    #service mysqld start
    #amportal start

    Heartbeat 設定

    //關閉自動啟動服務

    node1 & node2)

    #chkconfig mysqld off
    #chkconfig asterisk off
    #chkconfig httpd off
    #vi /etc/rc.local

    /usr/local/sbin/motd.sh > /etc/motd
    /usr/sbin/fxotune -s
    #/usr/sbin/amportal start_fop
    

    //編輯 /etc/ha.d/ha.cf

    debugfile /var/log/ha-debug
    logfile /var/log/ha-log
    logfacility local0
    keepalive 2
    deadtime 20
    warntime 10
    initdead 40
    udpport 694
    bcast eth1
    auto_failback off
    node node1
    node node2
    

    Tips:

    這裡沒有設置 <ucast eth0 另一台 node 的 IP>,是因為不希望網路發生 IP 衝突等異常就將系統 take over 轉移,筆者認為這行為模式是不 make sense。

    //編輯 /etc/ha.d/haresources

    node1 IPaddr::10.10.10.113/24/eth0 drbddisk::ippbx Filesystem::/dev/drbd0::/replica::ext3 asterisk mysqld httpd
    

    Tips:

    * node1 必須是電腦名稱,且有區分大小寫。檢查電腦名稱可以執行 uname -n。

    //編輯 /etc/ha.d/authkeys

    auth 1
    1 sha1 B!gb@dUndUglIp@$$werd
    

    #chmod 600 /etc/ha.d/authkeys

    //停止 DRBD & Heartbeat 服務

    node1 & node2)

    #service heartbeat stop
    #service drbd stop

    //啟動 DRBD & Heartbeat 服務

    node1 only)

    #service drbd start
    #service heartbeat start

    Tips:

    heartbeat 啟動後需等待約數十秒鐘,才會使 DRBD 呈現 Primary/Secondary,以及啟動 asterisk/mysql/httpd 服務。

    node2 only)

    #service drbd start
    #service heartbeat start)

    Tips:

    要手動使系統從 node1 切換到 node2,只要關閉 node1 的 heartbeat 服務,但再次啟動服務時,系統並不會從 node2 自動切換回來,除非 node2 發生異常或關閉 node2 的 heartbeat 服務。

    //

    心得分享

    - 如何即時顯示 DRBD 狀態

    #watch -n 1 cat /proc/drbd

    - 當 node 重啟後,DRBD 磁區損毀

    如果檢視 DRBD 狀態時,始終出現

    GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
     0: cs:StandAlone st:Secondary/Unknown ds:UpToDate/DUnknown   r---
    且在 /var/log/messages,出現
    Split-Brain detected, dropping connection!

    A: 在 StandAlone 端,執行
    #drbdadm secondary <resource name>
    #drbdadm -- --discard-my-data connect <resourcce name>

    在其他 node 執行
    #drbdadm connect <resource name>

    - 為何 FOP 無法正常運作?

    A: 這是因為 FOP 的服務並未被 heartbeat 所啟動,要解決這,必須將 FOP 服務的啟動/停止,改寫成一個 service,然後在設置 heartbeat 啟動/關閉這個 FOP。

    - 如何檢查目前 node 的 DRBD 狀態是 primary 或 secondary ?

    A: 執行 #drbdadm role <resource name>,出現的第一個狀態就是目前 node 的

    [root@node1 ~]# drbdadm role ippbx
    DRBD module version: 8.2.6
       userland version: 8.3.2
    preferably kernel and userland versions should match.
    Secondary/Primary
    
    Was this page helpful?
    標籤 (Edit tags)
    • No tags

    文件 2

    文件大小日期附件上傳者 
     Elastix_2.3_HA_Cluster.pdf
    Elastix 2.3 HA Cluster
    620.79 KB16:54, 15 Aug 2014alang動作
     elastix_HA.png
    Network Diagram
    69.94 KB13:35, 10 Apr 2010alang動作
    查看第4個(總4個)評論: 查看所有
    博主,你好!我想知道你这里的eth0:0是怎么定义的? 你所说交由heartbeat来控制是什么意思呢? 这个eth0:0是因为安装了heartbeat之后,系统自动生成的还是你自己手动添加的eth0的一个别名呢?谢谢!
    發佈時間 17:44, 18 Mar 2013 ()
    因为我目前部署elastix到我的server里面,发现primary 和 backup 伺服器之间无法跳转。还没查明原因。希望你可以帮助我。谢谢!
    發佈時間 17:45, 18 Mar 2013 ()
    你好,請將問題發至郵件論壇 asterisk-tw@googlegroups.com
    發佈時間 14:59, 19 Mar 2013 ()
    好的,谢谢!
    發佈時間 10:01, 26 Mar 2013 ()
    查看第4個(總4個)評論: 查看所有
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core