pikesaku’s blog

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

DRBDクラスタ状態復旧メモ

両方ともクラスタから外しstandalone状態にする

 
※リソースはdataの場合

実行コマンド

drbdadm disconnect data

 
"cat /proc/drbd"出力結果

version: 8.4.5 (api:1/proto:86-101)
srcversion: 4B3E2E2CD48CAE5280B5205 
 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----
    ns:2312 nr:0 dw:0 dr:2952 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

※Primary側実行結果
※Standaloneになっていることを確認
 

最新データ保有ノードをPrimaryにしてクラスタに組み込む

drbdadm primary data
drbdadm connect data

  
"cat /proc/drbd"出力結果

version: 8.4.5 (api:1/proto:86-101)
srcversion: 4B3E2E2CD48CAE5280B5205 
 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
    ns:0 nr:0 dw:2312 dr:640 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

古いデータを保有ノードをSecondaryにしデータを破棄させてクラスタに組み込む

drbdadm secondary data 
drbdadm connect data --discard-my-data

 

状態確認(cat /proc/drbd出力結果)

Primary側

version: 8.4.5 (api:1/proto:86-101)
srcversion: 4B3E2E2CD48CAE5280B5205 
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:0 dw:2312 dr:640 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 
Standby側

version: 8.4.5 (api:1/proto:86-101)
srcversion: 4B3E2E2CD48CAE5280B5205 
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:0 dw:0 dr:2952 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

考え方ポイント

Standaloneはクラスタから外れた状態
connect/disconnectでクラスタ接続・切断をする
discard-my-data実行時はSecondary状態である必要あり

スパニングツリー復習

以下種類があり
・Spaning Tree(ST)
・Rapid Spanning Tree(RST)
・上記2つのVLAN毎に動く版
 Per Vlan ST
 Rpid Per Vlan ST
・Multi ST
 VLANをグループ化し、それ毎に動く・リージョン設定も可能。大規模向け
 
STは収束に時間がかかる
RSTで解消
ST/RSTともに完全ブロッキングパスができ、非効率
Per VlanでVlan毎にブロッキングポートを分けることができ効率化
Per Vlahは一つ一つ設定するのが大変
MSTでグループ化でき、Per Vlan問題解消。収束も高速(RST利用のため)
 
 

STまとめ

参考URL

STP(スパニングツリープロトコル)とは
スパニング・ツリー完全理解---目次 | 日経クロステック(xTECH)
スパニングツリープロトコル - ネットワーク入門サイト
http://www.kenschool.jp/blog/?p=3201

https://www.infraexpert.com/study/stpz2.html
https://www.infraexpert.com/study/stpz3.html

 
ループ構成のL2ネットワークで、フレームがループしないよう制御する。
任意のポートをフレーム送受信しない状態(ブロッキング状態)にしてループを防ぐ。
パス障害発生時は、ブロッキング状態のポートをフレーム送受信可能にすることで経路の冗長化を実現。
ルートブリッジが管理フレームBPDUを定期的にL2マルチキャストに送信し状態を把握。
 
BPDUフォーマットは以下

STP(スパニングツリープロトコル)とは

 
基本動作は以下
①ルートブリッジ(BPDU送信ブリッジ)選択
②ルートポート選択
各スイッチがルートブリッジに近いポートを選択
③指定ポート
スイッチとスイッチを接続するリンクで、ルートブリッジに近い方のポートを選択
 
ルートポート・指定ポートどちらにもならなかったポートがブロッキング状態になる。

STP(スパニングツリープロトコル)とは

 
 
パス異常発生時に収束まで時間がかかる問題あり。(異常検知20秒+30秒状態再計算)

STP - ポートの状態遷移とコンバージェンス

 
 

RSTまとめ

参考URL

RSTPの役割決定手順 - ネットワーク入門サイト
RSTP状態と高速コンバージェンス - ネットワーク入門サイト
http://beginners-network.com/supplement/bpdu_frame_format.html
RSTP - BPDUフォーマット
RSTP - ラピッドスパニングツリープロトコルの設定
RSTP - ラピッドスパニングツリープロトコルとは
 
STPの収束時間問題を解消する技術(数秒で収束)
ルートポートでBDPU受信できなかった場合、代替ポートをルートポートにしフォワーディングする。
※STPブロッキングポートがRSTPでは代替ポート
RSTP利用時でもサーバ接続ポートはPortFast設定した方がよい
 

BPDUについて

・スイッチの指定ポートから送信される
・ルートポートは受信するだけ
 

STP利用時の注意点

 
安易な変更・増設は禁物,管理情報の共有を徹底しよう | 日経クロステック(xTECH)
ルートブリッジが変わる危険性あり。
 
ただ、それを防ぐ機能もあり。
STPの拡張技術 - ルートガード

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

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}