#はじめに
サーバを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作成
[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>
[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の編集
[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を作成。
[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
[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
[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を編集
[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の編集
[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