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インストール

★1号機だけで実行★

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

Ubuntu MAAS DHCP有効化操作メモ

"Subnet"タブクリックし、DHCPサーバを動かすNICに対応するfabricをクリック
f:id:pikesaku:20180113174532p:plain
 
vlan列の「untagged」をクリック
f:id:pikesaku:20180113174619p:plain
 
右上「Take Action」から「Provide DHCP」を選択
f:id:pikesaku:20180113174655p:plain

Ubuntu MAASメモ

イメージをローカルで管理する場合

 
Select and Import Images | MAAS documentation
Local Image Mirror | MAAS documentation
 
以下コマンドをrootユーザーで実行

apt install simplestreams
KEYRING_FILE=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg
IMAGE_SRC=https://images.maas.io/ephemeral-v3/daily/
IMAGE_DIR=/var/www/html/maas/images/ephemeral-v3/daily
sstream-mirror --keyring=$KEYRING_FILE $IMAGE_SRC $IMAGE_DIR 'arch=amd64' 'release=xenial' --max=1 --progress
sstream-mirror --keyring=$KEYRING_FILE $IMAGE_SRC $IMAGE_DIR 'os~(grub*|pxelinux)' --max=1 --progress

 
Apache起動して以下URLで参照が可能になる

http://<myserver>/maas/images/ephemeral-v3/daily/

add-apt-repositoryについて

レポジトリ追加するコマンド
 
ppaはパーソナルパッケージアーカイブ。ユーザーが公開している非公式レポジトリ。
add-apt-repositoryは、ppaと公式レポジトリ両方追加が可能。
 
PPA の追加 / 削除 - 哲朗web
apt-getで見つからないパッケージを追加する方法(debian, ubuntu両方対応) - Qiita

Ansibleメモ

roleは使った方が良さげ。
ansible のrole まとめ - Qiita
 
roleとは?上記URLに端的に記述あり。

ansible でファイルを使い回す方法に include がある。これは、 task, handler (task の一種), play1 を他のファイルから読み込める。
一方で、roles を使うことで一つのファイルでなく、タスクや変数・ハンドラごとのファイルをまとめて読み込める。

$ mkdir -p ./work/inventory
$ mkdir -p ./work/roles/common/{tasks,handlers,vars,meta,files,templates}

OpenStack Ansible調査

MAASデプロイ操作メモ

MAASにマシン登録済みが前提
デプロイ時に以下設定をする
NICのIP/Bonding設定
パーティション設定
 
マシン登録状態
f:id:pikesaku:20171224041621p:plain
 

Bonding設定

まずサブネット設定

サブネットはMAASがパケットをキャプチャし自動生成される。
しかし接続端末がない場合、自動生成されない為、必要に応じて手動で設定する。
設定の流れは、「Fabric」作成し、次に「subnet」作成する。
「subnet」作成時に対応する「Fabric」を指定する。
 

サブネット設定画面一覧

f:id:pikesaku:20171224110930p:plain
 

Fabric追加

f:id:pikesaku:20171224111433p:plain
 
f:id:pikesaku:20171224111504p:plain
fabric-10が追加された
 

サブネット追加

f:id:pikesaku:20171224111716p:plain
 
f:id:pikesaku:20171224111850p:plain
fabric-10を割り当て
 
f:id:pikesaku:20171224112000p:plain
fabric-10・192.168.5.0/24が追加された
 

Bonding & IP設定

f:id:pikesaku:20171224114459p:plain
 
f:id:pikesaku:20171224114513p:plain
 
f:id:pikesaku:20171224114555p:plain
 
f:id:pikesaku:20171224114630p:plain
 
f:id:pikesaku:20171224114712p:plain
 
f:id:pikesaku:20171224114752p:plain
Bonding IFにIPアドレス設定
 
f:id:pikesaku:20171224114856p:plain
 
f:id:pikesaku:20171224114929p:plain
 
f:id:pikesaku:20171224115010p:plain
 
f:id:pikesaku:20171224115033p:plain
 
f:id:pikesaku:20171224115052p:plain
 
f:id:pikesaku:20171224115108p:plain
 
f:id:pikesaku:20171224115122p:plain
 
f:id:pikesaku:20171224115135p:plain
 
f:id:pikesaku:20171224115147p:plain
 
f:id:pikesaku:20171224115204p:plain
全IFにIPアドレス設定
 
 
 

パーティション設定

まずはデフォルトパーティション削除
※デフォルトはsda1だけ。swapはloopバックデバイスで実装
 
f:id:pikesaku:20171224115659p:plain
 
f:id:pikesaku:20171224115717p:plain
 
f:id:pikesaku:20171224115732p:plain
 
f:id:pikesaku:20171224115802p:plain
 
パーティションを設定する
f:id:pikesaku:20171224120202p:plain
 
f:id:pikesaku:20171224120232p:plain
 
f:id:pikesaku:20171224120248p:plain
 
f:id:pikesaku:20171224120305p:plain
 
f:id:pikesaku:20171224120334p:plain
 
f:id:pikesaku:20171224120350p:plain
 
 
 

デプロイ

f:id:pikesaku:20171224120642p:plain
 
f:id:pikesaku:20171224121039p:plain
 
 
 

デプロイ後のログイン方法

 
MAASサーバのrootユーザーに設定された秘密鍵でデプロイしたサーバに対し"ubuntu"ユーザーでSSHログインが可能
# ssh [デプロイしたサーバIP] -l ubuntu

※この設定はMAASサーバの以下ファイルで制御されてるかと思いきや、設定変更し再起動し再度Commision & Deployしても動作変わらず。
/etc/maas/preseeds/enlist_userdata
以下URLを読めばわかるかも。
How preseeds work in MAAS — MAAS dev documentation