LoginSignup
1
1

More than 3 years have passed since last update.

CentOS7でDRBD+CryptSetup+PaceMakerでACT/SBY

Posted at

はじめに

サーバをACT/SBYで構築します

環境

version 備考
CentOS 7.4
DRBD 9.0
cryptSetup 2.0.3
paceMaker 1.1.20-5.el7_7.2
corosync 2.4.3

ディスク追加

今回はKVMで行っています。
SERVER-1とSERVER-2というインスタンスがある前提です。
ディスクの追加を行っていく。

インスタンス確認

[root@kvm ~]# virsh list
 Id    名前                         状態
----------------------------------------------------
 126   SERVER-1                     実行中
 127   SERVER-2                     実行中

ディスク追加の定義のxml作成

/tmp/server-1-adddisk.xml
[root@kvm ~]# vi /tmp/server-1-adddisk.xml
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none' />
  <source file='/var/lib/libvirt/images/SERVER-1-vdb.qcow2' />
  <target dev='vdb' bus='virtio' />
</disk>
/tmp/server-2-adddisk.xml
[root@kvm ~]# vi /tmp/server-2-adddisk.xml
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none' />
  <source file='/var/lib/libvirt/images/SERVER-2-vdb.qcow2' />
  <target dev='vdb' bus='virtio' />
</disk>

両方にvdbに16Gで作成

[root@kvm ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/SERVER-1-vdb.qcow2 16G
[root@kvm ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/SERVER-2-vdb.qcow2 16G

設定を当てる

[root@kvm ~]# virsh attach-device SERVER-1 --file /tmp/server-1-adddisk.xml
[root@kvm ~]# virsh attach-device SERVER-2 --file /tmp/server-2-adddisk.xml

永続的に設定を反映

[root@kvm ~]# virsh attach-device SERVER-1 --file /tmp/server-1-adddisk.xml --config
[root@kvm ~]# virsh attach-device SERVER-2 --file /tmp/server-2-adddisk.xml --config

SERVER設定

IPとhost名とドメインを決めておきましょう。

号機 hostname IP
1号機 SERVER-1 192.168.200.10
2号機 SERVER-2 192.168.200.11

hostsにはお互いのIPを書きましょう。

[root@server-1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.200.10 SERVER-1
192.168.200.11 SERVER-2
[root@server-2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.200.10 SERVER-1
192.168.200.11 SERVER-2

資材インストール

まずは両系で必要なものをインストールしておく。

[root@server-1 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@server-1 ~]# yum --enablerepo=extras -y install kmod-drbd90
[root@server-1 ~]# yum -y install cryptsetup cryptsetup-libs
[root@server-1 ~]# yum -y install pacemaker
[root@server-1 ~]# yum -y install pcs fence-agents-all

[root@server-2 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@server-2 ~]# yum --enablerepo=extras -y install kmod-drbd90
[root@server-2 ~]# yum -y install cryptsetup cryptsetup-libs
[root@server-2 ~]# yum -y install pacemaker
[root@server-2 ~]# yum -y install pcs fence-agents-all

増設ディスク初期化

両方で初期化

[root@server-1 ~]# parted /dev/vdb -s mklabel msdos -s mkpart primary 0% 100%
[root@server-2 ~]# parted /dev/vdb -s mklabel msdos -s mkpart primary 0% 100%

DRBD設定

/etc/drbd.d/drbd0.resの編集

/etc/drbd.d/drbd0.res
[root@server-1 ~]# vi /etc/drbd.d/drbd0.res
resource drbd0 {
  protocol  C;
  volume 0 {
    device /dev/drbd0;
    disk /dev/vdb;
    meta-disk internal;
  }
  on SERVER-1 { 
    node-id 0;
    address 192.168.200.10:7789;
  }
  on SERVER-2 { 
    node-id   1;
    address   192.168.200.11:7789;
  }
}

SERVER-2への配布

[root@server-1 ~]# scp -p /etc/drbd.d/drbd0.res root@server-2:/etc/drbd.d/drbd0.res

DRBD作成と起動

create-mdしていきます。

[root@server-1 ~]# drbdadm create-md drbd0
md_offset 17179865088
al_offset 17179832320
bm_offset 17179308032

Found some data

 ==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes //入力箇所

initializing activity log
initializing bitmap (512 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
[root@server-2 ~]# drbdadm create-md drbd0
md_offset 17179865088
al_offset 17179832320
bm_offset 17179308032

Found some data

 ==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes //入力箇所

initializing activity log
initializing bitmap (512 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.



起動前の状態をlsblkで確認
1号機

[root@server-1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm  /
  └─centos-swap 253:1    0  1.6G  0 lvm  [SWAP]
vdb             252:16   0   16G  0 disk

2号機

[root@server-2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm  /
  └─centos-swap 253:1    0  1.6G  0 lvm  [SWAP]
vdb             252:16   0   16G  0 disk



DRBDの起動
片方起動させただけだと、終了しない。
待ち合わせをしてるみたいなので、同じタイミングぐらいで。

[root@server-1 ~]# systemctl start drbd
[root@server-2 ~]# systemctl start drbd

起動後をlsblkで確認
1号機
drbd0が増えてますね

[root@server-1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm  /
  └─centos-swap 253:1    0  1.6G  0 lvm  [SWAP]
vdb             252:16   0   16G  0 disk
└─drbd0         147:0    0   16G  0 disk

2号機も確認

[root@server-2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm  /
  └─centos-swap 253:1    0  1.6G  0 lvm  [SWAP]
vdb             252:16   0   16G  0 disk
└─drbd0         147:0    0   16G  0 disk



SERVER-1を主系にする

[root@server-1 ~]# drbdadm primary --force drbd0

ファイルシステムをext4にする

[root@server-1 ~]# mkfs.ext4 /dev/drbd0

ここで確認の為にマウントしてみます。
両系にマウントするディレクトリを作成しておく。

[root@server-1 ~]# mkdir /opt/mntpoint
[root@server-1 ~]# mount /dev/drbd0 /opt/mntpoint
[root@server-1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm  /
  └─centos-swap 253:1    0  1.6G  0 lvm  [SWAP]
vdb             252:16   0   16G  0 disk
└─drbd0         147:0    0   16G  0 disk /opt/mntpoint

さらに同期されるかの確認で適当にファイルを作ってみる

[root@server-1 ~]# touch /opt/mntpoint/hoge.txt

1号機からアンマウント

[root@server-1 ~]# umount /opt/mntpoint

2号機にマウントしてlsblk

[root@server-2 ~]# mkdir /opt/mntpoint
[root@server-2 ~]# mount /dev/drbd0 /opt/mntpoint
[root@server-2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm  /
  └─centos-swap 253:1    0  1.6G  0 lvm  [SWAP]
vdb             252:16   0   16G  0 disk
└─drbd0         147:0    0   16G  0 disk /opt/mntpoint

ちゃんと同期されてますね。
hoge.txtは削除しておきましょう。

[root@server-2 ~]# ll /opt/mntpoint/
-rw-r--r-- 1 root root 0  9月 11 13:07 hoge.txt

ディスク暗号化

今回はKVMなんであまり意味がないかもしれないですが、暗号化しているということで、だれかが安心してくれる場合もある。

まずdrbdをマウントした状態ならアンマウントしておきます。

[root@server-2 ~]# umount /opt/mntpoint

フォーマット

[root@server-1 ~]# cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 /dev/drbd0
WARNING!
========
This will overwrite data on /dev/drbd0 irrevocably.

Are you sure? (Type uppercase yes): YES //大文字のYESしか認識してくれなかった
Enter passphrase for /dev/drbd0:
Verify passphrase: //【パスワード】入力
encrypt success //【パスワード】再入力
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1048576 inodes, 4193655 blocks
209682 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
128 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

cryptdirという名前で暗号化ディレクトリを作る

[root@server-1 ~]# echo 【パスワード】 | cryptsetup luksOpen /dev/drbd0 cryptdir

そうすると

[root@server-1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part  /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm   /
  └─centos-swap 253:1    0  1.6G  0 lvm   [SWAP]
vdb             252:16   0   16G  0 disk
└─drbd0         147:0    0   16G  0 disk
  └─cryptdir    253:2    0   16G  0 crypt         //なんかぽいのができる



/dev/mapper/の下にさっきのcryptdirができているので、ファイルシステムをext4で作成

[root@server-1 ~]# mkfs.ext4 /dev/mapper/cryptdir

DRBDこみで同期するかを確認します。確認します。
/dev/mapper/cryptdir
こいつをさっきのマウントポイントに。

mount /dev/mapper/cryptdir /opt/mntpoint

マウントされました。

[root@server-1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sr0              11:0    1 1024M  0 rom
vda             252:0    0   16G  0 disk
├─vda1          252:1    0    1G  0 part  /boot
└─vda2          252:2    0   15G  0 part
  ├─centos-root 253:0    0 13.4G  0 lvm   /
  └─centos-swap 253:1    0  1.6G  0 lvm   [SWAP]
vdb             252:16   0   16G  0 disk
└─drbd0         147:0    0   16G  0 disk
  └─cryptdir    253:2    0   16G  0 crypt /opt/mntpoint

さきほどのように、適当にファイルを作ってみる

[root@server-1 ~]# touch /opt/mntpoint/hoge.txt

1号機からアンマウント

[root@server-1 ~]# umount /opt/mntpoint

暗号化解除

[root@server-1 ~]# cryptsetup luksClose cryptdir

2号機で暗号化したのちマウント

[root@server-2 ~]# echo 【パスワード】 | cryptsetup luksOpen /dev/drbd0 cryptdir
[root@server-2 ~]# mount /dev/mapper/cryptdir /opt/mntpoint

ありますね。

[root@server-2 ~]# ll /opt/mntpoint/
-rw-r--r-- 1 root root 0  9月 11 13:51 hoge.txt

2号機からアンマウントと暗号化解除

[root@server-1 ~]# umount /opt/mntpoint
[root@server-1 ~]# cryptsetup luksClose cryptdir



ここでのちにpacemakerにリソース管理をさせる為、
systemdのサービスとして、/usr/lib/systemd/system/encrypt.serviceを作成。

/usr/lib/systemd/system/encrypt.service
[root@server-1 ~]# vi /usr/lib/systemd/system/encrypt.service
[Unit]
Description=encrypt
[Service]
ExecStart=/opt/bin/encryptstart.sh
ExecStop=/opt/bin/encryptstop.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

systemctl start encryptしたときに実行されるscript

/opt/bin/encryptstart.sh
[root@server-1 ~]# mkdir /opt/bin
[root@server-1 ~]# vi /opt/bin/encryptstart.sh
#!/usr/bin/sh
/usr/bin/echo 【パスワード】 | /usr/sbin/cryptsetup luksOpen /dev/drbd0 cryptdir

systemctl stop encryptしたときに実行されるscript

/opt/bin/encryptstop.sh
[root@server-1 ~]# vi /opt/bin/encryptstop.sh
#!/usr/bin/sh
/usr/sbin/cryptsetup luksClose cryptdir

2号機にも送っておきましょう。

[root@server-1 ~]# scp -p /usr/lib/systemd/system/encrypt.service root@server-2:/usr/lib/systemd/system/encrypt.service
[root@server-1 ~]# scp -rp /opt/bin root@server-2:/opt/bin

systemd設定反映
1号機

[root@server-1 ~]# systemctl daemon-reload

2号機

[root@server-2 ~]# systemctl daemon-reload

pacemakerとcorosyncの設定

一旦まずはDRBD停止します。

[root@server-1 ~]# systemctl stop drbd
[root@server-2 ~]# systemctl stop drbd

/etc/corosync/corosync.confを編集

/etc/corosync/corosync.conf
[root@server-1 ~]# vi /etc/corosync/corosync.conf
totem {
    version: 2
    cluster_name: XXX_cluster
    secauth: off
    transport: udpu
}

nodelist {
    node {
        ring0_addr: SERVER-1
        nodeid: 1
    }

    node {
        ring0_addr: SERVER-2
        nodeid: 2
    }
}

quorum {
    provider: corosync_votequorum
    two_node: 1
}

logging {
    to_logfile: yes
    logfile: /var/log/cluster/corosync.log
    to_syslog: yes
}

2号機へ転送

[root@server-1 ~]# scp -p /etc/corosync/corosync.conf 192.168.200.11:/etc/corosync/corosync.conf



/etc/sysconfig/pacemakerの編集

/etc/sysconfig/pacemaker
[root@server-1 ~]# vi /etc/sysconfig/pacemaker
# PCMK_fail_fast=no
↓
PCMK_fail_fast=yes

2号機へ転送

[root@server-1 ~]# scp -p /etc/sysconfig/pacemaker 192.168.200.11:/etc/sysconfig/pacemaker

中身を変更しているわけではないが、一応/etc/systemd/system/にサービスをコピーしておく

[root@server-1 ~]# cp -p /usr/lib/systemd/system/corosync.service /etc/systemd/system/
[root@server-1 ~]# cp -p /usr/lib/systemd/system/pacemaker.service /etc/systemd/system/
[root@server-1 ~]# scp -p /usr/lib/systemd/system/corosync.service root@192.168.200.11:/usr/lib/systemd/system/corosync.service
[root@server-1 ~]# scp -p /usr/lib/systemd/system/pacemaker.service root@192.168.200.11:/usr/lib/systemd/system/pacemaker.service

もう一度systemd設定反映
1号機

[root@server-1 ~]# systemctl daemon-reload

2号機

[root@server-2 ~]# systemctl daemon-reload

pacemakerの起動

[root@server-1 ~]# systemctl start pacemaker
[root@server-1 ~]# systemctl start pcsd
[root@server-1 ~]# systemctl enable pcsd

あとhaclusterというユーザにパスワードを付与しておく
1号機

[root@server-1 ~]# echo 【haパスワード】 | passwd -f hacluster --stdin

2号機

[root@server-2 ~]# echo 【haパスワード】 | passwd -f hacluster --stdin



haclusterユーザ使って認証

[root@server-1 ~]# pcs cluster auth SERVER-1 SERVER-2 -u hacluster -p 【haパスワード】

clusterの設定

[root@server-1 ~]# pcs cluster setup --name HA_cluster SERVER-1 SERVER-2 --force

クラスタの起動

[root@server-1 ~]# pcs cluster start --all
[root@server-1 ~]# pcs cluster enable --all

リソース登録

DRBDの登録

[root@server-1 ~]# pcs resource create DRBD ocf:linbit:drbd drbd_resource=drbd0 op monitor interval=10s role=Master monitor interval=30s role=Slave
[root@server-1 ~]# pcs resource master MS_DRBD DRBD master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

ディスク暗号化

[root@server-1 ~]# pcs resource create ENCRYPT systemd:encrypt --group HA

ファイルシステムのマウント

[root@server-1 ~]# pcs resource create FS ocf:heartbeat:Filesystem device=/dev/mapper/criptdir directory=/opt/mntpoint fstype=ext4 --group HA

なんか色々

[root@server-1 ~]# pcs constraint colocation add HA MS_DRBD INFINITY with-rsc-role=Master
[root@server-1 ~]# pcs constraint order promote MS_DRBD then start HA

リソースのクリーン

[root@server-1 ~]# pcs resource cleanup

こういう設定もしたのだけど、なんだったかわすれた・・・

[root@server-1 ~]# pcs property set stonith-enabled=false
[root@server-1 ~]# pcs property set no-quorum-policy=ignore

あとVIPもリソースに追加

[root@server-1 ~]# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.200.12 cidr_netmask=24 --group HA

確認

[root@server-1 ~]# pcs status
Cluster name: HA_cluster
Stack: corosync
Current DC: SERVER-2 (version 1.1.20-5.el7_7.2-3c4c782f70) - partition with quorum
Last updated: Sun Sep 13 06:57:08 2020
Last change: Thu Sep 10 14:31:58 2020 by root via cibadmin on SERVER-1

2 nodes configured
7 resources configured

Online: [ SERVER-1 SERVER-2 ]

Full list of resources:

 Master/Slave Set: MS_DRBD [DRBD]
     Masters: [ SERVER-1 ]
     Slaves: [ SERVER-2 ]
 Resource Group: HA
     ENCRYPT (systemd:encrypt):              Started SERVER-1
     FS      (ocf::heartbeat:Filesystem):    Started SERVER-1
     VIP     (ocf::heartbeat:IPaddr2):       Started SERVER-1

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1