Openfiler2.99 Active/Passive Cluster with pacemaker and drbd 設定

說明

離上次架設 Openfiler2.3 storage Active/Passive Cluster with heartbeat and drbd 已有一年的時間。這次則是使用新版 openfiler2.99 架設 Storage Cluster ,並使用 pacemaker 、corosync 來達成叢集資源管理,提升管理的便利性與一致性。

當然叢集至少需要有兩台電腦來架設 Active/Passive Cluster ,如果真的沒有可用的實體主機來架設,也可以用虛擬主機(KVM、VirtualBox、VmWare …)來做測試,我就是用虛擬主機來做測試的。

取得安裝檔

下載取得最新版的 Openfiler 安裝光碟印象檔 :Download

線上教學 HowTo
Openfiler 2.99 Active/Passive With Corosync, Pacemaker And DRBD

安裝 openfiler 的步驟就略過不在多作解說,僅需按照安裝指示安裝即可。

參考文章及站台

CRM CLI (command line interface) tool
DRBD HowTo 1.0
The DRBD User’s Guide
http://www.clusterlabs.org/wiki/Main_Page


以下則開始此次的設定步驟


叢集兩台主機節點分別:

  • pcmk-1:192.168.122.238
  • pcmk-2:192.168.122.239

1. 設定主機名稱、IP位址及/etc/hosts :

設定新的主機名稱

on pcmk-1

vim /etc/sysconfig/network #將 HOSTNAME 更改為 pcmk-1

NETWORKING=yes
HOSTNAME=pcmk-1

on pcmk-2

vim /etc/sysconfig/network #將 HOSTNAME 更改為 pcmk-2

NETWORKING=yes
HOSTNAME=pcmk-2

設定IP位址

vim /etc/sysconfig/network-scripts/ifcfg-eth0

on pcmk-1

# Device file installed by rBuilder
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.122.238
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
ONBOOT=yes
TYPE=Ethernet

on pcmk-2

# Device file installed by rBuilder
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.122.239
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
ONBOOT=yes
TYPE=Ethernet

HOSTS 主機名稱與IP對應

vim /etc/hosts
#注意 127.0.0.1 位址後的名稱多加一條修改後的主機名稱,為了避免開機時一直卡在啟動 sendmail 時搜尋主機,造成等待時間過久的問題。

on pcmk-1

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       pcmk-1  localhost.localdomain localhost localhost
::1             localhost6.localdomain6 localhost6
192.168.122.238 pcmk-1
192.168.122.239 pcmk-2

on pcmk-2

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       pcmk-2  localhost.localdomain localhost localhost
::1             localhost6.localdomain6 localhost6
192.168.122.238 pcmk-1
192.168.122.239 pcmk-2

進行下一個步驟時,請先將兩台主機都重新開機。

2. 建立及交換 ssh-keys 簡化兩台主機的檔案交換不需輸入密碼 :

建立認證金鑰

on pcmk-1

[root@pcmk-1 ~]#ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:

on pcmk-2

[root@pcmk-2 ~]#ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:

交換金鑰

on pcmk-1

scp ~/.ssh/id_dsa.pub root@pcmk-2:~/.ssh/authorized_keys

on pcmk-2

scp ~/.ssh/id_dsa.pub root@pcmk-1:~/.ssh/authorized_keys

3. 建立 DRBD 提供可供叢集架構的存儲區塊裝置 :
在這之前兩邊主機都需要有另外的一顆硬碟或是磁碟陣列,作為DRBD的同步資源。一般來說,如果要設定上線提供服務的主機通常都會指定磁碟陣列作為資源,若只是用於測試使用單顆硬碟即可。

編輯 drbd.conf 設定檔

on pcmk-1

vim /etc/drbd.d/global_common.conf

#修改同步資料速率,當做第一次DRBD資料同步時,可以加大 rate 設定值(M==MB)來縮短同步等待時間。
#DRBD 官方建議設定為資料傳輸最大值的1/3做為設字值。(記得改回建議值喔)
        syncer {
                 rate 40M;
        }

vim /etc/drbd.d/data.res
#設定同步的資源,資源名稱、在哪台主機上、裝置名稱、底層碟層、同步端回、meta-disk型式....
resource data {
 on pcmk-1 {
  device /dev/drbd0;
  disk /dev/sdb;
  address 192.168.122.238:7788;
  meta-disk internal;
 }
 on pcmk-2 {
  device /dev/drbd0;
  disk /dev/sdb;
  address 192.168.122.239:7788;
  meta-disk internal;
 }
}

由 pcmk-1 複製 DRBD 設定到 pcmk-2

scp -r /etc/drbd.d/* pcmk-2:/etc/drbd.d/

建立 DRBD meta-data

on pcmk-1 & pcmk-2

drbdadm create-md data

如果上面命令有錯誤出現,可以執行下列指令,之後在重新建立 DRBD meta-data

dd if=/dev/zero of=/dev/sdb
#不用執行很久,就可以用 Ctrl+C 中斷它。

啟重DRBD服務

on pcmk-1 & pcmk-2

service drbd start

設定 pcmk-1 為 primary node 並連線

on pcmk-1

drbdadm -- --overwrite-data-of-peer primary all
drbdadm connect all

連線 pcmk-2 drbd ,開始資料同步

on pcmk-2

drbdadm connect all

接著是漫長的同步時間,就看你的裝置有多大就要等多久。

4. 建立 LVM 資料儲存區塊,提供各個協定例如: smb、nfs、iscsi ..等, 所需的硬碟區塊 :

設定 lvm.conf 的 filter 條件,僅能抓取 drbd 裝置,做為底層裝置的來源。若不指定,會造成 lvm 直接抓取 /dev/sdb 來做為 lvm 的底層來源,因而產生無法預期的錯誤。

on pcmk-1

編輯 lvm.conf

vim /etc/lvm/lvm.conf
#修改如下
filter = [ "a|drbd[0-9]|", "r|.*|" ]

由 pcmk-1 複製 lvm.conf 到 pcmk-2

scp /etc/lvm/lvm.conf pcmk-2:/etc/lvm/

開始建立 LVM , 由建立 PV -> VG -> LV 一路設置下來。

pvcreate /dev/drbd0
vgcreate vg00 /dev/drbd0
lvcreate -n lv00 -L 4G vg00

5. 設定 Corosync :

建立 Corosync 認證金錀

on pcmk-1

corosync-keygen

複製 Corosync 金鑰到 pcmk-2 並 確認 「authkey」檔案屬性為 「-400」

scp /etc/corosync/authkey root@pcmk-2:/etc/corosync/authkey

讓 corosync 載入 pacemaker 叢集資源管理服務

vim /etc/corosync/service.d/pcmk
#加入下面這個設定載入 pacemaker
service {
        # Load the Pacemaker Cluster Resource Manager
        name: pacemaker
        ver:  0
 }

將 /etc/corosync/service.d/pcmk 複製到 pcmk-2

scp /etc/corosync/service.d/pcmk pcmk-2:/etc/crorsync/service.d/

設定 corosync.conf ,並更改 bindnetaddr 的值符合目前主機所在的網段(192.168.122.0)

# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
        version: 2
        secauth: off
        threads: 0
        interface {
                ringnumber: 0
                bindnetaddr: 192.168.122.0
                mcastaddr: 226.94.1.1
                mcastport: 5405
                ttl: 1
        }
}
logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        to_syslog: yes
        logfile: /var/log/cluster/corosync.log
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
        }
}
amf {
        mode: disabled
		}

複製 corosync.conf 到 pcmk-2

scp /etc/corosync/corosync.conf pcmk-2:/etc/corosync/

6. 為第一次啟動 corosync 做準備 :

設定哪些服務開機時不要啟動,待開機後交由 corosync/pacemaker 管理。

on pcmk-1 & pcmk-2

chkconfig nfs off
chkconfig nfslock off
chkconfig smb off
chkconfig open-iscsi off
chkconfig iscsi-target off
chkconfig openfiler off
chkconfig drbd off
chkconfig corosync on

將 pcmk-1、pcmk-2 都重新開機

sync;reboot

確認 corosync 是否有正確啟動

on pcmk-1

ps auxf
#應該可以找到下面這些程序
root       790  0.1  0.9 534464  4856 ?        Ssl  08:27   0:35 corosync
root       796  0.0  0.5  66084  2712 ?        S    08:27   0:01  \_ /usr/lib64/heartbeat/stonithd
106        797  0.0  1.2  68532  6288 ?        S    08:27   0:05  \_ /usr/lib64/heartbeat/cib
root       798  0.0  0.4  71088  2468 ?        S    08:27   0:01  \_ /usr/lib64/heartbeat/lrmd
106        799  0.0  0.6  66448  3072 ?        S    08:27   0:00  \_ /usr/lib64/heartbeat/attrd
106        800  0.0  0.5  68940  2636 ?        S    08:27   0:00  \_ /usr/lib64/heartbeat/pengine
106        801  0.0  0.7  77896  3868 ?        S    08:27   0:01  \_ /usr/lib64/heartbeat/crmd

顯示 CRM 叢集資源管理的監控狀態

crm_mon --one-shot -V
#可能會出現像下面這樣的狀態
crm_mon[3602]: 2011/12/9_09:32:07 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
crm_mon[3602]: 2011/12/9_09:32:07 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
crm_mon[3602]: 2011/11/24_09:32:07 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
============
Last updated: Fri Dec 9 09:32:07 2011
Stack: openais
Current DC: pcmk-1 - partition with quorum
Version: 1.1.2-c6b59218ee949eebff30e837ff6f3824ed0ab86b
2 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ pcmk-1 pcmk-2 ]

上面有錯誤發生是正常的,待會設定幾個 crm 參數就不會再出現。

使用 crm step by step 配置叢集資源

on pcmk-1

root@pcmk-1~# crm configure
crm(live)configure# property stonith-enabled="false"
crm(live)configure# property no-quorum-policy="ignore"
#上面這兩個屬性設定後,剛剛的錯誤就不會出現了。
#stonith-enabled 是否要啟用STONITH
#("Shoot The Other Node In The Head" or "Shoot The Offending Node In The Head")

crm(live)configure# rsc_defaults $id="rsc-options" \
> resource-stickiness="100"
#這設定就是之前的 heartbeat's ha.cf 的 「auto_failback off」,
#當失效節點回復時,不讓它重新取得原先擁有的資源。

crm(live)configure# primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip="192.168.122.240" cidr_netmask="32" \
op monitor interval="30s"
#叢集共用的虛擬IP位址

crm(live)configure# primitive lvmdata ocf:heartbeat:LVM \
> params volgrpname="vg00"
#建立 lvm 資源 指定 volume group = vg00

crm(live)configure# primitive drbd_data ocf:linbit:drbd \
> params drbd_resource="data" \
> op monitor interval="15s"
#建立 drbd data 的資源

crm(live)configure# primitive openfiler lsb:openfiler

crm(live)configure# primitive iscsi lsb:iscsi-target

crm(live)configure# primitive samba lsb:smb

crm(live)configure# primitive nfs lsb:nfs
crm(live)configure# primitive nfs-lock lsb:nfs-lock

#建立 openfiler、iscsi、smb、nfs 的資源

crm(live)configure# group g_drbd drbd_data
#將 drbd 資源群組化
crm(live)configure# group g_services lvmdata openfiler ClusterIP iscsi samba nfs nfs-lock
#將服務群組化,待會在下面的設定可以用上

crm(live)configure# ms ms_g_drbd g_drbd \
> meta master-max="1" master-node-max="1" \
>	 clone-max="2" clone-node-max="1" \
>	 notify="true"
#drbd master/slave 的節點設定

crm(live)configure# colocation c_g_services_on_g_drbd inf: g_services ms_g_drbd:Master
#將 g_services 和 ms_g_drbd:Master 資源綁在一起

crm(live)configure# order o_g_servicesafter_g_drbd inf: \
ms_g_drbd:promote g_services:start
# DRBD 啟動後在執行 g_services 群組服務

crm(live)configure# commit
#最後執行確認完成設定

再次查看 corosync 狀態, 該起來的服務應該都能來了。

crm_mon
============
Last updated: Fri Dec  9 15:13:50 2011
Stack: openais
Current DC: pcmk-2 - partition with quorum
Version: 1.1.2-c6b59218ee949eebff30e837ff6f3824ed0ab86b
2 Nodes configured, 2 expected votes
2 Resources configured.
============

Online: [ pcmk-1 pcmk-2 ]

 Master/Slave Set: ms_g_drbd
     Masters: [ pcmk-1 ]
     Slaves: [ pcmk-2 ]
 Resource Group: g_services
     lvmdata    (ocf::heartbeat:LVM):   Started pcmk-1
     openfiler  (lsb:openfiler):        Started pcmk-1
     ClusterIP  (ocf::heartbeat:IPaddr2):       Started pcmk-1
     iscsi      (lsb:iscsi-target):     Started pcmk-1
     samba      (lsb:smb):      Started pcmk-1
     nfs        (lsb:nfs):      Started pcmk-1
     nfs-lock   (lsb:nfslock):  Started pcmk-1

7. Openfiler 設定檔同步設定 :

設定 cluster.xml 標記為 clustering state=on ,如此才能觸發設定檔同步的功能。

on pcmk-1

vim /opt/openfiler/etc/cluster.xml
#修改如下
<?xml version="1.0" ?>
<cluster>
<clustering state="on" />
</cluster>

複製 cluster.xml 到 pcmk-2

scp /opt/openfiler/etc/cluster.xml pcmk-2:/opt/openfiler/etc

設定 rsync.xml 列出哪些設定檔或目錄需要同步

on pcmk-1

vim /opt/openfiler/etc/rsync.xml
#修改如下
<?xml version="1.0" ?>
<rsync>
        <!-- List of files / directories to rsync -->
        <remote hostname="pcmk-2"/>
        <item path="/etc/ha.d/haresources"/>
        <item path="/etc/ldap.conf"/>
        <item path="/etc/openldap/ldap.conf"/>
        <item path="/etc/ldap.secret"/>
        <item path="/var/lib/ldap/"/>
        <item path="/etc/samba/"/>
        <item path="/etc/nsswitch.conf"/>
        <item path="/etc/krb5.conf"/>
        <item path="/etc/ietd.conf"/>
        <item path="/opt/openfiler/etc/networks.xml"/>
        <item path="/opt/openfiler/etc/volumes.xml"/>
        <item path="/opt/openfiler/etc/iscsi/"/>
</rsync>

on pcmk-2

vim /opt/openfiler/etc/rsync.xml
#修改如下
<?xml version="1.0" ?>
<rsync>
        <!-- List of files / directories to rsync -->
        <remote hostname="pcmk-1"/>
        <item path="/etc/ha.d/haresources"/>
        <item path="/etc/ldap.conf"/>
        <item path="/etc/openldap/ldap.conf"/>
        <item path="/etc/ldap.secret"/>
        <item path="/var/lib/ldap/"/>
        <item path="/etc/samba/"/>
        <item path="/etc/nsswitch.conf"/>
        <item path="/etc/krb5.conf"/>
        <item path="/etc/ietd.conf"/>
        <item path="/opt/openfiler/etc/networks.xml"/>
        <item path="/opt/openfiler/etc/volumes.xml"/>
        <item path="/opt/openfiler/etc/iscsi/"/>
</rsync>

編輯 volume.xml 讓 lv00 可以在 openfiler web-gui 顯示
on pcmk-1

vim /opt/openfiler/etc/volume.xml
#修改如下
<?xml version="1.0" ?>
<volumes>
        <volume id="lv00" name="lv00" mountpoint="" vg="vg00" fstype="iscsi" />
</volumes>

何時才會觸發設定檔同步呢?

在 openfiler 2.3 版 只要在 services 其中一項服務啟動或停止時,就會觸發檔案同步。

但是 openfiler 2.99 版,則是在 Services >> SMB/CIFS Setup >> Apply 之後觸發。

8. openfiler Bug 修正 :

這個 Bug 使得 pacemaker 誤已為 iscsi 已經正常停止,最後還讓 lvm 資源管理出現不知名錯誤。

解 Bug 參考網址:2.99 Bug – iscsi-target async stop

作法:修改 /etc/init.d/iscsi-target 第 124 行 ,將最後面的「&」符號刪除即圖。

on pcmk-1

vim /etc/init.d/iscsi-target
#將第 124 行修正如下:
logmsg 'remove module iscsi_trgt'; modprobe -r iscsi_trgt 2>&1 | $loggercmd;)

複製 /etc/init.d/iscsi-target 到 pcmk-2

scp /etc/init.d/iscsi-target pcmk-2:/etc/init.d/

設定到此結束,如有任何問題歡迎提出討論


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s