CentOS6.7上でのDRBD構築メモ

# 環境
CentOS6.5
vm1: 192.168.50
vm2: 192.168.52
* 検証環境のためNICは一本


# drbdのインストール
こちらでお好きなrpmを選択
http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el6/x86_64/RPMS/
今回は
drbd84-utils-8.9.2-1.el6.elrepo.x86_64.rpm
kmod-drbd84-8.4.6-1.el6.elrepo.x86_64.rpm 
を選択

```
cd /tmp
wget http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el6/x86_64/RPMS/drbd84-utils-8.9.2-1.el6.elrepo.x86_64.rpm
wget http://ftp.kddilabs.jp/Linux/RPMS/elrepo/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.6-1.el6.elrepo.x86_64.rpm 
rpm -ivh *drbd*.rpm
```

# hosts

```
#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.50 vm1
192.168.1.52 vm2
```

# その他事前準備
## iptables,selinuxの無効化

```
service iptables stop
chkconfig iptables off
```

```
cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 
```

設定を反省させるために再起動


# 設定ファイルの編集
## global_common.conf

```
# cat /etc/drbd.d/global_common.conf
global {
        usage-count no;
}

common {
        handlers {

        }

        startup {
        }

        options {
        }

        disk {
                resync-rate 50M;
        }

        net {
                protocol C;
                csums-alg sha1;
                verify-alg sha1;
        }
}
```

## r0.res

```
#cat /etc/drbd.d/r0.res
resource r0 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/sdb1;

        on vm1 {
                address 192.168.1.50:7788;
        }
        on vm2 {
                address 192.168.1.52:7788;
        }
}
```

# 仮想ディスクの追加
今回はESXi上でvm1/vm2に対して、新規仮想ディスクを追加
# ディスクの認識(vmを再起動しない場合)
```
for i in $(find /sys/class/scsi_host -name 'scan') $(find /sys/devices -name 'scan') ;do echo "- - -" > $i ; done
```
認識されていることを確認

```
fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
```

# partitionの作成
```
fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xef042cab.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 
Using default value 2610

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xef042cab

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
```

# meta dataの作成
```
drbdadm create-md r0
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
```

# serviceの起動
```
chkconfig drbd on
service drbd start
Starting DRBD resources: [
     create res: r0 r1
   prepare disk: r0 r1
    adjust disk: r0 r1
     adjust net: r0 r1
]
WARN: nothing stacked for this host (xxx), nothing to do in stacked mode!
```
* WARNは無視してOKです


# primaryの昇格(primary側でのみ実行)
```
#drbdadm -- --overwrite-data-of-peer primary r0

同期が始まることを確認
#cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R6, 2015-04-09 14:35:00
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:11597 nr:0 dw:10573 dr:5343023 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:11402368
        [=====>..............] sync'ed: 32.0% (11132/16360)M
        finish: 0:05:12 speed: 36,444 (38,504) K/sec
```

#フォーマット
```
#mkfs.xfs /dev/drbd0
mkfs.xfs: /dev/drbd0 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
# mkfs.xfs -f /dev/drbd0
meta-data=/dev/drbd0             isize=256    agcount=4, agsize=1310258 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=5241029, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
```

# 動作確認
```
# mount /dev/drbd0 /mnt
# echo "test" > /mnt/test.txt
# cat /mnt/test.txt
test
# umount /dev/drbd0
```


# 操作一覧
## Primary　=> secondary 降格
```
/dev/drbd0をマウントしている場合は、アンマウントする必要があります。
#drbdadm secondary r0
```
## Secondary -> Primary 昇格
```
drbdadm primary r0
mount /dev/drbd0 /mnt
元secondary側でmountできることを確認する
```

**あとはheartbeatと連携させる**