2015年9月17日木曜日

【トピックス】ChefによるLifeKeeperクラスタ構築 ~ LifeKeeperインストールからクラスタ構築 編

こんにちは、LifeKeeperの開発を担当している松嶋です。

前回より引き続き、ChefによるLifeKeeperインストールからクラスタの構築までの説明を致します。よろしくお願いします。

前々回のブログ記事Chef環境構築Chef Server/Workstation/clientを各ノードにインストールの説明、前回のブログ記事ChefによるLifeKeeperクラスタ構築~cookbook準備cookbookファイル準備の説明をしました。


今回はいよいよ、ChefでのLifeKeeperクラスタの構築に入ります。
 
構築手順の説明のために、関係するノードを以下のように定義します。


l  抽出元既存クラスタ(LifeKeeperの設定情報の抽出元となるクラスタ)

プライマリノード

ホスト名:node1

IPアドレス:192.168.0.1

スタンバイノード

ホスト名:node2

IPアドレス:192.168.0.2
 

LifeKeeperのバージョンはv9.0.0である必要があります。

※このノードには、あらかじめLifeKeeper Chef Support対象のリソース(IP,DataKeeper,Apach,MySQL,PostgreSQL)2ノード間での切り替え可能な状態で設定されている状態であるとします。

※全てのリソースはActive/Standby構成で、プライマリノード側でリソースステータスはActiveであるとします。

l  新規展開先クラスタ(新たにLifeKeeperでクラスタリング展開するノード)

プライマリノード

ホスト名:node3

IP アドレス:192.168.0.3

スタンバイノード

ホスト名:node4

IPアドレス:192.168.0.4

LifeKeeperのバージョンはv9.0.0である必要があります。

LifeKeeperの保護対象となるアプリケーション自体の設定やHAクラスタ構成に必要なネットワークは別途実施する必要があります。詳細は後述します。
 

それでは最初に、あらかじめ構築しているLifeKeeperHAクラスタ(例ではnode1またはnode2)を使用してLifeKeeperの設定情報を抽出する作業を行います。
 

◆抽出元既存クラスタでの作業

!注意:抽出元の既存クラスタの設定に関する留意点

抽出元とするHAクラスタにはいくつかの前提条件があります。それらについては、Chefサポートのクイックスタートガイドの「サポート構成」の内容を確認してください。

しかし、クイックスタートガイドで明記されていないポイントが一つあります。それは、全てのリソースが「Active/Standby」の状態である必要があるということです。v9.0.0Chefサポートを使用する場合、全てのリソース階層はどちらか一方のノードでActiveステータスとして起動している必要があります。そのため、Active/Active構成でリソースを設定している場合は、一方のノードに全てのリソース階層をスイッチオーバーしてから次の手順に移ってください。


■クラスタ構成情報の抽出

事前の条件の確認ができたら、既存クラスタから、LifeKeeperのコミュニケーションパス、リソースなどの構成情報を抽出するコマンド「lkexportxmlを実行します。

この時、プライマリノード側ですべてのリソースを起動させ、サービス中(Active)にしてください。両ノードでリソースが停止していると、Chefを使用した復元する時にエラーになります。lkexportxmlの実行例は次の通りです。


# /opt/LifeKeeper/lkadm/bin/lkexportxml>/root/resource.xml


この例では/root/resource.xmlというファイルにLifeKeeperのクラスタ構成情報がXMLとして保存されます。
 

■クラスタ構成情報ファイルをChef Workstationへコピー

前項で保存したクラスタ構成情報ファイル/root/resource.xmlChef Workstationにコピーしてください。以後の作業はChef Workstationで行います。


ここまででクラスタ構成情報の抽出は完了です。次に、Chef Workstationでその構成情報をChefで利用できるようにします。


Chef Workstationでの作業

作業を始める前に~/.chef/knife.rbを修正してください。

cookbook_pathセクションにsite-cookbooksを追加します。



cookbook_path       ['cookbooks', 'site-cookbooks']


LifeKeeperの構成情報をXMLからattributeに変換する

先ほどコピーしたXMLファイルresource.xmlを引数にして変換スクリプト、「exp2chef.pl」を実行します。exp2chef.plは前回のブログ「cookbook準備」でLifeKeeperのインストールCDからコピーしたものです。exp2chef.plの実行例は次の通りです。
 


$ ~/Chef/exp2chef.pl ~/Chef/resource.xml


上記のコマンドを実行するとcomm/res.rbがサフィックスとして付加されたファイルがresource.xml ファイルと同じディレクトリに作成されます。



・コミュニケーションパス用attributeファイル:resource.comm.rb


・リソース用attributeファイル:resource.res.rb
 これら2つのファイルがattributeファイルです。


attributeファイルのコピー

先ほど作成したattributeファイルをcookbook以下にコピーします。

ファイルは~/Chefディレクトリにあるとします。以下はコピー操作の例は以下の通りです。


       コミュニケーションパス用cookbook

$ cp ~/Chef/resource.comm.rb  ~/chef-repo/site-cookbooks/commpath/attributes/default.rb
 

       リソース用cookbook

$ cp ~/Chef/resource.res.rb ~/chef-repo/site-cookbooks/resource/attributes/default.rb
 

次に、各attributeファイルを新規クラスタでの設定内容に合わせて編集します。
 

n  attributeファイルの編集

LifeKeepercookbookとして、LifeKeeperをインストールするための「lkinstall」、コミュニケーションパス設定用の「commpath」、リソース設定用の「resource」があります、この中にある各attributeファイルを展開先ノードの状況に合わせて編集します。


LifeKeeperインストール用cookbookattributeファイルの編集

以下のパスにあるattributeファイルdefault.rbをエディタで開きます。


~/chef-repo/site-cookbooks/lkinstall/attributes/default.rb

ファイルを開くと以下のような構成で記述されていますので、ノード名を展開先のノード名に変更します。また、ライセンスキーファイル名も適用するライセンスキーファイル名に変更します。


default['ノード名']['licenses'] = ["ライセンスキーファイル名"]

例:展開先ノード名がnode3,node4 ライセンスキーファイルがevalkeys-90day.txtの場合


default['node3']['licenses'] = ["evalkeys-90day.txt"]

default['node4']['licenses'] = ["evalkeys-90day.txt"]



    ・コミュニケーションパス用cookbookattributeファイルの編集

下記のパスにあるattributeファイルをエディタで開きます。


~/chef-repo/site-cookbooks/commpath/attributes/default.rb

このファイルにはコミュニケーションパスに関連する情報が記載されていますので、ファイルに記載されているノード名とIPアドレスを、新しく展開する先のノード名とIPアドレスに変更してください。この手順における定義を例にした場合、ノード名の変更として、node1と書かれている部分をすべてnode3に、node2と書かれている部分をnode4に変更します。また、IPアドレスについては、192.168.0.1とかかれている部分を192.168.0.3に、192.168.0.2と書かれている部分を192.168.0.4に変更します。


・リソース用cookbookattributeファイルの編集

下記のパスにあるattributeファイルをエディタで開きます。


~/chef-repo/site-cookbooks/resource/attributes/default.rb


このファイルには、リソース設定に関する情報が記載されています。そのため、コミュニケーションパス用のattributeファイルと同様に、ホスト名やIPアドレス(仮想IPアドレスも含む)などを展開先の状況に合わせて変更する必要があります。タグ名やリソース設定の内容については、展開先で違うタグ名にしたい場合や設定内容を変更する必要がある場合に、それに合わせて記述内容を変更してください。たとえば、IPリソースはデフォルトでは仮想IPアドレスがはいっています。リソースタグ名が仮想IPと一致している必要はないので展開前のタグ名のままでも作成できますが、基本的には仮想IPアドレスに合わせて変更したほうがいいでしょう。あるいは、タグ名を「VIP」などIPアドレスに依存しないようなものにしてしまうのもいいかもしれません。


cookbookの準備は以上で終了です。


cookbookアップロード

準備したcookbookChef WorkstationからChef Serverへアップロードします。

以下chefリポジトリの作業になりますので、最初にchef-repoに移動します。



$ cd ~/chef-repo


レシピ、アトリビュートが適切なディレクトリに存在していることを確認してから以下のコマンドを実行します。
 


knife cookbook upload クックブック名

LifeKeepercookbooklkinstall,commpath,resourceがセットですから、以下の様にコマンドを入力しChef Serverにアップロードします。


$ knife cookbook upload lkinstall

$ knife cookbook upload commpath

$ knife cookbook upload resource

アップロードする順番は特にありません。


!注意 recipeattributedefault.rbを編集する際、旧バージョンや、バックアップのファイルを同じディレクトリに入れておくと、Chefが間違ってレギュラーファイルと解釈し、展開が失敗する場合があります。default.rb以外のファイルは置かないようにしてください。


run list登録

アップロードしたcookbookをクライアントからの要求に応じて実行するよう、run listに登録をします。run listは次のようにコマンドを実行して登録をします。


knife node run_list add ノード名 'recipe['cookbook']'

run_listはバッチファイルのようなもの考えて下さい。登録した順番に実行します。そのため、手動でインストールする手順と同じ順序で実行するように登録する必要があります。そのため、必ず、lkinstallcommpathresourceの順番に登録してください。具体的な実行例は次の通りです。



$ knife node run_list add node3 'recipe['lkinstall']'

$ knife node run_list add node3 'recipe['commpath']'

$ knife node run_list add node3 'recipe['resource']'


あるいは、以下のように実行して1回のコマンドで登録することもできます。


$ knife node run_list set lkinstall commpath resource


次からは、Chefを使用して新しくHAクラスタノードを構築します。


◆展開先クラスタ(実際にリソース展開したいノード)での作業

■展開先クラスタノードの準備

展開先ノードにはchef-clientがインストールされている必要があります。これは左記のブログChef環境構築で実施済みです。

加えて、Chefサポート機能を使用して新規にHAクラスタを構成するノードには、LifeKeeperHAクラスタを構成するために必要なアプリケーションやネットワークなどの設定をあらかじめ行っておく必要があります。この設定は、基本的には展開元と同等の設定が行われている必要があります。特に、DataKeeperで使用するディスクのサイズ、デバイスID、マウントポイントなどは構成元と合わせてください。

chef-clientの実行

展開先クラスタでActiveノードとするノードで、Chef-clientコマンドを実行します。この手順の例の場合node3側で実行します。実行例は次の通りです。


# chef-client [Enter]




このコマンドを実行すると、run_listに登録された順番で全ての処理(lkinstall, commpath, resouce)が実行されます。また、以下のように実行すれば、特定のcookbookを指定して実行することも可能です


# chef-client -r cookbook [Enter]


問題がなければ、chef-clientコマンドの実行によって、LifeKeeperのインストールからリソース作成までがchefによって自動的に行われます。


しかし、事前に必要な準備に不足などがあると、インストールやリソース作成の処理でエラーとなりchef-clientによる自動処理は停止します。その時、何が原因で停止したかについては、標準出力に表示されますのでその内容を見て、ある程度把握できるようになっています。


エラーの原因としてよくある例として、環境に依存して必要なLifeKeeperの設定が不足している場合などが挙げられます。具体的にはIPリソースを作成する環境がブロードキャストPingを利用できない場合や、仮想環境でDataKeeperを利用する場合などです。このような場合には、LifeKeeperをインストールした後、リソースを作成する前にLifeKeeperの設定ファイルに必要な設定を入れておく必要があります。その場合、リソース作成に必要なLifeKeeperの設定をrun_listlkinstall実行後に手動で編集するか、LifeKeeperファイル編集用のcookbookを別に用意して、lkinstall後に実行するようにします。それぞれの具体的な操作例は次の通りです。


手動でLifeKeeperファイルを編集する場合

まず以下のように、LifeKeeperをインストールするcookbookだけを実行します。


# chef-client -r lkinstall [Enter]

lkinstallの処理が完了したら、手動でLifeKeeperの設定ファイル(/etc/default/Lifekeeper)を編集します。編集の操作例は次の通りです。

IPリソースの利用環境がブロードキャストに応答しない場合(NOBCASTPING有効化)


# sed -i s/NOBCASTPING=0/NOBCASTPING=1/ /etc/default/LifeKeeper


・仮想環境でDataKeeperを使用する場合(device_patternファイル修正)


# echo "/dev/sdx*" >> /opt/LifeKeeper/subsys/scsi/resources/DEVNAME/device_pattern

/opt/LifeKeeper LifeKeeperのインストールディレクトリです。

dev/sdxは使用するDataKeeperで保護するディスクのデバイスIDになります。たとえば、/dev/sdb1を使用する場合には”/dev/sdb*”としてください


必要な編集が完了したら、残りのcookbookを以下の順序で実行してください。


# chef-client -r commpath [Enter]

(処理が完了)

# chef-client -r resource [Enter]




LifeKeeperファイル編集用のcookbookを使用する場合


ファイル編集用のrecipeファイルのひな型をご用意しました。以下からダウンロードして内容を確認し、使用する環境に合わせて編集した上でcookbookrecipeとして使用してください

http://www.sios.com/ filedown/chef/customize.zip


このcustomize用のrecipeを使用するためには、customizecookbooklkinstallresourceなどと同様に別途作成します。結果として、4つのcookbookrun_listに登録されることになります。

作成したcustomize用のrecipeは、lkinstallの後に実行されるように登録します。登録が完了したら、以下のようにchef-clientコマンドを実行してください。



# chef-client [Enter]


問題がなければ自動的に、リソース作成までが行われるはずです。


なお、ここまでの内容に関連する情報が、以下のユーザーサイトにもありますので、合わせてご参照ください。



◆リソース階層の完成と起動

chef-clientコマンドが完了すると、DataKeeperリソースがActiveISP)、その他のリソースについては両ノードStandby(両ノードともOSU)で処理が完了します。

リソース階層の構成などに問題がないことを確認し、リソースをプライマリノード側でin-serviceを実行し、リソース階層の起動に問題がないことを確認してください。

DataKeeperの同期処理が完了したら、リソースの手動切り替えやフェイルオーバーをテストしてください。


Chefサポートを使用したLifeKeeperのインストールからリソース作成は以上です。

これに加えてChefの機能を使用して保護対象のアプリケーション準備のcookbookなどもご用意いただければ、アプリケーションからリソース設定までを一度に自動展開することが可能です。お試しいただければ幸いです。

0 件のコメント:

コメントを投稿