業務需求描述 | 假設有兩臺服務器A、B 其實際ip 10.0.0.22 和10.0.0.23 配置目標: 兩臺服務器分別配置好drdb,實現在A服務器上/dev/sdb分區上寫入數據,數據實時同步到B 機器上,一旦服務器A宕機或硬盤損壞導致數據不可用,B服務器上的數據此事是A的一個完整備份,且可以瞬間接替服務器A,實現數據異機的實時數據同步。 |
部署結構 圖 | 主備模式 新存儲服務器 I 新存儲服務器ii ------》 drdb/md1 drdb分區1主 《------》 drdb分區1從 heartbeat 主主模式: 新存儲服務器 I 新存儲服務器ii ------》 drdb/md1 drdb分區1主 《------》drdb分區1從 heartbeat
drdb分區2從 《------ drdb分區2主 |
環境準備 | 參照:http://linuxboys.blog.51cto.com/9150052/1671201 此處兩臺服務器各添加一塊硬盤, 且分區 使用 parted 分區(mkfs無法格式化大於16 T分區,可使用XFS或e2fsprogs) http://blog.ronnyegner-consulting.de/2011/08/18/ext4-and-the-16-tb-limit-now-solved/ 分區命令 parted /dev/sdb mklabel gpt yes parted /dev/sdb mkpart primary ext4 0 1000 ignore parted /dev/sdb mkpart primary ext4 1001 2000 Yes ignore parted /dev/sdb p 提示:這裏的meta data分區一定不能格式化建立文件系統,交給drdb管理 格式化好的分區不要進行掛載(mount) 生產環境drdb meta data分區一般可設爲1-2G ,數據分區可以格式化 (mkfs.ext4 /dev/sdb1;tune2fs -c -1 /dev/sdb1 )
檢查格式化的方法: [root@B ~]# mount /dev/sdb2 /tools mount: you must specify the filesystem type #此處說明meda data分區是正確的 |
軟件安裝 | rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm #注意此處的elrepo源 yum install -y kmod-drbd84 [root@B tools]# rpm -qa drbd84-utils kmod-drbd84 kmod-drbd84-8.4.6-1.el6.elrepo.x86_64 drbd84-utils-8.9.2-1.el6.elrepo.x86_64 [root@B tools]# modprobe drbd #手動加載內核模塊 [root@B tools]# lsmod | grep drbd drbd 365931 0 libcrc32c 1246 1 drbd [root@B tools]# echo "modprobe drbd" >>/etc/rc.local #此處不是必須 [root@B tools]# echo "modprobe drbd" >/etc/sysconfig/modules/drbd.modules [root@B tools]# chmod 755 /etc/sysconfig/modules/drbd.modules #問題,加載模塊是遇到找不見,可重啓服務器。 |
配置文件 | 默認的配置路徑:/etc/drbd.conf [root@B tools]# cat /etc/drbd.conf # You can find an example in /usr/share/doc/drbd.../drbd.conf.example #樣例 include "drbd.d/global_common.conf"; #相當於公共文件 include "drbd.d/*.res"; #相當於nginx 的虛擬主機 |
/etc/drbd.conf 範例詳細註釋 | global { usage-count no; #是否參加DRBD使用者統計,默認爲yes } #全局配置選項(global) common { syncer { rate 10M; #設置主備節點同步時的網絡速率最大值,單位時字節 verify-alg crc32c; #數據校驗方法 } } #公共配置項(common)這裏的common,指的是drbd所管理的多個資源之間的common。配置項裏主要是配置drbd所有resource可以設置爲相同的參數項,比如protocol、syncer等等 # primary for drbd1 resource data { #resource資源 data名稱 protocol C; #協議 disk { #磁盤控制 on-io-error detach; #磁盤io錯誤,分離 } on A { #節點1, drbd1 主機名(host解析) device /dev/drbd0; #指定設備 disk /dev/sdb1; #節點對應磁盤 address 10.0.0.22:7788; #監聽地址,端口 meta-disk /dev/sdb2[0]; #存放meta信息 } on drbd2 { #節點2 device /dev/drbd0; disk /dev/sdb1; address 10.0.0.23:7788; meta-disk /dev/sdb2[0]; } } #可以添加多個資源,但需要作用於不同的設備 #注意兩邊的配置相同 |
Enabling DRBD資源(兩臺操作相同): | |
創建drbd紀錄信息的metadata | [root@B ~]# drbdadm create-md data initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created. # 如果此處格式化就無法創建 |
啓動服務 | drbdadm create-md data 或 drbdadm up all |
狀態查看 | cat /proc/drbd 或 /etc/init.d/drbd status version: 8.4.6 (api:1/proto:86-101) GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R6, 2015-04-09 14:35:00 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:976548 Connected表示連接通信正常 Secondary/Secondary表示角色未確定 :Inconsistent/Inconsistent表示磁盤狀態數據不一致 |