はじめに
仮想LB/ADCの登場によって、さくっとLB/ADCを立ち上げられるようになったのはうれしいけど、
例えばバックエンドのサーバ負荷が上がってきたから、サーバを追加してLB/ADCにも自動で設定を投入するとか、帯域使用量に応じてLB/ADCの割当帯域を自動で増減したいとか、運用面においても諸々さくっと自動でやって欲しいといった要望はよく聞かれます。
LB/ADC製品単体ではこうした要望に応えられないものの、自動化ツールにあやかればやれるんじゃないか…ということで、イベントドリブンな自動化ツールStackStormを用いて、Brocvade社の仮想LB製品 vTM(前身SteeplApp)に対する、自動化制御を試してみたいと思います。
実施内容
vTMの帯域使用率の上昇をトリガーとして、追加の帯域ライセンスをvTMに対して自動で割り当てる、
といった自動化制御を試してみたいと思います。
vTMには、Services Director(SD)という管理コントローラ的なコンポーネントが存在します。
SDではバルクで購入した帯域ライセンスを配下のvTMに割り当てたリ、vTMの帯域使用量や死活監視など、vTMの管理・運用操作を行うことができます。
今回はSDがvTMの帯域使用量を監視し、閾値を超えた場合にvTMに対して帯域ライセンスを割り当てる…といった処理を自動化してみたいと思います。
イメージ図は下記の通りです。
初期設定
前提として、StackStorm、vTM及びSDの構築・初期設定は完了しているものとします。
StackStormのインストール手順はこちら。
1. Packのインストール
StackStormでvTMに関するワークフローを定義するため、
Packと呼ばれるソフトウェアコンポーネントによって、機能拡張を行います。
Packは下記コマンドにより、github上からインストールします。
$ st2 run packs.installpacks=vadc
2. configファイルの作成
インストールしたvADC Packの設定を定義する為、configファイルを作成します。
configファイルには、SDのIPアドレスやログイン情報等を書き込みます。
/opt/stackstorm/configs/ディレクトリ下に新規で作成します。
$ cd /opt/stackstorm/configs/
$ vi vadc.yaml
---
brcd_sd_proxy: true
brcd_sd_host: "https://SDのIPアドレス:SDのREST API用ポート番号/"
brcd_sd_user: "SDのログインユーザ"
brcd_sd_pass: "SDのログインパスワード"
コンフィグ作成後、下記コマンドでリロードします。
$ st2ctl reload --register-configs
アクションを実行してみる
まずはStackStormとSD間でREST API経由での疎通が取れているか確認するため、
アクションを実行してみたいと思います。
"vadc.bsd_list_vtms"アクションにより、SD経由でvTMの一覧を取得してみます。
$ st2 action execute vadc.bsd_list_vtms
To get the results, execute:
st2 execution get 586f17ca770a34079d0172f1
$ st2 execution get 586f17ca770a34079d0172f1
id: 586f17ca770a34079d0172f1
status: succeeded (7s elapsed)
parameters: None
result:
exit_code: 0
result:
- bandwidth: 100
host_name: ''
name: Instance-6PNX-VEJP-DJLD-YH8N
status: Active
stm_feature_pack: STM-300
tag: vTM_57
- bandwidth: 50
host_name: ''
name: Instance-ARGM-FUNJ-IPIC-R492
status: Active
stm_feature_pack: STM-300
tag: vTM_56
ルールを実行してみる
StackStormとSD間で疎通が取れていることを確認できたので、
実際に自動化処理を行うためのルールを動作させてみたいと思います。
StackStormではトリガーとアクションの組合せにより、ルールを定義します。
vADC Packでは、トリガーとして下記2つのトリガーが用意されています。
- vadc.bsd_failure_event
- vadc.bsd_bandwidth_event
今回はトリガーとして、”vadc.bsd_bandwidth_event"を使います。
同トリガーによってvTMの帯域使用率を監視し、アクションとして"bsd_set_vtm_bandwidth"を使い、SDからvTMに対してライセンス割当設定を行います。
上記ルールは、あらかじめPack上で定義されていますので、今回はこちらを使用し、動作を確認したいと思います。
ルールの有効化手順は下記の通りです。
1. センサーの有効化
"vadc.bsd_bandwidth_event"トリガーを使うため、下記コマンドで同トリガーが定義されたセンサーを有効化します。
$ st2 sensor enable vadc.brcdBwSensor
vadc.brcdBwSensorが有効化されていることを確認します。
$ st2 sensor list
+-----------------------------------+----------+-------------------------------------------------------------+-------+
| ref | pack | description |enabled|
+-----------------------------------+----------+-------------------------------------------------------------+-------+
| linux.FileWatchSensor | linux | Sensor which monitors files for new lines | True |
| vadc.brcdBwSensor | vadc | Brocade SD Bandwidth Sensor | True |
| vadc.brcdSdSensor | vadc | Brocade Service Director Sensor | True |
+-----------------------------------+----------+-------------------------------------------------------------+-------+
2. ルールの編集
"vadc.bsd_bandwidth_modify"のルールを定義したファイルを修正し、各種パラメータを定義します。
修正箇所は下記のとおりです。
$ vi bsd_bandwidth_modify.yaml
---
name: "bsd_bandwidth_modify"
pack: "vadc"
description: "Realtime Bandwidth Updater for BSD"
enabled: false
trigger:
type: "vadc.bsd_bandwidth_event"
criteria:
trigger.action:
type: "greaterthan" #←修正
pattern: 80 #←修正(アクション実行の閾値を指定)
action:
ref: "vadc.bsd_set_vtm_bandwidth"
parameters:
vtm: "{{trigger.instance}}"
bw: "300" #←修正(増加後の値を指定、単位はMbps)
修正後、下記コマンドでリロードします。
$ st2ctl reload --register-rules
3. ルールの有効化
下記コマンドで"vadc.bsd_bandwidth_modify"ルールを有効化します。
$ st2 rule enable vadc.bsd_bandwidth_modify
vadc.bsd_bandwidth_modifyが有効化されていることを確認します。
$ st2 rule list
+-----------------------------------+----------+-----------------------------------------------------------+---------+
| ref | pack | description |enabled |
+-----------------------------------+----------+-------------------------------------------------------------+-------+
| vadc.bsd_bandwidth_alert | vadc | Realtime Bandwidth Alerts for BSD | False |
| vadc.bsd_bandwidth_modify | vadc | Realtime Bandwidth Updater for BSD | True |
| vadc.bsd_bandwidth_notify | vadc | Realtime Bandwidth Alerts for BSD | False |
| vadc.bsd_chatops | vadc | Send alert to ChatOps on BSD Monitor events | False |
| vadc.vtm_fail_maintenance | vadc | Enter maintenance mode when all nodes fail | False |
+-----------------------------------+----------+-------------------------------------------------------------+-------+
4. ルールの挙動確認
100Mの帯域が割り当てられたvTMに対して負荷をかけ、
使用帯域が80Mを超えた際にルールで指定した値(300M)に帯域が増加することを確認します。
StackStorm側でアクションが実行されていることを確認する
$ st2 execution list -ln3
+--------------------------+----------------------------+--------------+------------------------+-------------------------------+-------------------------------+
| id | action.ref | context.user | status | start_timestamp | end_timestamp |
+--------------------------+----------------------------+--------------+------------------------+-------------------------------+-------------------------------+
| 586f5706770a3402fcd1aff7 | vadc.bsd_set_vtm_bandwidth | stanley | succeeded (1s elapsed) | Fri, 06 Jan 2017 08:36:22 UTC | Fri, 06 Jan 2017 08:36:23 UTC |
| 586f570b770a3402fcd1affd | vadc.bsd_set_vtm_bandwidth | stanley | succeeded (2s elapsed) | Fri, 06 Jan 2017 08:36:27 UTC | Fri, 06 Jan 2017 08:36:29 UTC |
| 586f5738770a3402fcd1b019 | core.local | stanley | succeeded (1s elapsed) | Fri, 06 Jan 2017 08:37:12 UTC | Fri, 06 Jan 2017 08:37:13 UTC |
+--------------------------+----------------------------+--------------+------------------------+-------------------------------+-------------------------------+
$ st2 execution get 586f570b770a3402fcd1affd
id: 586f570b770a3402fcd1affd
status: succeeded (2s elapsed)
parameters:
bw: 300
vtm: Instance-ARGM-FUNJ-IPIC-R492
result:
exit_code: 0
result: null
stderr: ''
stdout: ''
さいごに
今回は仮想LB/ADCと自動化ツールの連携方法について取り上げました。
vADC Packでは今回取り合げたアクションの他にもいくつかのアクションが存在し、
それらを用いればVirtual Serverの設定やバックエンドサーバの登録・削除、
プールの作成・削除など、様々な処理を行うことができます。
次回以降、こうしたその他アクションとトリガーを連携させた場合も取り上げていきたいと思います。
当社ではソフトウェア関連取組みの一環として、クラウド型パフォーマンスモニタサービス「New Relic」を提供しています。詳しくはこちら。