DRBDデータミラーマスターノード同期データ

14489 ワード

一、DRBDの設置
1、DRBD公式サイトからソースバッグをダウンロードします。http://drbd.linbit.com/en/
2、コンパイルインストール
[email protected]]萋yum install kernel ker nel-devel kernel-headers flex
[root@web1~]萻reboot
[root@web1~」(葦ll-d/usr/src/ケネル/2.62-573.18.1.el6.x 86_64
drwxr-xr-x 22 root root 4096 Mar 19 03:53/usr/src/ケネル/2.6.32-573.18.1.el6.x 86_64
[root@web1~]璢zxf drbd-8.4.6.tar.gz 
[root@web1~]33751;cddrbd-8.4.6
[email protected]]芫make KDIR=/usr/src/ケネル/2.6.32-573.18.1.el6.x 86_64
[email protected]]𞃳make install
3、drbd.koの経路を確認する
[email protected]]璢modprobe-l grep-i drbd
udates/drbd.ko
[email protected]]荌ls/lib/modules/2.62-573.18.1.el6.x 86_64/udates/
drbd.ko
4、drbdモジュールをカーネルにロードする
[email protected]]璢modprobe drbd
5、drbdがインストールされているかどうかを確認する
[email protected]]33821;lsmodgrep-i drbd
drbd                 36529 0 
libcrc 32 c              1246 2 drbd、ip_vs
二、drbd-utilsの取り付け
1、ソースバッグをダウンロードするhttp://www.drbd.org/download/drbd/utils/drbd-utils-8.9.6.tar.gzを選択して、インストールをコンパイルします
[root@web1~]葃tar zxf drbd-utils-8.6.tar.gz 
[root@web1~]33846;cd drbd-utils-8.1.6
[email protected]]鏢.configre--prefix=/usr/local/drbd-utils-8.96--without-83 support
[email protected]]鉰make
メークを実行する時にエラーが発生しました。
	--xinclude --stringparam variablelist.term.break.after 1 \
	http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl drbdsetup.xml
error : Operation in progress
warning: failed to load external entity "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
cannot parse http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
make[1]: *** [drbdsetup.8] Error 4
make[1]: Leaving directory `/root/drbd-utils-8.9.6/documentation/v9'
make: *** [doc] Error 2
2、docbook-style-xslをインストールする
[root@web1 drbd-utils-8.9.6]# yum -y install docbook-style-xsl
メークを作り直す
[root@web1 drbd-utils-8.9.6]# make
[root@web1 drbd-utils-8.9.6]# make install
[root@web1 drbd-utils-8.9.6]# ls /usr/local/drbd-utils/
etc  lib  sbin  share  var
3、リンク起動プログラムと、DRbd起動を設定する
[root@web1 drbd-utils-8.9.6]# ln -s /usr/local/drbd-utils/etc/rc.d/init.d/drbd /etc/init.d/
[root@web1 drbd-utils-8.9.6]# chkconfig --add drbd
[root@web1 drbd-utils-8.9.6]# chkconfig drbd on
4、drbd.com nfプロファイルと含まれるプロファイルを確認する。
[root@web1 drbd-utils-8.9.6]# cat /usr/local/drbd-utils/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";
5、globalを確認するcommon.co nfプロファイルのデフォルト設定
[root@web1 drbd-utils-8.9.6]# cat /usr/local/drbd-utils/etc/drbd.d/global_common.confnf 

# DRBD is the result of over a decade of development by LINBIT.
# In case you need professional services for DRBD or have
# feature requests visit http://www.linbit.com

global {
	usage-count yes;
	# minor-count dialog-refresh disable-ip-verification
	# cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600;
}

common {
	handlers {
		# 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 {
		# 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
	}

	net {
		# 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
	}
}
    これでDRBDのインストールが完了しました。
三、主な構成例
1、環境説明
ホストの役割
IPアドレス
ディスクパーティション
オペレーティングシステム
マスター(メインノード)-web 1
192.168.1.250
//dev/sdb 1
CentOS 6.7_64
slaave(予備ノード)-web 2
192.168.1.209
//dev/sdb 1
CentOS 6.7_64
2、それぞれメインノードにdrbdをインストールする
3、DRbd.com nfファイルの配置
global_common.co nfプロファイルには、DRBDのglobalとcommonの配置部分が含まれています。
/usr/local/drbd-utils/etc/drbd.com nfプロファイルにあります。
[root@web1 ~]# cat /usr/local/drbd-utils/etc/drbd.d/global_common.conf >> /usr/local/drbd-utils/etc/drbd.conf
[root@web1 ~]# vim /usr/local/drbd-utils/etc/drbd.conf

global {
        usage-count no;
}

common {
        syncer { rate 200M; }

}

resource r0 {
        protocol C;

        handlers {

                pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
                pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
                local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
                fence-peer "/usr/lib64/heartbeat/drbd-peer-outdater -t 5";
                pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' reboot";
                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 120;
        degr-wfc-timeout 120;
        }

        disk {
        on-io-error detach;
        fencing resource-only;
        }

        net {
        cram-hmac-alg "sha1";
        shared-secret "MySQL-HA";
        }
        
        device /dev/drbd0;
        on master {

        disk /dev/sdb1;
        address 192.168.1.250:7788;
        meta-disk internal;
        }

        on slave {
        disk /dev/sdb1;
        address 192.168.1.209:7788;
        meta-disk internal;
        }

}
4、ドラbd.com nfプロファイルを同時にslaaveノードにコピーする。
5、メインノードのsdb 1パーティションにDRBD記録情報を提供するデータブロックを作成する
[root@web1 ~]# drbdadm create-md r0
WARN:
  You are using the 'drbd-peer-outdater' as fence-peer program.
  If you use that mechanism the dopd heartbeat plugin program needs
  to be able to call drbdsetup and drbdmeta with root privileges.

  You need to fix this with these commands:
  chgrp haclient /lib/drbd/drbdsetup-84
  chmod o-x /lib/drbd/drbdsetup-84
  chmod u+s /lib/drbd/drbdsetup-84

  chgrp haclient /sbin/drbdmeta
  chmod o-x /sbin/drbdmeta
  chmod u+s /sbin/drbdmeta

initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
slaaveでdrbdadm create-md r 0時報を実行するのは間違っています。
Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.

Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40
解決:データを/dev/sdb 1に書き込みます。
[root@web2~」(菗ddif=/dev/zero of=/dev/sdb 1 bs=1 M count=100
[root@web2 ~]# drbdadm create-md r0
WARN:
  You are using the 'drbd-peer-outdater' as fence-peer program.
  If you use that mechanism the dopd heartbeat plugin program needs
  to be able to call drbdsetup and drbdmeta with root privileges.

  You need to fix this with these commands:
  chgrp haclient /lib/drbd/drbdsetup-84
  chmod o-x /lib/drbd/drbdsetup-84
  chmod u+s /lib/drbd/drbdsetup-84

  chgrp haclient /sbin/drbdmeta
  chmod o-x /sbin/drbdmeta
  chmod u+s /sbin/drbdmeta

initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
6、メインノードでDRBDをそれぞれ起動する
[root@web1 ~]# service drbd start
[root@web2 ~]# service drbd start
[root@web2 ~]# ps -ef |grep drbd
root       1720      2  0 17:33 ?        00:00:00 [drbd-reissue]
root       1727      2  0 17:33 ?        00:00:00 [drbd_submit]
root       1994      2  0 17:47 ?        00:00:00 [drbd_w_r0]
root       2007      2  0 17:47 ?        00:00:00 [drbd_r_r0]
root       2012      2  0 17:47 ?        00:00:00 [drbd_a_r0]
root       2013      2  0 17:47 ?        00:00:00 [drbd_ack_sender]
root       2018   1868  0 17:47 pts/0    00:00:00 grep drbd
7、任意のノードでノードの状態を確認する
[root@web2 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@web2, 2016-03-19 06:03:56
m:res  cs         ro                   ds                         p  mounted  fstype
0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
[root@web1 ~]# cat /proc/drbd 
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@web1, 2016-03-19 04:35:38
 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:2096348
  • ロは、ロール情報を表し、DRbdを最初に起動すると、両方のノードがデフォルトでSecondary状態にある
  • を示しています。
  • dsはディスク状態情報を表し、Inconsistent/Inconsistentは両ノードのディスクデータが不一致状態にあることを示している。
  • nsは、ネットワークから送信されるパケット情報
  • を表している。
  • dwは、ディスク書き込み情報
  • を表しています。
  • drは、ディスク読取り情報
  • を示す。
    8、メインノードを設定し、マスター上でdrbdadm----overwrite-data-off-peer primallを実行します。
    [root@web1 ~]# drbdadm -- --overwrite-data-of-peer primary all
    WARN:
      You are using the 'drbd-peer-outdater' as fence-peer program.
      If you use that mechanism the dopd heartbeat plugin program needs
      to be able to call drbdsetup and drbdmeta with root privileges.
    
      You need to fix this with these commands:
      chgrp haclient /lib/drbd/drbdsetup-84
      chmod o-x /lib/drbd/drbdsetup-84
      chmod u+s /lib/drbd/drbdsetup-84
    
      chgrp haclient /sbin/drbdmeta
      chmod o-x /sbin/drbdmeta
      chmod u+s /sbin/drbdmeta
    9、設定中は、DRbdサービスを再開する必要があります。
    [root@web1 ~]# /etc/init.d/drbd restart
    [root@web2 ~]# /etc/init.d/drbd restart
    
    
    ## web1      
    [root@web1 ~]# drbdadm -- --overwrite-data-of-peer primary all
    10、初回実行完了設定マスタノードコマンドを実行した後、どちらがメインノードであるかを設定する場合、以下のコマンドで設定できます。
    [root@web1 ~]# /sbin/drbdadm primary r0   /sbin/drbdadm primary all
    11、マスタノードの設定コマンドを実行したら、2台のマシンのデータが同期されたかどうかを確認します。
    [root@web1 ~]# cat /proc/drbd 
    version: 8.4.6 (api:1/proto:86-101)
    GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@web1, 2016-03-19 04:35:38
     0: cs:SyncSource ro:Secondary/Secondary ds:UpToDate/Inconsistent C r-----
        ns:2061312 nr:0 dw:0 dr:2061312 al:0 bm:0 lo:0 pe:4 ua:0 ap:0 ep:1 wo:f oos:39132
    	[==================>.] sync'ed: 98.3% (39132/2096348)K
    	finish: 0:00:01 speed: 38,348 (38,812) K/sec
    [root@web1 ~]# cat /proc/drbd 
    version: 8.4.6 (api:1/proto:86-101)
    GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@web1, 2016-03-19 04:35:38
     0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
        ns:2096348 nr:0 dw:0 dr:2096348 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
    この行の出力で同期が完了したのが見えます。cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate
    12、DRBDディスクをマウントする
  • は、mount動作がメインノードでのみ行われるため、メインノードが設置された後にのみ、DRbdディスクパーティションをフォーマットすることができます。また、両ノードの中では、同じ時刻に1台だけプリマ状態になり、もう1台はsecondary状態
  • になります。
    13、DRbdパーティションを表示する
    [root@web1 ~]# ll /dev/drbd*
    brw-rw---- 1 root disk 147, 0 Mar 19 19:06 /dev/drbd0
    
    /dev/drbd:
    total 0
    drwxr-xr-x 2 root root 60 Mar 19 19:06 by-disk
    drwxr-xr-x 2 root root 60 Mar 19 19:06 by-res
    14、DRbdディスクをフォーマットし、メインノードにマウントする
    [root@web1 ~]# mkfs.ext4 /dev/drbd0
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    131072 inodes, 524087 blocks
    26204 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=536870912
    16 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
    	32768, 98304, 163840, 229376, 294912
    
    Writing inode tables: done                            
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 32 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    15、テストファイルを作成する/data/ディレクトリにマウントする
    [root@web1 ~]# mount /dev/drbd0 /data/
    [root@web1 ~]# ls /data/
    lost+found
    [root@web1 ~]# mkdir /data/www
    [root@web1 ~]# dd if=/dev/zero of=/data/testdrbd.file bs=10M count=20
    16、DRBDデータのミラーをテストし、データの整合性を保証するために、先にノードのdrbdサービスを停止する必要がある。
    [root@web2 ~]# /etc/init.d/drbd stop
    Stopping all DRBD resources: .
    [root@web2 ~]# mount /dev/sdb1 /mnt/
    [root@web2 ~]# ll !$
    ll /mnt/
    total 204820
    drwx------ 2 root root     16384 Mar 19 19:34 lost+found
    -rw-r--r-- 1 root root 209715200 Mar 19 19:42 testdrbd.file
    drwxr-xr-x 2 root root      4096 Mar 19 19:37 www
  • は上の出力によって見られ、データはすでにslaaveノード
  • に同期されている。
  • バックアップノードがマスタノードに切り替わった後、DRbdディスクをスイッチしたノードに再マウントする必要がある