Japan
サイト内の現在位置を表示しています。
Ansibleを用いたHAクラスターの自動構築を試してみました(Windows)
CLUSTERPRO オフィシャルブログ ~クラブロ~
はじめに
インフラの構築や運用などの作業を自動化する手段として、AnsibleやChef、Puppetなどの構成管理ツールの活用が近年進んできています。
今回は、AnsibleとCLUSTERPRO Xの設定ファイル作成ツール(CreateClusterOnLinux)を活用して、Amazon Web Services(以降、AWS)上にてHAクラスターの自動構築を試してみましたので、その環境と構築方法についてご紹介します。
この記事の内容
- 1. 自動構築ツールについて
- 1.1 Ansibleとは
- 1.2 CreateClusterOnLinuxとは
- 2. 構成
- 2.1 HAクラスター構成
- 2.2 CLUSTERPROの設定
- 2.3 Ansible Playbook
- 3. 事前準備
- 3.1 ファイルのダウンロード
- 3.2 ネットワークの構築
- 3.3 管理・クライアント用EC2インスタンスの作成
- 3.4 NAT用EC2インスタンスの作成
- 3.5 サーバー用EC2インスタンスの作成
- 3.6 Ansible実行環境の作成
- 4. 自動構築
- 4.1 環境に合わせたカスタマイズ
- 4.2 Ansibleの実行
- 5. 動作確認
- 5.1 CLUSTERPRO Xの確認
- 5.2 Webサービスへのアクセス
- 5.3 HAクラスターのフェイルオーバ
1. 自動構築ツールについて
1.1 Ansibleとは
Ansibleはオープンソースの構成管理ツールで、以下のような特徴があります。
- ・可読性が高いYAML言語で記述可能
- ・冪等性が保たれているため操作を複数回行っても結果が同じになる
- ・構築対象へのエージェントのインストールが不要
AnsibleではPlaybookという自動構築対象のサーバー情報を定義した構成ファイルを用いて、リモートでサーバーの設定を行います。
1.2 CreateClusterOnLinuxとは
CLUSTERPRO XによるHAクラスターの構築、および設定は、通常WebベースのCluster WebUIを使用しますが、自動構築を行う場合はこれらの設定を行うためのコマンドが必要となります。
GitHubのEXPRESSCLUSTERプロジェクトではCreateClusterOnLinuxのリポジトリでツールを公開しており、本ツールによりCluster WebUIを使用せずにコマンドベースでCLUSTERPRO Xの設定ファイルを作ることが可能となります。(EXPRESSCLUSTERはCLUSTERPROの海外販売ブランド名です)
CreateClusterOnLinuxはLinuxで動作し、実行ファイル名はclpcfsetとなっています。clpcfsetはオプションで渡されたパラメータに従ってクラスターの作成やサーバーの追加、グループリソース・モニタリソースの追加などをカレントディレクトリにあるCLUSTERPROの設定ファイル(clp.conf)に対して行います。
たとえばHAクラスターを構成するサーバーを追加するコマンド例は次の通りです。
(ホスト名"server-a"をプライオリティ0で追加する)
IISの起動停止を行うサービスリソースを追加するコマンド例は次の通りです。
("service-IIS"という名前のサービスリソースを"failover1"フェイルオーバグループに追加する)
$ clpcfset add rscparam "service" "service-IIS" "parameters/name" "World Wide Web 発行サービス"
(サービスリソースの「サービス名」パラメータにIISのサービス名を設定する)
実際に利用可能な設定ファイルを作成するためにはclpcfsetを設定項目の数だけ繰り返し実行する必要があります。本記事では2ノードのHAクラスターの設定ファイルを作成するためにclp_create_config.shというスクリプトを利用します。このclp_create_config.shは後述の「CLUSTERPRO X HAクラスター自動構築用Ansible Playbook(clp_playbook-202012.tar.gz)」に含まれています。
2. 構成
2.1 HAクラスター構成
今回は「VIP制御によるHAクラスター」を自動構築します。
本記事の自動構築ではネットワークおよびHAクラスターを構成するサーバーがすでに作成済みの環境を前提としています。「VIP制御によるHAクラスター」の詳細については、参考リンクを参照ください。
また、AWS環境は、CloudFormationを利用した自動構築が可能です。詳しくは、こちらのブログ記事を参照ください。
今回構築するHAクラスターの構成図は以下の通りです。
今回構築するVIP制御によるHAクラスターではAWS CLIの実行が必要となるため、エンドポイントとの通信を目的としてインターネットゲートウェイとNATインスタンスを追加しています。
アベイラビリティゾーンAのパブリックサブネット上には、CLUSTERPRO XおよびWebサービスの動作確認用のクライアントとなるWindows OSのインスタンス(Client)を作成します。また、Ansibleによる自動構築を実行するためのLinux OSのインスタンス(Manager(Ansible))も用意します。
AWS環境におけるHAクラスター構成の詳細は、以下の構築ガイドを参照ください。
- ソフトウェア構築ガイド > Amazon Web Services向けHAクラスタ構築ガイド
- ソフトウェア構築ガイド > Amazon Web Services向けHAクラスタ構築ガイド
2.2 CLUSTERPROの設定
構築するHAクラスターは以下の構成とします。
CLUSTERPRO Xは、CLUSTERPRO X 4.2 for Windowsを使用します。
作成するフェイルオーバグループ、グループリソースは次の通りとします。
フェイルオーバグループ名 | グループリソース名 | リソース種別 | 説明 |
---|---|---|---|
failover01 | awsvip-web | AWS 仮想IPリソース | VIP制御用 |
〃 | service-IIS | サービスリソース | Webサービス提供用 |
〃 | md-data | ミラーディスクリソース | Webサービスのデータミラーリング用 |
作成するモニタリソースは次の通りとします。
モニタリソース名 | リソース種別 | 説明 |
---|---|---|
awsvipw-web | AWS 仮想IP監視リソース | リソース awsvip-web の監視用 |
awsazw | AWS AZ監視リソース | アベイラビリティゾーン監視用 |
servicew-IIS | サービス監視リソース | Webサービス監視用 |
mdw-data | ミラーディスク監視リソース | ミラーディスク監視用 |
mdnw-data | ミラーコネクト監視リソース | ミラーリング用ネットワーク監視用 |
userw | ユーザ空間監視リソース | ユーザ空間のストール監視用 |
2.3 Ansible Playbook
本記事では、自動構築のために以下の機能を持つAnsible Playbook、およびロールを用意しています。
2.3.1 OSセットアップ用ロール
CLUSTERPRO Xを動作させるために必要なWindows OSの設定、およびソフトウェアのインストールを行います。
ロール名 | 機能 |
---|---|
OS_set_hostname | HAクラスター構成サーバーのホスト名変更 |
OS_register_hosts | hostsファイルへのHAクラスター構成サーバー名・IPの追加 |
OS_install_python | Python 3のダウンロード、インストール |
OS_install_awscli | AWS CLIのダウンロード、インストールおよび設定 |
OS_prepare_mirrordisk | ミラーディスクリソース用パーティション作成とフォーマット |
OS_install_IIS | IISのインストールと手動起動への変更、ドキュメントルートの変更 |
CLUSTERPRO_X_install | CLUSTERPRO Xのインストール |
CLUSTERPRO_X_register_license | CLUSTERPRO Xのライセンス登録 |
CLUSTERPRO_X_set_firewall | CLUSTERPRO Xが必要とするファイアウォールの許可設定 |
2.3.2 サーバー情報収集用ロール
OSセットアップ後の情報を収集し、CLUSTERPRO X用設定ファイルを作成するために必要な情報ファイル(inspects.txt)を作成します。
このinspects.txtは、clp_create_config.shが設定ファイルを作成する際の情報源として使用されます。
ロール名 | 機能 |
---|---|
CLUSTERPRO_X_inspects | 各サーバーのミラーディスク用パーティションのGUID取得 |
2.3.3 HAクラスター構築用ロール
情報ファイル(inspects.txt)をもとにCLUSTERPRO X用設定ファイル(clp.conf)を作成し、HAクラスター構成サーバーにインポートおよび設定の反映を行います。
その後クラスターを起動し、サービスを開始します。
ロール名 | 機能 |
---|---|
CLUSTERPRO_X_apply_config | CLUSTERPRO X用設定ファイルの各サーバーへのインポート、設定の反映 |
CLUSTERPRO_X_start_cluster | HAクラスターの起動 |
3. 事前準備
前述のとおり、CloudFormationを利用したAWS環境の自動構築手順を、こちらのブログ記事で紹介しています。
- ※以下の項目は自動構築されませんので、個別に実施してください。
- -「3.3 管理・クライアント用EC2インスタンスの作成」の管理用EC2インスタンスの作成
- -「3.5 サーバー用EC2インスタンスの作成」の「3.5.3 WinRMの許可設定」
3.1 ファイルのダウンロード
あらかじめ以下のファイルを用意します。
CLUSTERPRO Xは、「CLUSTERPRO X 4.2 for Windows」を使用します。
- ・CLUSTERPRO X インストーラ、ライセンスキー
- ・
CreateClusterOnLinux
(CreateClusterOnLinux-2.0.6.tar.gz) - ・
CLUSTERPRO X HAクラスター自動構築用 Ansible Playbook
(clp_playbook-202012.tar.gz)
3.2 ネットワークの構築
AWS環境に、「1. HAクラスター構成」の構成図および、以下の表を参考にVPCやサブネットなどを作成します。
また、インターネットゲートウェイ、ルートテーブル、セキュリティグループなどを適切に設定します。
VPC
名前 | CIDR | リージョン |
---|---|---|
VPC-A | 10.0.0.0/16 | ap-northeast-1 |
サブネット
サブネット名 | ネットワークアドレス | アベイラビリティゾーン | 説明 |
---|---|---|---|
Subnet-A1 | 10.0.10.0/24 | ap-northeast-1a | パブリックサブネット |
Subnet-C1 | 10.0.20.0/24 | ap-northeast-1c | パブリックサブネット |
Subnet-A2 | 10.0.110.0/24 | ap-northeast-1a | プライベートサブネット |
Subnet-C2 | 10.0.120.0/24 | ap-northeast-1c | プライベートサブネット |
ルートテーブル
送信先にはAWS 仮想IPリソースで使用する仮想IPアドレス(以降、VIP)を設定し、ターゲットにはサーバー用インスタンスにアタッチしたENI-IDを設定します。
(Server-A、Server-BどちらのENI-IDを設定しても問題ありません)
送信先 | ターゲット |
---|---|
<VIPのアドレス>/32 | eni-xxxxxxxxxxxxxxxxx |
3.3 管理・クライアント用EC2インスタンスの作成
AnsibleおよびCreateClusterOnLinuxを実行可能なLinuxインスタンス(Manager(Ansible))を作成します。
また、クライアント端末としてWindowsインスタンス(Client)も作成します。
ホスト名 | OS | サブネット | IPアドレス | 備考 |
---|---|---|---|---|
manager | CentOS 8.2 | Subnet-A1 | 10.0.10.xxx (DHCP自動設定) |
Ansible実行用 |
client | Windows Server 2019 | Subnet-A1 | 10.0.10.xxx (DHCP自動設定) |
リモートデスクトップ接続、Web動作確認用 |
クライアント用インスタンスのOSが英語版の場合、日本語化しておきます。
日本語化の手順は以前のブログを参照ください。
3.4 NAT用EC2インスタンスの作成
NATインスタンスを作成します。
AWS CLIによるVIP制御処理を実行するため、サーバー用EC2インスタンスからリージョンのエンドポイントに対する通信に使用します。
エンドポイントへの通信にProxyサーバーやNATゲートウェイなどを使用する方法もありますが、本記事ではNATインスタンスを使用します。
ホスト名 | OS | サブネット | IPアドレス |
---|---|---|---|
nat1 | Amazon Linux | Subnet-A1 | 10.0.10.xxx (DHCP自動設定) |
nat2 | Amazon Linux | Subnet-C1 | 10.0.20.xxx (DHCP自動設定) |
また、プライベートサブネット(Subnet-A2、Subnet-C2)に関連付けたルートテーブルに、NAT用インスタンスへのルーティングを追加します。
ルートテーブル
送信先 | ターゲット | 関連付けるサブネット |
---|---|---|
0.0.0.0/0 | nat-xxxxxxxxxxxxxxxxx (nat1のインスタンスID) |
Subnet-A2 |
0.0.0.0/0 | nat-yyyyyyyyyyyyyyyyy (nat2のインスタンスID) |
Subnet-C2 |
3.5 サーバー用EC2インスタンスの作成
3.5.1 EC2インスタンスの作成
HAクラスターを構成するサーバー用EC2インスタンス(2台)を以下の表の通り作成します。
ホスト名 | OS | サブネット | IPアドレス |
---|---|---|---|
server-a | Windows Server 2019 | Subnet-A2 | 10.0.110.100 |
server-b | Windows Server 2019 | Subnet-C2 | 10.0.120.100 |
サーバー用インスタンスのOSが英語版の場合、日本語化しておきます。
また、それぞれのインスタンスにはミラーディスクリソース用の2台目のディスクとして10GB以上のEBSを作成し、アタッチしておきます。
3.5.2 EC2インスタンスの追加設定
作成したサーバー用EC2インスタンスのそれぞれについて、以下の手順でソース/宛先チェックを無効化します。本設定を行わない場合、AWS仮想IPリソースによって設定されたVIP経由でのサーバー用インスタンスへのアクセスに失敗します。
- 1.AWS管理コンソールからインスタンスの一覧を表示
- 2.サーバー用インスタンスを選択し、[アクション]-[ネットワーキング]-[ソース/宛先チェックを変更]をクリック
- 3.「停止」にチェックを入れて「保存」ボタンをクリック
3.5.3 WinRMの許可設定
Ansibleの動作要件として、サーバー用インスタンスに接続し自動構築を行うためにWinRMをサーバー用インスタンスにインストールする必要があります。
リモートデスクトップでサーバー用インスタンスに接続します。
Windows PowerShellを管理者権限で起動します。(右クリックメニューの「その他」-「管理者として実行」)
セットアップスクリプトを実行します。
HAクラスターを構成する各サーバーに対して同様の設定を行います。
3.6 Ansible実行環境の作成
「3.3. 管理・クライアント用EC2インスタンスの作成」で作成したManager(Ansible)インスタンスについてAnsibleのセットアップを行います。
3.6.1 Ansible実行用パッケージのインストール
Manager(Ansible)インスタンスに接続し、Ansibleおよび、自動構築で必要なパッケージを追加インストールします。dnfコマンドのないLinuxディストリビューションの場合は、yumコマンドなどディストリビューションに応じた方法でインストールしてください。
$ sudo dnf install tar
$ sudo pip3 install ansible pywinrm
3.6.2 Ansible Playbookの展開
作業用ディレクトリ(work)を作成し、「2.1 ファイルのダウンロード」でダウンロードしたAnsible Playbookを展開します。
本項以降、事前にダウンロードして用意したファイルは全てユーザホームディレクトリ(~/)にあるものとします。
$ cd work
$ tar xzf ~/clp_playbook-202012.tar.gz
3.6.3 CreateClusterOnLinuxの配置
CreateClusterOnLinuxのファイルを展開し、clpcfsetコマンドをコピーします。
$ tar xzf ~/CreateClusterOnLinux-2.0.6.tar.gz
$ cp -p CreateClusterOnLinux-2.0.6/src/v2/clpcfset clpcfset
$ rm -rf CreateClusterOnLinux-2.0.6
3.6.4 インストーラなどのファイルの配置
ファイル転送用ディレクトリ(files/Windows)に、CLUSTERPRO X for Windowsのインストーラが含まれるx64ディレクトリをコピーします。
$ cp -pr x42w_x64/Windows/4.2/common/server/x64 files/Windows/
$ rm -rf x42w_x64
また、CLUSTERPRO Xのライセンスキー(*.key)をfiles/Windows配下にコピーします。
3.6.5 ファイル構成
ここまでの作業により、Manager(Ansible)上のファイル構成は以下の通りとなります。
+--- 1_setup_servers_os.yml サーバーOSセットアップ用Playbook
+--- 2_inspect_servers.yml サーバー情報収集用Playbook
+--- 3_make_cluster.yml HAクラスター構築・設定用Playbook
+--- clp_create_config.sh HAクラスター設定ファイル作成スクリプト(Playbook補助)
+--- clpcfset CreateClusterOnLinuxの実行ファイル
+--- files/ CLUSTERPRO Xのインストーラおよびライセンスキー配置用
| +--- Windows/
| +--- x64/ CLUSTERPRO Xのインストーラ一式
| +---*.key CLUSTERPRO Xのライセンスキー
+--- inventories/
| +--- hosts インベントリ(設定対象となるサーバーの指定)
| +--- group_vars/ インベントリ(サーバー共通のPlaybook設定)
| +--- all.yml
| +--- host_vars/ インベントリ(サーバー毎のPlaybook設定)
| +--- server-a.yml
| +--- server-b.yml
+--- roles/ CLUSTERPRO X 自動構築用 Ansible Playbookのロール群
+--- CLUSTERPRO_X_apply_config/ ※各ロール配下のファイルは省略
+--- CLUSTERPRO_X_inspects/
+--- CLUSTERPRO_X_install/
+--- CLUSTERPRO_X_register_license/
+--- CLUSTERPRO_X_set_firewall/
+--- CLUSTERPRO_X_start_cluster/
+--- OS_install_IIS/
+--- OS_install_awscli/
+--- OS_install_python/
+--- OS_prepare_mirrordisk/
+--- OS_register_hosts/
+--- OS_set_hostname/
4. 自動構築
4.1 環境に合わせたカスタマイズ
構築環境に合わせて各種ファイルを編集します。
「3.6.2 Ansible Playbookの展開」で作成したPlaybookの格納ディレクトリ(work/clp_playbook)直下で操作します。
適宜、ディレクトリに移動してください。
4.1.1 インベントリファイル、サーバー固有情報の設定
自動構築対象となるサーバーをインベントリファイルに登録します。
ここで記述したサーバー名は、Playbookの中でそのままWindows OSのホスト名、およびCLUSTERPRO Xが認識するサーバー名として使用されます。
hostsの記述例は以下の通りです。
server-aとserver-bを設定対象としています。
server-a
server-b
4.1.2 クラスター共通の設定
クラスター全体で共通の情報をロール変数として設定します。
inventories/group_vars/all.ymlの記述例は以下の通りです。
ロール変数の詳細は、Playbookに記載のREADMEファイルを参照ください。
# Ansible settings
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
# OS_register_hosts
VAR_host_list:
- ip: 10.0.110.100
name: server-a
- ip: 10.0.120.100
name: server-b
# OS_install_awscli
VAR_aws_default_region: ap-northeast-1
VAR_aws_access_key_id: ****
VAR_aws_secret_access_key: ****
# OS_prepare_mirrordisk
VAR_disk_number: 1
VAR_cluster_partition_letter: "E"
VAR_data_partition_letter: "F"
# CLUSTERPRO_X_register_licenses
VAR_CLUSTERPRO_X_licenses:
- trial_lcns_xxxxxx.key
- trial_lcns_yyyyyy.key
:
- trial_lcns_zzzzzz.key
# CLUSTERPRO_X_set_firewall
VAR_clp_servers:
- "{{ VAR_host_list[0].ip }}"
- "{{ VAR_host_list[1].ip }}"
VAR_clp_clients:
- any
VAR_clp_restapi_clients:
- any
VAR_clp_webui_clients:
- any
# VIP for application
VAR_clp_service_vip: 20.0.0.100
4.1.3 サーバー固有の設定
サーバーごとに異なる情報をロール変数として設定します。
$ vi inventories/host_vars/server-b.yml
inventories/host_vars/*.ymlの記述例は以下の通りです。
ロール変数の詳細は、Playbookに記載のREADMEファイルを参照ください。
ansible_host: 10.0.110.100
ansible_user: Administrator
ansible_password: '*********************'
VAR_clp_aws_vpc_id: vpc-nnnnnnnn
VAR_clp_aws_eni_id: eni-xxxxxxxxxxxxxxxxx
VAR_clp_aws_az: ap-northeast-1a
4.2 Ansibleの実行
4.2.1 OSのセットアップ
Windowsの設定(ホスト名の変更など)、およびCLUSTERPRO Xのインストールを行うPlaybookを実行します。Playbookの実行中に数回、OSの再起動が行われます。
4.2.2 サーバー情報の収集
CLUSTERPRO Xの設定ファイルを作成するために必要な情報を収集し、情報ファイル(inspects.txt)に保存するPlaybookを実行します。
Playbookの実行完了後、inspects.txtが作成されます。
4.2.3 HAクラスターの構築・起動
CLUSTERPRO Xの設定ファイルを作成し、HAクラスターを構成する各サーバーにインポート及び設定の反映をするPlaybookを実行します。
Playbookの実行が完了すると、HAクラスターが起動し、サービスを開始します。(実際にHAクラスターが起動完了し、サービスが使用可能になるまでには少々時間がかかります)
5. 動作確認
5.1 CLUSTERPRO Xの確認
Cluster WebUIで現用系サーバーに接続します。
クラスターのステータス画面から、サーバー、および、フェイルオーバグループや各リソース、モニタリソースが正常に起動していることを確認します。
5.2 Webサービスへのアクセス
次に、インスタンス(client)から、Webブラウザを使用して仮想IPアドレスにアクセスします。
成功すれば、Webページが表示されます。
本記事ではFドライブをミラーディスクのデータパーティションとしているため、Fドライブ直下にhtmlファイル(index.html)を置くことで、任意のWebページを表示できます。
5.3 HAクラスターのフェイルオーバ
Cluster WebUIで待機系サーバーに接続します。
Cluster WebUIのステータス画面から、現用系サーバーをシャットダウンします。
シャットダウンの実行後、しばらくするとフェイルオーバグループが待機系サーバーにフェイルオーバします。
サーバー、および、フェイルオーバグループや各リソース、モニタリソースが正常に起動していることを確認します。(ミラーディスク関連の監視リソースは警告状態になりますが問題ありません)
再度、インスタンス(client)でWebブラウザをリロードし、Webページが正常に表示されていることを確認します。
まとめ
今回はAnsibleとCreateClusterOnLinuxを使用して、AWS環境上にVIP制御方式によるIISのHAクラスターを自動構築しました。AnsibleとCreateClusterOnLinuxを使うことによって、サーバー毎に異なるパラメータを含めた設定作業全体を自動化できるため、設定に伴う人的ミスの抑制や作業の効率化が可能となります。
本記事の構成をご検討の際は、CLUSTERPROの試用版を用いて検証した後、ご提案・構築ください。