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 |
参考
High Availability | MAAS documentation
Get MAAS to run your physical cloud | Download | Ubuntu | Ubuntu
CLI | MAAS documentation
Rack Controller | MAAS documentation
server - Connect cluster controller to the region controller (MaaS) - Ask Ubuntu
注意事項
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
③PostgreSQLクラスタ化
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) PostgresqlデータDRBD同期ディスク化設定
★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
3) Pacemaker Postgresql冗長化リソース設定
★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まわり参考
4) PostgreSQLクラスタ動作確認
アクティブ側のホストをシャットダウンし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 {}
Pacemaker動作確認
crm status
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を共有している為、実行不要と判断。