標籤:伺服器 作業系統 可靠性 本地磁碟 drbd 同步 解決方案
一、簡介
650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/75/1C/wKiom1Yy2engqFyZAABNdBRd5XE057.gif" title="20151030104525.gif" alt="wKiom1Yy2engqFyZAABNdBRd5XE057.gif" />
DRBD的全稱為:Distributed ReplicatedBlock Device(DRBD)分布式塊裝置複製,DRBD 是由核心模組和相關指令碼而構成,用以構建高可用性的叢集。其實現方式是通過網路來鏡像整個裝置。它允許使用者在遠程機器上建立一個本地塊裝置的即時鏡像。與心跳串連結合使用,也可以把它看作是一種網路RAID。
DRBD是一個用軟體實現的、無共用的、伺服器之間鏡像塊裝置內容的儲存複製解決方案。 DRBD Logo資料鏡像:即時、透明、同步(所有伺服器都成功後返回)、非同步(本機伺服器成功後返回)。DBRD的核心功能通過Linux的核心實現,最接近系統的IO棧,但它不能神奇地添加上層的功能比如檢測到EXT檔案系統的崩潰。DBRD的位置處於檔案系統以下,比檔案系統更加靠近作業系統核心及IO棧。
二、工作模式及協議
①工作模式
單主模式:典型的高可靠性叢集方案。DRBD負責接收資料,把資料寫到本地磁碟,然後發送給另一個主機,另一個主機再將資料存到自己的磁碟中。
複主模式:需要採用共用cluster檔案系統,如GFS和OCFS2。用於需要從2個節點並發訪問資料的場合,需要特別配置。
②複製協議
協議A:非同步複製協議。本地寫成功後立即返回,資料放在發送buffer中,可能丟失。
協議B:記憶體同步(半同步)複製協議。本地寫成功並將資料發送到對方後立即返回,如果雙機掉電,資料可能丟失。
協議C:同步複製協議。本地和對方寫成功確認後返回。如果雙機掉電或磁碟同時損壞,則資料可能丟失。
一般用協議C。選擇協議將影響流量,從而影響網路時延。
三、安裝依賴並編譯drbd
①安裝相關程式
# yum -y install gcc make automake autoconf kernel-devel kernel-headers flex libxslt libxslt-devel asciidoc# wget http://oss.linbit.com/drbd/9.0/drbd-9.0.0.tar.gz # wget http://oss.linbit.com/drbd/drbd-utils-8.9.4.tar.gz # getenforce 0# systemctl stop firewalld
注:安裝kernel-devel一定要和uname -r看到的核心版本一致.
②編譯drbd-utils
# tar -zxvf drbd-utils-8.9.4.tar.gz# cd drbd-utils-8.9.4# ./autogen.sh# ./configure --prefix=/usr/ --localstatedir=/var --sysconfdir=/etc# make KDIR=/usr/src/kernels/3.10.0-229.14.1.el7.x86_64# make install# cp drbd-utils-8.9.4/scripts/drbd /etc/init.d/ ##複製啟動指令碼
③編譯drbd
# tar -zxvf drbd-9.0.0.tar.gz# cd drbd-9.0.0# make KDIR=/usr/src/kernels/3.10.0-229.14.1.el7.x86_64# make install# make -C drbd install
④安裝drbd模組
# cd drbd-9.0.0/drbd# cp drbd.ko /lib/modules/3.10.0-229.el7.x86_64/kernel/lib/# cp drbd_transport_tcp.ko /lib/modules/3.10.0-229.el7.x86_64/kernel/lib/# depmod ##更新核心包關聯檔案# modprobe drbd ##安裝核心模組# modprobe drbd_transport_tcp# lsmod |grep drbd ##查看模組是否載入成功drbd 463948 0 libcrc32c 12644 2 xfs,drbd# lsmod|grep drbd_transport_tcpdrbd_transport_tcp 17731 0 drbd 463948 2 drbd_transport_tcp
⑤查看drbd版本及路徑
# cat /proc/drbd ##查看版本資訊version: 9.0.0 (api:2/proto:86-110)GIT-hash: e0e3bc833053a0ed6b4b593b32e40223a9373fb7 build by [email protected], 2015-10-29 19:16:18Transports (api:8): tcp (1.0.0)# whereis drbd ##查看drbd安裝路徑drbd: /usr/lib/drbd /etc/drbd.conf /etc/drbd.d /usr/share/man/man8/drbd.8
四、添加新磁碟並分區
# fdisk -l# fdisk /dev/sdb歡迎使用 fdisk (util-linux 2.23.2)。更改將停留在記憶體中,直到您決定將更改寫入磁碟。使用寫入命令前請三思。Device does not contain a recognized partition table使用磁碟標識符 0xd9a29d5a 建立新的 DOS 磁碟標籤。命令(輸入 m 擷取協助):nPartition type: p primary (0 primary, 0 extended, 4 free) e extendedSelect (default p): Using default response p分區號 (1-4,預設 1):起始 扇區 (2048-2097151,預設為 2048):將使用預設值 2048Last 扇區, +扇區 or +size{K,M,G} (2048-2097151,預設為 2097151):+300M分區 1 已設定為 Linux 類型,大小設為 300 MiB命令(輸入 m 擷取協助):wThe partition table has been altered!Calling ioctl() to re-read partition table.正在同步磁碟。# fdisk -l
五、配置drbd
①主設定檔drbd.conf
# cat /etc/drbd.conf ##查看drbd的主設定檔# You can find an example in /usr/share/doc/drbd.../drbd.conf.exampleinclude "drbd.d/global_common.conf";include "drbd.d/*.res";
②配置global_common.conf
# cat /etc/drbd.d/global_common.conf|grep -v "#" global {usage-count no; ##是否參加drbd的使用者統計,預設此選項為YES}common {handlers {}startup {}options {}disk {}net {}}
③建立資源設定檔:
a.定義資源檔
# vi /etc/drbd.d/drbd.res ##建立資源設定檔為drbd.resresource r1 { ##定義資源群組名稱為r1 net { cram-hmac-alg sha1; ##使用sha1加密 shared-secret "123456"; ##產生加密金鑰 } volume 1 { ##定義卷組 device /dev/drbd1; ##邏輯裝置路徑(建立塊裝置) disk /dev/sdb1; ##物理裝置路徑(用於複製的分區) meta-disk internal; ##meta data資訊存放的方式,該處為內部儲存,即和真實資料放在一起儲存 } on node1 { ##on開頭,後面是主機名稱(需與uname -n相同) node-id 0; address 192.168.10.132:7000; ##設定drbd監聽地址和連接埠 } on node2 { node-id 1; address 192.168.10.133:7000; } connection { host node1 port 7000; host node2 port 7000; net { protocol C; ##使用drbd的第三種同步協議,表示收到對方主機寫入確認後,則認為寫入完成 } }}
b.配置resource
# dd if=/dev/zero of=/dev/sdb1 bs=1M count=100 ##用指定大小的塊拷貝一個檔案# drbdadm -c /etc/drbd.conf create-md all ##建立裝置中繼資料initializing activity logNOT initializing bitmapWriting meta data...New drbd meta data block successfully created.success
# drbdadm create-md r1 ##建立r1裝置元(注:使用上命令,則該命令非必須)You want me to create a v09 style flexible-size internal meta data block.There appears to be a v09 flexible-size internal meta data blockalready in place on /dev/sdb1 at byte offset 314568704Do you really want to overwrite the existing meta-data?[need to type ‘yes‘ to confirm] yesinitializing activity logNOT initializing bitmapWriting meta data...New drbd meta data block successfully created.
# drbdadm up r1 ##啟用該資源Device ‘1‘ is configured!Command ‘drbdmeta 1 v09 /dev/sdb1 internal apply-al‘ terminated with exit code 20
# drbd-overview ##查看狀態 1:r1/0 Connected(1*) Secondary(1*) Inconsistent(1*)
六、drbd同步測試
①配置primary node
設定node1為primary node:
# drbdadm primary r1# drbd-overview 1:r1/1 Connected(2*) Primar/Second UpToDa/UpToDa
node2狀態:
# drbd-overview 1:r1/1 Connected(2*) Second/Primar UpToDa/UpToDa
格式化並掛載(node1):
# mkdir /drbd # mkfs.ext4 /dev/drbd1 ##格式化/dev/drbd1# mount /dev/drbd1 /drbd ##掛載# drbd-overview ##查看狀態 1:r1/1 Connected(2*) Primar/Second UpToDa/UpToDa /drbd ext4 283M 2.1M 262M 1%
②進行同步測試
node1:
在node1下的掛載點/drbd寫入一些資料
# umount /dev/drbd1 ##卸載/dev/drbd1# drbdadm secondary r1 ##將主節點降級為備節點# drbd-overview 1:r1/1 Connected(2*) Secondary(2*) UpToDa/UpToDa
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/75/21/wKioL1YzL2nyBhsPAAGuwZIPHt4728.jpg" title="QQ圖片20151030164918.png" alt="wKioL1YzL2nyBhsPAAGuwZIPHt4728.jpg" />
node2:
# mount /dev/drbd1 /drbd ##掛載裝置# drbdadm primary r1 ##將node2升級為主節點# drbd-overview 1:r1/1 Connected(2*) Primar/Second UpToDa/UpToDa /drbd ext4 283M 3.2M 261M 2%
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/75/24/wKiom1YzMiLRGHlJAAFQxKSoRy8441.jpg" title="QQ圖片20151030170145.png" alt="wKiom1YzMiLRGHlJAAFQxKSoRy8441.jpg" />
已實現同步!
附:
# drbdadm role r1 ##查看節點狀態Secondary
# drbdadm dstate r1 ##查看硬碟狀態
本地和對等節點的硬碟可能為下列狀態之一:
diskless(無盤):本地沒有塊裝置分配給DRBD使用,表示無可用裝置,或是使用drbdadm命令手工分離;
或是底層的I/O錯誤導致自動分離。
attaching:讀取無資料時的瞬間狀態。
failed(失敗):本地塊裝置報告I/O錯誤的下一個狀態,其下一個狀態為diskless無盤。
negotiating:在已串連的DRBD設定進行attach讀取無資料前的瞬間狀態。
inconsistent:資料不一致,在兩個節點上(初始的完全同步前)這種狀態出現後立即建立一個新的資源。
outdated:資料資源一致,但已淘汰。
dunknown:當對等節點網路連接不可用時會出現該狀態
consistent:一個沒有串連的節點資料一致,當建立串連時,它決定資料是uptodate或outdated
uptodate:一致的最新的資料狀態,為正常狀態
本文出自 “記事本” 部落格,請務必保留此出處http://wangzhijian.blog.51cto.com/6427016/1710926
DRBD編譯安裝配置