lxcficon.jpg HAシステム

元のページに戻る

HAシステム

HA(High Availability :ハイアベイラビリティ / 高可用性)のシステムを単純なシェルスクリプトで組み立ててみましょう。

あまり複雑なものは説明しきれませんので、次に示すような簡単な仕様で考えてみましょう。

1. 10個のコンテナをLinDev-0001からLinDev-0010と名づけて生成する。
2. 生成したコンテナを見張り、停止したコンテナがあれば即座に削除して、新たに同じ名前で生成する。
3. スクリプト実行が中断した場合は、生成したコンテナをすべて削除して終了する。

HAといいながら、おまり本格的なものではなくて申し訳ないです。
しかし、コンテナに異常があった場合に対応するのは、こんな簡単なスクリプトでもできるのです。

では、以下にシェルスクリプトを示します。

  1. #!/bin/sh
  2. trap 'lxcf erase-n LinDev- 10 ' 0
  3. echo "Generate 10 LXCF containers."
  4. echo "lxcf sysgen-n LinDev- 10"
  5. lxcf sysgen-n "LinDev-" 10
  6. watch_containers() {
  7. lxcf list | awk '{if($3=="stopped")system("lxcf erase "$1";lxcf sysgen "$1" ")}'
  8. }
  9. while sleep 3
  10. do
  11. watch_containers
  12. done

シンプルですね。

3行目は、スクリプト全体が^cなどで中断した場合に、生成されていたコンテナをすべて消してから終了させるための設定です。
trapはshの標準コマンドです。
「lxcf erase-n LinDev- 10」は、lxcfのコマンドで、LinDev-0001からLinDev-0010の名前のコンテナを生成します。 該当する名前のコンテナがなくても処理は失敗しません。

7行目は、コンテナを生成します。sysgen-nサブコマンドは、複数のコンテナを一度に生成するコマンドです。 第一引数のprefixと4桁の数字を組み合わせたコンテナを生成します。

9行目から11行目は、すべてのコンテナの状態を監視し、"stopped"状態のコンテナがあればeraseして、あらたにsysgenを使い同じ名前でコンテナを生成します。

13行目から16行目までは、メインの無限ループ処理です。 3秒ごとにコンテナの監視処理watch_containersを呼び出します。

さて実際に動かしてみましょう。

準備として、virt-managerを起動しておきます。 起動したらメニューから[ファイル] - [接続を追加(A)...」で表示されたダイアログで、"ハイパーバイザー"に"LXC(Linux Containers)"を選び、"接続"ボタンを押します。[[BR]]

terminalも一つ開いて、rootになっておきます。

スクリプトは、"HA10"という名前で保存しておきましょう。

sc1.jpg

HA10を実行すると、10のコンテナが生成されます。
virt-manager上にも生成されたコンテナの一覧が表示されます。

sc2.jpg

次にLinDev-0003をvirt-managerから"強制的に電源OFF"します。
これは異常発生の代わりに実行しました。
実際にはなにかコンテナに異常が発生された場合にどのように動作するかを示します。
LinDev-0003コンテナは削除され、新たにLinDev-0003コンテナが生成されます。

sc3.jpg

Terminalで^cを押すと、すべてのコンテナが削除されていきます。

sc4.jpg


元のページに戻る