やりたいこと
IBM CloudのApplication Load Balancerのロードバランシングの方式のうち、Weighted Round Robin(重み付きラウンドロビン)を利用して、ロードバランシングの比重の変更をしてみます。重みづけを0にするとそのサーバーには接続が転送されなくなるので、これを利用して、業務時間外のサーバーへのアクセスをSorry Serverに振るようにすることなどが出来ます。
IBM Cloud Docsより
重みづけしたラウンドロビン
割り当てられた重みに比例して各インスタンスに要求を転送します。 例えば、インスタンスA、B、Cがあり、それぞれの重みが60、60、30に設定されている場合、インスタンスAとBは同数の接続を受け、インスタンスCは半分の接続を受ける。
想定される利用方法
業務時間9:00-17:00はサーバーA、業務時間外17:00-9:00はサーバーB(Sorry Server)に振り分けられるよう、時刻によって割り振りの比重を変える。
検証構成・用意するリソース
- Client PC
- Public ALB
- VSI
- 業務用サーバー
gyomuyo-vsi
- Sorryサーバー
sorry-vsi
- 業務用サーバー
手順
- ALBをオーダー
- 業務サーバーを想定してwebページを作成
- ALBのロードバランシング設定を変える
0. 準備
ALBからの割り当て先として2台のVSIをオーダーします。またVSIにSecurity groupを設定しておきます。こちらの詳細は省略します。
1. ALBをオーダー
IBM Cloud portalを開き、Infrastructure> Network> Load balancersからALBをオーダーします。
- Location: jp-tok
- Name: egawa-alb-kensyo
- subnet: tok-01,tok-02
- Type: Public
- DNS Type: Public
- Security group: Client PCを通すものに設定
Back-end pool等は3で設定するので一旦空欄で作成します。
2. 業務時間にアクセスされるサーバーを想定してwebページを作成
gyomuyo-vsi
を業務用サーバーと想定してwebページを準備しておきます。
Apacheをインストール
dnf -y install httpd
Apacheを起動
service httpd start
起動時にApacheも自動起動するよう設定
systemctl enable httpd
ステータスを確認
service httpd status
webページを作成
vi /var/www/html/index.html
表示するwebページをhtmlで記述
gyomuyo-vsi
のIPアドレスにアクセスしてみます。
同様にsorry-vsi
も準備します。
3. ALBのロードバランシング設定を変える
ALBのBack-end poolを作成
1でオーダーしたALBのBackend-poolを作成します。
Methodは"Weighted round robin"を選択します。
その他の項目はデフォルトのままで大丈夫です。
続いて、Backend-poolに含めるメンバーを追加します。
もう一度Attachをクリック
Backend-poolに追加するVSIを選択します。
"Weight"の値で、ALBからバックエンドプールの各メンバー(サーバー)へのロードバランシングの比重を設定します。重みづけは、0 から 100 までの範囲の任意の値を用いることができます。画像の通り、各サーバーの重みはデフォルトで50になっています。たとえばこれを0にするとそのサーバーには接続が転送されなくなります。
ALBのfront-end listenerを設定
ALB画面の"front-end listeners"を選択し作成をクリックします。
Back-end poolは作成したものを選択します。listner portを80に設定し、その他の項目はデフォルトのままにします。
Back-end poolとfront-end listenerが登録できたので、Client PCからALBのホストネームにアクセスしてみます。
業務用サーバーに接続されました。何度かリロードしてみると50:50の割合で2つのサーバーにアクセスしていることがわかります。
重みづけを変えてみる
続いて、重みをUIで変えてみます。
業務用サーバーを0、Sorryサーバーを1にしてみます。
Sorryサーバーにのみ振られるようになりました。
重みは以下のコマンドでも変更可能です。
ibmcloud is load-balancer-pool-member-update [backend pool ID] [memberA ID] --weight 1
ibmcloud is load-balancer-pool-member-update [backend pool ID] [memberB ID] --weight 0
参照:https://cloud.ibm.com/docs/cli?topic=cli-vpc-reference&locale=ja#load-balancer-pool-member-update
backend pool IDやmember IDは以下のコマンドで取得可能です
ibmcloud is load-balancer-pool [loadbalancer ID/name] [backendpool ID/name]
参照:https://cloud.ibm.com/docs/cli?topic=cli-vpc-reference&locale=ja#load-balancer-pool-view
APIも提供されているので、APIを呼び出すスクリプトを作成することで時刻に応じたアクセスの振り分けをするよう自動化するという使い方ができます。