#[SoftLayerクッキングLABO] (http://qiita.com/MahoTakara/items/464da29ccf932698b753)
このクックブックで実現すること
SoftLayerで提供される パフォーマンス・ストレージ や エンデュランス・ストレージは、iSCSI プロトコルを利用してサービスが提供されます。このクックブックは、仮想サーバーや物理サーバーの設定をおこない、iSCSIのユーザー認証からブロック・ストレージのマウントするまでを実施します。
iSCSIストレージを利用するケースでは、アクティブ・スタンバイの構成の共有ディスクとして利用する事が多いため、このクックブックでも、アクティブ側とスタンバイ側の設定を選択できます。
クックブック要約
この iscsiStorage01 クックブックは、次の箇条書きの項目を実施します。
- open-iscsi、マルチパスのモジュールの導入
- SCSIイニシエーター名の設定
- iscsid.confの認証設定
- iscsiデバイスのディスカバリー
- WWID の取得
- マルチパスとデバイスの設定
- fstabに対してマウント・ポイントの追加
- マウント・ポイントのディレクトリ作成
- マスターノードであればマウント実行
このクックブックは、attribute の ["iscsi_host"]設定により、次の図の様な、アクティブ側とスタンバイ側の設定が実施できます。
レシピの置き場所
最新版のクックブックは次のURLにあります。
対応するソフトレイヤー活用ガイド
このレシピを利用することで、以下の設計パターンや設定作業を自動化することができます。
- [コンフィグレーション・ガイド 1.6 ストレージの種類と選択] (https://www.change-makers.jp/post/10312)
- [コンフィグレーション・ガイド 1.6.6 パフォーマンス・ストレージを利用するには?] (https://www.change-makers.jp/post/10318)
- [コンフィグレーション・ガイド 1.6.7 エンデュランス・ストレージを利用するには?] (https://www.change-makers.jp/post/10319)
テスト済みのLinuxディストリビューション
こちらのURL https://github.com/takara9/iscsiStorage01/の README.md に記載しています。
クックブックの説明
iSCSIストレージの準備
このレシピを実行する前に、パフォーマンス・ストレージ、または、エンデュランス・ストレージ を確保しておく必要があります。例えば、ブロック・ストレージのリストの中に以下の様に表示されている必要があります。
slcli コマンドでは、次の様な状態になっている必要があります。
chef@ChefWs:~$ slcli iscsi list
:.........:............:......:.................:..................:.............:
: id : datacenter : size : username : password : server :
:.........:............:......:.................:..................:.............:
: 6429159 : tok02 : 20GB : IBM01SL289550-1 : - : 10.3.78.55 :
:.........:............:......:.................:..................:.............:
iSCSIストレージにアクセスを許可するサーバーの指定は、slcliコマンドに実装されていないので、カスタマーポータルから実施します。
メニューバーから「Storage」->「Block Storage」->「Lun Name」を選択して以下の画面を表示します。 そして、赤枠のリンクをクリックして、「Authorized Hosts」の欄に、アクセスを許可するサーバーを追加します。 アクティブ・スタンバイ構成を組むのであれば、2台分のサーバーをセットします。
後ほど、このスクリーンコピーの黄色の吹き出し部分の値を拾って、attributes/default.rbのファイルにセットしていきます。
クックブックのファイル
このクックブックに必要なファイルは、以下のディレクトリ・ツリーに表す様に3本です。次の実行結果は不要部分を省略しています。
$ tree iscsiStorage01/
iscsiStorage01/
├── CHANGELOG.md
├── README.md
├── attributes
│ └── default.rb <-- (1) iSCSIストレージの認証などの情報(パラメータ)
├── recipes
│ └── default.rb <--- (2) レシピ本体
└── templates
└── default
└── iscsid.conf.erb <--- (3) iscsiデーモンの設定ファイル
(1) iSCSIストレージの認証などの情報(パラメータ)
このファイル attributes/default.rb は、iSCSIストレージを設定するためのパラメータです。 以下の(A)〜(D)までは必須設定項目です。それ以外の項目は、必要に応じて変更できます。
default["iscsi_target_ipaddr"] = "(A)ターゲットIPアドレス"
default["iscsi_user_name"] = "(B)サーバー毎に付与されるユーザー名"
default["iscsi_user_password"] = "(C)ユーザー名に対応するパスワード"
default["initiator_name"] = "(D)イニシエータを識別する名前 Host IQN"
default["multipath_device"]["name1"] = "/dev/mapper/iscsimp1" <--- マルチパスデバイスの名前
default["multipath_device"]["mount1"] = "/data1" <--- 上記デバイスのマウントポイント
default["iscsi_host"] = 'master' <--- "master"とすればマウントまで実行、"backup"ではデバイスの認識まで実施
(2) レシピ本体
レシピ本体のコードは、GitHub の https://github.com/takara9/iscsiStorage01/blob/master/recipes/default.rb を参照ねがいます。 処理のブロック単位でコメントを書いていますので、コメントを追えば何をしているか判るようになっています。
(3) iscsiデーモンの設定ファイル
iscsidの設定ファイルをテンプレートファイルで置き換えます。 以下の抜粋部分の様に、iSCSIストレージのユーザー名とパスワードに置き換えます。
このユーザー名とパスワードは、アトリビュートの以下の項目からセットされます。
- default["iscsi_user_name"] = "(B)サーバー毎に付与されるユーザー名"
- default["iscsi_user_password"] = "(C)ユーザー名に対応するパスワード"
省略
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = <%= @username %>
node.session.auth.password = <%= @password %>
省略
# To set a discovery session CHAP username and password for the initiator
# authentication by the target(s), uncomment the following lines:
discovery.sendtargets.auth.username = <%= @username %>
discovery.sendtargets.auth.password = <%= @password %>
省略
適用手順と確認方法
GitHUB https://github.com/takara9/iscsiStorage01 のREADME.md を参照ねがいます。
Chef 関連マニュアル
このレシピを作るにあたって参照したCHEFマニュアルのリンクです。
- script (https://docs.chef.io/resource_script.html )
- execute (https://docs.chef.io/resource_execute.html )
- package (https://docs.chef.io/resource_package.html )
- About the Recipe DSL (https://docs.chef.io/dsl_recipe.html#about-the-recipe-dsl )
- About Ohai (https://docs.chef.io/ohai.html )
- ruby_block (https://docs.chef.io/resource_ruby_block.html)
- directory (https://docs.chef.io/resource_directory.html)
- mount (https://docs.chef.io/resource_mount.html)
- template (https://docs.chef.io/resource_template.html)