pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

Ubuntu MAAS冗長化

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
f:id:pikesaku:20180114191104p:plain
 

ホスト名 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)で作成した鍵を登録
f:id:pikesaku:20180113173550p:plain
 

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

 

2) DRBDミラーデバイス無効化

drbdadm down data

 

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を共有している為、実行不要と判断。