天天看點

MooseFS 3.0部署筆記(3)【原創】

本文介紹MooseFS+DRBD+KEEPALIVED實作高可用,以下是部署筆記。

一、DRBD(實作MFSMASTER META_DATA 的同步寫)

1. 配置hosts

192.168.3.127 L-AP-3-127

192.168.3.131 L-AP-3-131

2. 下載下傳依賴包flex,并安裝

ftp://rpmfind.net/linux/centos/6.8/os/x86_64/Packages/flex-2.5.35-9.el6.x86_64.rpm

rpm -ivh flex-2.5.35-9.el6.x86_64.rpm

3. 下載下傳drbd安裝包,并安裝

1) 安裝核心包

http://oss.linbit.com/drbd/8.4/drbd-8.4.6.tar.gz

tar -xzvf drbd-8.4.6.tar.gz

cd drbd-8.4.6

cd drbd

#因為核心小于2.6.33,是以要裝核心包,2.6.33以後版本已包含不需要裝

make KDIR=/usr/src/kernels/2.6.32-220.el6.x86_64/

cp drbd.ko /lib/modules/`uname -r`/kernel/lib/

depmod

modprobe drbd

modinfo drbd

2) 安裝工具包

下載下傳http://oss.linbit.com/drbd/drbd-utils-8.9.6.tar.gz

tar -xzvf drbd-utils-8.9.6.tar.gz

cd drbd-utils-8.9.6

# --with-pacemaker,啟用pacemaker叢集支援,會建立ocf格式資源檔案

./configure --prefix=/usr/local/drbd --sysconfdir=/etc/ --localstatedir=/var/ --with-pacemaker

make && make install

(漫長的等待)

3) 修改配置

ln -s /usr/local/drbd/sbin/drbdadm /usr/sbin/drbdadm

ln -s /usr/local/drbd/sbin/drbdmeta /usr/sbin/drbdmeta

ln -s /usr/local/drbd/sbin/drbdsetup /usr/sbin/drbdsetup

4) DRBD主配置檔案(/etc/drbd.conf)

## global_common.conf檔案包含global和common的DRBD全局配置部分;

## *.res檔案包含DRBD資源的配置資訊。

vi /etc/drbd.d/global_common.conf

global {

usage-count no; # 是否加入DRBD官方統計

# minor-count dialog-refresh disable-ip-verification

# cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600;

}

common {

handlers {

# 定義處理機制程式,/usr/lib/drbd/ 裡有大量的程式腳本

# These are EXAMPLE handlers only.

# They may have severe implications,

# like hard resetting the node under certain circumstances.

# Be careful when chosing your poison.

# pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

# pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

# local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

# split-brain "/usr/lib/drbd/notify-split-brain.sh root";

# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";

# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

}

startup {

# 定義啟動逾時時間等

# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb

}

options {

# cpu-mask on-no-data-accessible

}

disk {

# 磁盤相關公共設定,比如I/O、資料狀态

# size on-io-error fencing disk-barrier disk-flushes

# disk-drain md-flushes resync-rate resync-after al-extents

# c-plan-ahead c-delay-target c-fill-target c-max-rate

# c-min-rate disk-timeout

on-io-error detach; # 配置I/O錯誤處理政策為分離

}

net {

# 設定DRBD同步時使用的驗證方式和密碼資訊。

# protocol timeout max-epoch-size max-buffers unplug-watermark

# connect-int ping-int sndbuf-size rcvbuf-size ko-count

# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri

# after-sb-1pri after-sb-2pri always-asbp rr-conflict

# ping-timeout data-integrity-alg tcp-cork on-congestion

# congestion-fill congestion-extents csums-alg verify-alg

# use-rle

cram-hmac-alg sha1;

shared-secret "drbd";

}

syncer {

verify-alg sha1;

# 定義網絡傳輸速率,一般傳輸速度的30%

rate 50M;

}

}

## 建立資源配置檔案(/etc/drbd.d/r0.res)

resource r0{

# 公用相同部分可以放到頂部,各節點會自動繼承

# 使用drbd的第三種同步協定,表示收到遠端主機的寫入确認後,則認為寫入完成

protocol C;

device /dev/drbd0; # DRBD邏輯裝置的路徑

# drbd的中繼資料存放方式,DRBD磁盤内部。

meta-disk internal;

# 每個主機的說明以"on"開頭,後面是主機名.在後面的{}中為這個主機的配置.

on L-AP-3-127{

# 此處是節點的主機名‘uname -n’

address 192.168.3.127:7788; # 設定DRBD的監聽端口

disk /var/lib/mfs; # 節點實體裝置

}

on L-AP-3-131{

address 192.168.3.131:7788;

disk /var/lib/mfs;

}

}

5) 啟動

/etc/rc.d/init.d/drbd start

drbdadm create-md r0

這一步出現 open(/dev/mapper/vg_drbd-lv_drbd) failed: Device or resource busy。 原因是檔案系統格式不一緻,且已挂載。

解決方案:

1. umount /drbd

2. dd if=/dev/zero of=/dev/mapper/vg_drbd-lv_drbd bs=1M count=100

3. 重新執行drbdadm create-md r0 即可

4. 删除自動挂載 vi /etc/fstab 删除 /drbd 這一行

在3.131機器上部署一模一樣的一台。

service drbd start 啟動服務

service drbd status 檢視狀态

如果出現 Secondary/Unknown, 關閉防火牆。

drbdadm primary --force r0 (設定主節點,僅執行3.127)

service drbd status 檢視狀态(可以看到主節點變化)

cat /proc/drbd 可以看到主備同步情況

mkfs -t ext4 /dev/drbd0(以下隻在主節點3.127執行)

mkdir /mnt/drbd0

mount /dev/drbd0 /mnt/drbd0

chown -R mfs:mfs /mnt/drbd0/

從節點建立挂載目錄

mkdir /mnt/drbd0

chown -R mfs:mfs /mnt/drbd0/

6) 修改mfsmaster配置

vi /etc/mfs/mfsmaster.cfg

修改DATA_PATH=/mnt/drbd0/mfs

mkdir /mnt/drbd0/mfs

chmod -R 777 /mnt/drbd0/mfs

cp /var/lib/mfs/* /mnt/drbd0/mfs/

7) 驗證是否同步(因為備節點不能被讀,是以隻能進行主備切換後檢視。)

原主節點 umount /mnt/drbd0

設定為從節點 drbdadm secondary r0

原從節點設定為主節點 drbdadm primary r0

原從節點 mount /dev/drbd0 /mnt/drbd0

檢視相關目錄資料是否一緻。(注意執行順序)

8) 驗證同步後,因為一開始老是不能 umount , 直接reboot之後,發現兩台機器腦裂了,誰也不認識誰。這時按以下方法修複:

在備機 3.131 上執行:

drbdadm disconnect r0

drbdadm secondary r0

drbdadm --discard-my-data connect r0

在主機 3.127 上執行:

drbdadm connect r0

在備機 3.131 上執行:

service drbd stop

service drbd start

檢視狀态:

service drbd status

紅色部分可不執行

9) 重新開機之後恢複master

service drbd start

drbdadm primary --force r0

mount /dev/drbd0 /mnt/drbd0

10) 重新開機之後恢複slave

service drbd start

service drbd status

錯誤分析:

指令mount /dev/drbd0 /mnt/drbd0

提示mount: you must specify the filesystem type

方案:需要将drbd起來,然後設為primary 才能mount

繼續閱讀