Pacemaker & Corosync & DRBDでMAASの冗長化をする。
PostgreSQLだけクラウス化すれば良さそう。他サービスは参照するだけで複数起動可。
・ラックコントローラは複数起動可能。リージョンコントローラVIPを参照。
・リージョンコントローラは複数起動可能。PostgreSQL VIPを参照。
・PostgreSQLはDRDB & PaceMakerで冗長化
作業の流れは以下
①1,2号機にDRBD & PaceMaker & DRDBセットアップ
②1,2号機にMAASセットアップ
③PostgreSQLクラスタ化
④MAAS DB参照設定変更(VIP参照するよう変更)
環境
Ubuntu16.0.4LTS×2台
MAAS Ver: 2.3.0
ホスト名 |
NW1 |
NW2 |
DGW |
DNS |
説明 |
maas |
192.168.0.100 |
192.168.4.100 |
- |
- |
VIP |
maas1 |
192.168.0.101/24 |
192.168.4.101/24 |
192.168.0.1 |
192.168.0.1 |
1号機実P |
maas2 |
192.168.0.102/24 |
192.168.4.102/24 |
192.168.0.1 |
192.168.0.1 |
2号機実P |
注意事項
MAASインストールするとBind/NTPがインストールされる。
インストール前にBind/NTPを動かしている場合、設定が書き換えられるので注意。
※Bindでは以下設定が行われる。
直結ローカルネットワークアドレスからのクエリ・再帰問い合わせ許可
maasゾーン・直結ローカルネットワークアドレスの逆引きゾーンの作成
手順
コマンドは指定がない限りrootユーザーで実行。
以降の作業は指定がない限り2台のサーバで実行
①1,2号機にDRBD & PaceMaker & DRDBセットアップ
1) サーバセットアップ
ディスク2個つき。2個目はDRBD同期用
hostsファイルで2台のサーバの名前解決可能にする
apparmor無効化
2) drbdインストール
apt update
apt -y install drbd-utils
echo "drbd" >> /etc/modules
modprobe drbd
3) drbdセットアップ
デバイス初期化
dd if=/dev/zero of=/dev/vdb
設定ファイル作成
/etc/drbd.d/data.res
resource data {
on maas1 {
device /dev/drbd0;
disk /dev/vdb;
address 192.168.0.101:7788;
meta-disk internal;
}
on maas2 {
device /dev/drbd0;
disk /dev/vdb;
address 192.168.0.102:7788;
meta-disk internal;
}
}
設定ファイル編集
sed -i -e 's/^common {/common {\n protocol C;/' /etc/drbd.d/global_common.conf
※commonセクション先頭に"protocols C;"追加
DRBDデバイスマウント用ディレクトリ作成
mkdir /Data
ミラーデバイスセットアップ
drbdadm create-md data
drbdadm up data
ミラーデバイス初期同期
★1号機だけで実行★
drbdadm -- --overwrite-data-of-peer primary data/0
cat /proc/drbd
上記コマンドの実行結果にミラー進捗が表示される。完了するまで待つ。
ファイルシステムフォーマット
★1号機だけで実行★
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /Data
4) Pacemaker & Corosyncセットアップ
apt -y install crmsh
設定ファイル編集
/etc/corosync/corosync.conf
totem {
version: 2
cluster_name: debian
token: 3000
token_retransmits_before_loss_const: 10
clear_node_high_bit: yes
crypto_cipher: none
crypto_hash: none
interface {
ringnumber: 0
bindnetaddr: 192.168.0.0
broadcast: yes
mcastport: 5405
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: QUORUM
debug: off
}
}
quorum {
provider: corosync_votequorum
expected_votes: 2
}
nodelist {
node {
ring0_addr: 192.168.0.101
nodeid: 1
}
node {
ring0_addr: 192.168.0.102
nodeid: 2
}
}
Corosync & Pacemaker再起動
systemctl stop corosync
systemctl start corosync
systemctl restart pacemaker
②1,2号機にMAASセットアップ
1) MAASインストール
apt install maas
2) MAASセットアップ
★1号機だけで実行★
maas createadmin --username=madmin --email=hoge@example.com
ssh-keygen -trsa
3) MAASセットアップ
★1号機だけで実行★
以下URLにアクセスしWeb画面からセットアップ実施
http://[1号機IP]:5240/MAAS
以下画面で2)で作成した鍵を登録
4) MAASサービス停止
systemctl stop maas-regiond
systemctl stop maas-proxy
systemctl stop maas-rackd
echo 'host maasdb maas all md5' >> /etc/postgresql/9.5/main/pg_hba.conf
echo "listen_addresses = '*'" >> /etc/postgresql/9.5/main/postgresql.conf
systemctl stop postgresql
★1号機だけで実行★
rsync -a /var/lib/postgresql/ /Data/postgresql
umount /Data
mv /var/lib/postgresql/ /var/lib/postgresql_org
ln -s /Data/postgresql /var/lib/postgresql
2) DRBDミラーデバイス無効化
drbdadm down data
★1号機だけで実行★
crm configure <<HERE
property stonith-enabled=false
property no-quorum-policy=ignore
primitive drbd_res ocf:linbit:drbd params drbd_resource=data op monitor interval=29s role=Master op monitor interval=31s role=Slave
ms drbd_master_slave drbd_res meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
primitive fs_res ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/Data fstype=ext4
primitive postgresql lsb:postgresql op monitor interval="1s"
primitive vip1 ocf:heartbeat:IPaddr2 params ip="192.168.0.100" cidr_netmask="24" op monitor interval="30s"
primitive vip2 ocf:heartbeat:IPaddr2 params ip="192.168.4.100" cidr_netmask="24" op monitor interval="30s"
colocation postgresql_colo INFINITY: vip1 vip2 postgresql fs_res drbd_master_slave:Master
order postgresql_order mandatory: drbd_master_slave:promote fs_res:start postgresql:start vip2:start vip1:start
commit
show
quit
HERE
読み物 « Linux-HA Japan
→colocation: INFINITYで同居を強制。順番意味あり。左のサービス起動時に右が存在する必要あり。
→order: mandatoryで左から右の順番で起動することを強制
DRBD Pacemaker HA Cluster on Ubuntu 16.04 - The Urban Penguin
→DRBDまわり参考
アクティブ側のホストをシャットダウンしFailOverすることを確認
④MAAS DB参照設定変更(VIP参照するよう変更)
サービス停止
systemctl stop maas-regiond
systemctl stop maas-proxy
systemctl stop maas-rackd
★1号機だけで実行★
maas-region local_config_set --database-host 192.168.4.100
maas-region local_config_set --maas-url http://192.168.4.100:5240/MAAS
→VIPに変更
1号機の以下ファイルを2号機にコピー
/etc/maas/regiond.conf
/var/lib/maas/secret
ラックコントローラ設定変更
maas-rack config --region-url http://192.168.4.100:5240/MAAS
サービス起動
systemctl start maas-regiond
systemctl start maas-proxy
systemctl start maas-rackd
補足
drbdコマンドメモ
状態確認(/proc/drbd)
srcversion: 4B3E2E2CD48CAE5280B5205
0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless C r-----
ns:640 nr:0 dw:137728 dr:5629 al:16 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:52427164
Primary/Secondaryの入れ替え
drbdadm primary data
drbdadm secondary data
同期停止・再開
drbdadm down data
drbdadm up data
Pacemaker crmコマンド
リソース初期化
crm node list | cut -d"(" -f1 | egrep -v "standby=" | xargs -i crm node standby {}
crm resorce list | egrep "Stopped$" | awk '{print $1}' | xargs -i crm resource cleanup {}
crm resource list | egrep "Master/Slave"|cut -d"[" -f2|cut -d"]" -f1 | xargs -i crm resource cleanup {}
crm configure erase
crm node list | cut -d"(" -f1 | egrep -v "standby=on" | xargs -i crm node online {}
Corosync動作確認
# corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
id = 192.168.0.101
status = ring 0 active with no faults
→no faultsであること
# crm_mon -1
Last updated: Sun Jan 14 23:57:26 2018 Last change: Sun Jan 14 23:56:17 2018 by hacluster via crmd on maas2
Stack: corosync
Current DC: maas2 (version 1.1.14-70404b0) - partition with quorum
2 nodes and 0 resources configured
Online: [ maas1 maas2 ]
root@maas1:~#
→onlineであること
以下手順について
maas-region edit_named_options --migrate-conflicting-options
参考URLには2号機追加時に上記コマンドを実行している。man確認したところ、Maasと競合するnamed.confのoptionsディレクティブの設定を全て無効化するみたいな設定であった。DBが利用可能である必要もあり。今回はapt install maasで2台ともセットアップし、DBを共有している為、実行不要と判断。