はじめに
前回までで、1台構成の場合の負荷分散設定をAnsible
で行ってみましたが、今回はAnsible
で2台構成で冗長設定を行ってみようと思います。
- 【前】BIG-IP Virtual Editionを使ってみる。(その5:Ansibleによる負荷分散設定)
- 【次】BIG-IP Virtual Editionを使ってみる。(その7:Ansibleによる冗長化設定)
BIG-IPの冗長化設定
BIG-IP LTM
で冗長設定を行う場合、以下の様な設定を行う必要があります。
- Device Connectivityの設定
- Trust Domainの設定
- Device Groupの設定
- HA Groupの設定
- Traffic Groupの設定
上記のうち、1、4、5は冗長構成をとる機器全て、2~3はマスターとなる機器で設定を行います。
今回の構成
今回は以下の様なネットワーク構成の設定を行っていきます。
前準備:概要
今回は冗長化の設定を行うため、冗長化の設定を行う前に以下の前準備を行っておきます。
- 1台目のVLAN割り当て解除
- 2台目のBIG-IPの準備
- bigip_setup-initconfの修正
- 2台目用ホスト変数ファイルの作成
- HA通信用インタフェースの追加
- ノード設定ロールをマスター側機器のみで実行するように変更
- プール設定ロールをマスター側機器のみで実行するように変更
- バーチャルサーバ設定ロールをマスター側機器のみで実行するように変更
後ほど行うBIG-IP
のHA Group
設定を行うためにはTrunk
(リンクアグリゲーション)の設定を行う必要がありますが、すでにインタフェースにVLANが割り当てられていると、Trunk
設定時にVLAN
の割り当てができないため、前回の記事でVLAN
をインタフェースに割り当てている場合は割り当てを外します。
また、前回作成した負荷分散用設定は、冗長化設定を行う場合、最終的にマスター側機器から同期される設定となるため、バックアップ側機器では設定しないようにロールを編集します。
前準備1:インタフェースとVLANの割り当て解除
インタフェース1.1に割り当てたVLAN名external
とインタフェース1.2に割り当てたVLAN名internal
の割り当てを解除するにはBIG-IP
から以下コマンドで解除できます。
tmsh modify net vlan external interfaces delete { 1.1 }
tmsh modify net vlan internal interfaces delete { 1.2 }
前準備2:2台目のBIG-IPの準備
2台目用に仮想マシンのセットアップやライセンスなどを準備して作成しておきましょう。
また、マネジメントポートのIPアドレスですが、冗長化設定完了直後やDevice Group
のメンバーが存在しないような状況の場合、マネジメントポートのIPアドレスが大きいアドレスのホストがActive
として選ばれるため、2号機には1号機よりも小さい数のIPアドレスを割り当てるのが良いと思います。
とはいえ、冗長化設定を行った後、Device Group
の機器が同時に落ちたりすることも少ないと思いますので、特に気にしないようなら任意のアドレス設定で問題ありません。
前準備3:bigip_setup-initconfの修正
以前の記事で設定を入れ忘れていたので、bigip_setup-initconf
にallow_service
の設定項目を追加しておきます。
allow_service
の設定は、Port Lockdown
という設定を行う定義となり、BIG-IP
のセルフIPへの受信側アクセスを制御するセキュリティ設定となります。
独自に許可するプロトコルを設定することもできますが、全許可設定のAllow All
、全拒否設定のAllow None
(デフォルト)、一部通信のみ許可するAllow Default
があります。
セルフIPは負荷分散用のアドレスとは異なり、BIG-IP
自身のアドレスとなるため、通常はデフォルトの全拒否設定で問題ありませんが、後述する冗長化の制御用通信も拒否してしまうため、設定追加を行います。
尚、Allow Default
設定の場合、以下の通信が許可されます。
「K17333: Overview of port lockdown behavior (12.x - 16.x)」
許可プロトコル | ポート | サービス名 |
---|---|---|
IGMP | - | - |
OSPF | - | - |
PIM | - | - |
TCP | 4353 | iQuery |
UDP | 4353 | iQuery |
TCP | 443 | HTTPS |
TCP | 161 | SNMP |
UDP | 161 | SNMP |
TCP | 22 | SSH |
TCP | 53 | DNS |
UDP | 53 | DNS |
UDP | 520 | RIP |
UDP | 1026 | network failover |
以下のロールの設定と、ホスト変数も修正しておきます。
(抜粋)
- name: BIG-IP Self IPの作成
bigip_selfip:
name: "{{ item.name }}"
address: "{{ item.address }}"
netmask: "{{ item.netmask }}"
vlan: "{{ item.vlan }}"
allow_service: "{{ item.allow_service }}" ←追加
state: "present"
provider: "{{ bigip_provider }}"
delegate_to: "{{ bigip_delegate_to }}"
notify: save_config
loop: "{{ bigip_selfip }}"
(抜粋)
bigip_selfip:
- { name: "10.1.0.1", address: "10.1.0.1", netmask: "255.255.255.0", vlan: "external", allow_service: "none" }
- { name: "10.2.0.1", address: "10.2.0.1", netmask: "255.255.255.0", vlan: "internal", allow_service: "none" }
前準備4:2台目用ホスト変数ファイルの作成
1台目のホスト変数ファイルを参考に2台目用のホスト変数ファイルを作成します。
---
bigip_license: XXXXX-XXXXX-XXXXX-XXXXX-XXXXXXX
bigip_server: [BIG-IPのIPアドレス]
bigip_fqdn: bigip02.example.com
bigip_selfip:
- { name: "10.1.0.2", address: "10.1.0.2", netmask: "255.255.255.0", vlan: "external", allow_service: "none" }
- { name: "10.2.0.2", address: "10.2.0.2", netmask: "255.255.255.0", vlan: "internal", allow_service: "none" }
前準備5:HA通信用インタフェース追加
コンフィグ同期や冗長監視などで使用するHA通信用インタフェースをホスト変数ファイルのbigip_selfip
の変数を指定した個所に追加しておきます。
HA通信用のインタフェースで、冗長制御用の通信をやり取りするので、HA通信用のセルフIPはallow_service
をデフォルトにしておきます。
(抜粋)
bigip_selfip:
- { name: "10.1.0.1", address: "10.1.0.1", netmask: "255.255.255.0", vlan: "external", allow_service: "none" }
- { name: "10.2.0.1", address: "10.2.0.1", netmask: "255.255.255.0", vlan: "internal", allow_service: "none" }
- { name: "10.3.0.1", address: "10.3.0.1", netmask: "255.255.255.252", vlan: "ha", allow_service: "default" }
(抜粋)
bigip_selfip:
- { name: "10.1.0.2", address: "10.1.0.2", netmask: "255.255.255.0", vlan: "external", allow_service: "none" }
- { name: "10.2.0.2", address: "10.2.0.2", netmask: "255.255.255.0", vlan: "internal", allow_service: "none" }
- { name: "10.3.0.2", address: "10.3.0.2", netmask: "255.255.255.252", vlan: "ha", allow_service: "default" }
前準備6:負荷分散設定用ロールにフラグ追加
前回作成したsetup_bigip-node
、setup_bigip-pool
、setup_bigip-virtual-server
のtasks
に以下の条件式を追加しておきます。
(途中省略)
when: ha_flag == "master"
以下setup_bigip-node
にha_flag
を追加した場合の例なので、他のロールにも追加するようにして下さい。
---
# tasks file for setup_bigip-node
- name: BIG-IP 負荷分散ノードの作成
bigip_node:
name: "{{ item.name }}"
description: "{{ item.description }}"
host: "{{ item.host }}"
monitors: "{{ item.monitors }}"
ratio: "{{ item.ratio }}"
connection_limit: "{{ item.connection_limit }}"
rate_limit: "{{ item.rate_limit }}"
state: "present"
provider: "{{ bigip_provider }}"
delegate_to: "{{ bigip_delegate_to }}"
when: ha_flag == "master" ←追加
notify: save_config
loop: "{{ bigip_node }}"
後ほど変数を追加しますが、上記設定追加により、ha_flag
がmaster
の場合のみ処理が実行されるようになります。(いわゆるif文のような動作)
おわりに
今回は、冗長設定を行う前の準備を行いました。
次回は冗長化設定を行うためのロール作成を行っていきます。