タスク3: Ansible自動化を使用したプライマリおよびスタンバイのGGHubクラスタの構成
このタスクを完了するには、次のステップを実行します。
- ステップ3.1 - GGHub Ansibleインベントリ・ファイルの作成
- ステップ3.2 - Ansibleを使用したGGHubノードのSSH接続およびsudoアクセスの検証
- ステップ3.3 - Ansibleを使用したGGHubのデプロイおよび構成
- ステップ3.4 - GoldenGate Microservices接続の検証
- ステップ3.5 - NGINX SSL証明書の置換
ステップ3.1 - GGHub Ansibleインベントリ・ファイルの作成
Ansible自動化を使用したGGHubデプロイメントには、すべてのターゲットGGHubノード名およびGGHub構成に必要なパラメータを含むインベントリ・ファイルが必要です。
Ansibleプレイブックoracle.gghub.onboardingが実行され、Ansibleインベントリ・ファイルが生成されます。
oracle.gghub.onboardingプレイブックは、暗号化されたGoldenGate管理ユーザー・パスワードを安全に格納するようにAnsibleボールトを構成するため、必要に応じてAnsibleオーケストレーション・ステップ中にパスワードをセキュアかつシームレスに使用できます。
oracle.gghub.onboardingプレイブックでは、Ansibleボールト・パスワードとGoldenGate管理ユーザー・パスワードの入力を求められます。- Ansibleデプロイメント・オーケストレーションでは、初期GoldenGateインストールにシステム生成のGoldenGate管理パスワードを使用し、デプロイメントの最後にGoldenGate管理パスワードをユーザーが指定したパスワードに変更します。
- システム生成のGoldenGate管理パスワードとユーザー提供のGoldenGate管理パスワードはどちらも、暗号化された形式でAnsibleボールトに格納されます。
- Ansibleボールトには、Ansibleボールト・パスワードを使用してアクセスします。
表3.1-1 Ansibleインベントリ・ファイルのパラメータおよび値の説明
表26-3 Ansibleインベントリ・ファイルのパラメータおよび値
| Ansibleインベントリ・ファイルのプロンプトとパラメータ | 説明 |
|---|---|
| GoldenGateデプロイメント名 | ACFSおよびXAGクラスタウェア・リソース名でも使用されるデプロイメント名。名前は文字で始める必要があり、GoldenGateサービス・マネージャ名にすることはできません。名前で許可される特殊文字には、[ - _ / . ]が含まれます。 |
| GoldenGate oracleホーム | GGHubクラスタ・ノードのGoldenGateソフトウェア・ホーム。 |
| GoldenGateプライマリ・グループ | プライマリGGHubクラスタ・ノードおよび関連する変数を識別するためのAnsibleグループ名。この名前は、プライマリApp VIPクラスタウェア・リソース名の一部になります。 |
| GoldenGateプライマリ・グループ・ノード1 | プライマリ・クラスタ・ノード1のホスト名。Ansibleオーケストレーション・ホストは、この名前を使用してログインします。 |
| GoldenGateプライマリ・グループ・ノード2 | プライマリ・クラスタ・ノード2のホスト名。Ansibleオーケストレーション・ホストは、この名前を使用してログインします。 |
| GoldenGateプライマリAppVIP IPアドレス | プライマリ・クラスタのApp VIP。App VIPはパブリック・ネットワーク上にあり、DNSに登録する必要があります。 |
| プライマリASMディスク・グループ名 | ACFSファイル・システムの作成に使用されるプライマリ・クラスタのディスク・グループ名。ファイル・システム・サイズは、Ansibleインベントリ・ファイル・パラメータASM_vol_sizeによって定義されます(この表の下部にあるASM_vol_size行を参照)。 |
| GoldenGateスタンバイ・グループ | スタンバイGGHubクラスタ・ノードおよび関連する変数を識別するためのAnsibleグループ名。この名前は、スタンバイApp VIPクラスタウェア・リソース名の一部になります。 |
| GoldenGateスタンバイ・グループ・ノード1 | スタンバイ・クラスタ・ノード1のホスト名。Ansibleオーケストレーション・ホストは、この名前を使用してログインします。 |
| GoldenGateスタンバイ・グループ・ノード2 | スタンバイ・クラスタ・ノード2のホスト名。Ansibleオーケストレーション・ホストは、この名前を使用してログインします。 |
| GoldenGateスタンバイAppVIP IPアドレス | スタンバイ・クラスタのApp VIP。App VIPはパブリック・ネットワーク上にあり、DNSに登録する必要があります。 |
| スタンバイASMディスク・グループ名 | ACFSファイル・システムの作成に使用されるGGHubクラスタのディスク・グループ名。 |
| ACFSマウント・ポイント | ACFSマウント・ポイントのフルパス。このディレクトリは、存在しない場合に作成されます。プライマリとスタンバイの両方のGGHubクラスタで同じパスが使用されます。 |
| ローカル・ソフトウェア・リポジトリ・ディレクトリ | Ansibleオーケストレーション・ホスト上のソフトウェア・リポジトリ・ディレクトリのフルパス。 |
| ターゲット・マシンのリモート・ディレクトリ | GGHubクラスタ・ノード上のソフトウェア・ステージング・ディレクトリのフルパス。Ansible自動化では、このディレクトリがデプロイメント・プロセス中に存在しない場合は作成され、必要なソフトウェアがコピーされます。 |
| GoldenGateパッチ・ファイル名 | GoldenGateソフトウェアの完全インストール・パッチ・ファイル名。これは、Ansibleオーケストレーション・ホスト・ソフトウェア・リポジトリ・ディレクトリにコピーされます。 |
| XAGパッチ・ファイル名 | Oracle Grid Infrastructureスタンドアロン・エージェントのパッチ・ファイル名。これは、Ansibleオーケストレーション・ホスト・ソフトウェア・リポジトリ・ディレクトリにコピーされます。 |
| ターゲット・マシンのログイン・ユーザー | sudo権限を持つGGHubクラスタ・ノード上のGGHubオーケストレーションOSユーザー名。Ansibleオーケストレーション・ホストは、このOSユーザーを使用してGGHubクラスタ・ノードにログインします。 |
| ターゲット・マシンのansible_python_interpreter | GGHubクラスタ・ノードに存在するpythonインタプリタのフルパス(たとえば、/usr/bin/python3.12または/u01/app/oracle.ahf/common/venv/bin/python3.12)。GGHubターゲット・ノードpythonインタプリタは、3.12以降のバージョンである必要があります。Pythonバージョン3.12をお薦めします。 |
| Ansibleインベントリのフルパス |
Ansibleオーケストレーション・ホスト上のAnsibleインベントリ・ディレクトリのフルパス。 Ansibleボールト・ファイルおよびAnsibleインベントリ・ファイルは、Ansibleプレイブックの実行のオンボーディング中にこのディレクトリに作成されます。 |
| Ansibleボールトのパスワード | Ansibleボールトの構成およびアクセスに使用されるパスワード。パスワードは、少なくとも1つの小文字、1つの大文字および1つの数字を含む8文字から30文字の間にする必要があります。詳細は、この項の最初にあるAnsibleボールトの説明を参照してください。 |
| GoldenGateデプロイメントのパスワード | GoldenGateの初期インストールおよびデプロイメント後に設定されたGoldenGate管理パスワード。パスワードは8文字から30文字にする必要があります。パスワードには、少なくとも1つの小文字、1つの大文字、1つの数字、およびリスト[- ! @ % & * . # _]の1つの特殊文字が必要です。 |
GG_deployment_number |
Ansibleで複数のGGHubデプロイメントを管理する場合に使用されるデプロイメント番号
デフォルト: 1 |
GG_deployment_service_manager_port |
Webブラウザでサービス・マネージャにアクセスするために使用されるOracle GoldenGateサービス・マネージャのポート
デフォルト: 9100 |
GG_deployment_admin_user |
GGHubデプロイメントの管理ユーザー
デフォルト: oggadmin |
ASM_vol_size |
ACFSファイル・システムに使用されるASMボリュームのサイズ
デフォルト: 100 GB |
Ansibleプレイブックoracle.gghub.onboardingを使用してAnsibleインベントリ・ファイルを生成するには、2つの方法があります。推奨される方法は、この項で説明するAnsibleオンボーディング・プレイブックおよび回答プロンプトを実行することです。
レスポンス・ファイルを入力として使用する代替方法については、「デプロイメント用のAnsibleインベントリ・ファイルを生成する代替方法」を参照してください。
次の例に示すように、指定されたlocalhost Ansibleインベントリ・ファイルを使用して、Ansibleオーケストレーション・ホストのコレクション・ディレクトリからoracle.gghub.onboardingプレイブックを実行します。
$ source /u01/maagghub/venv/bin/activate
(gghub) [~]$ cd /u01/maagghub
(gghub) [~]$ ansible-playbook oracle.gghub.onboarding
-i /u01/maagghub/collections/ansible_collections/oracle/gghub/inventory/localhostExample output:
GoldenGate - Enter the GoldenGate deployment name: maahub
GoldenGate - Enter the GoldenGate ORACLE_HOME: /u01/app/oracle/goldengate/gg23ai
Primary - Enter the GoldenGate primary group: maahuba
Primary - Enter the GoldenGate primary group node 1 (Ansible will ssh using this name):
maahuba1
Primary - Enter the GoldenGate primary group node 2 (Ansible will ssh using this name):
maahuba2
Primary - Enter the GoldenGate primary APPVIP IP address: 10.53.240.11
Primary - Enter the ASM DiskGroup name: DATA
Standby - Enter the GoldenGate standby group: maahubb
Standby - Enter the GoldenGate standby group node 1 (Ansible will ssh using this name):
maahubb1
Standby - Enter the GoldenGate standby group node 2 (Ansible will ssh using this name):
maahubb2
Standby - Enter the GoldenGate standby APPVIP IP address: 10.53.240.12
Standby - Enter the ASM DiskGroup name: DATA
GGHUB - Enter the path for acfs mount point: /opt/oracle/gghub/maahub
Patch File - Enter the local software repository directory that stores software patches:
/u01/maagghub/stage
Patch File - Enter the remote directory in target machines for staging files:
/u01/oracle/stage
Patch File - Enter the GoldenGate patch file name:
p37777817_23802504OGGRU_Linux-x86-64.zip
Patch File - Enter the XAG patch file name: p31215432_190000_Generic.zip
Ansible - Sets the login user for the target machines: opc
Ansible - Sets the ansible_python_interpreter for the target machines: /usr/bin/python3.12
Ansible - Enter the Ansible inventory full path directory: /u01/maagghub/inventory
Password - Enter the password for Ansible Vault ([8=>length<=30][A-Z][a-z][0-9]):
confirm Password - Enter the password for Ansible Vault ([8=>length<=30][A-Z][a-z][0-9]):
Password - Enter the password for GoldenGate deployment ''
([8=>length<=30][A-Z][a-z][0-9][-!@%&*.#]):
confirm Password - Enter the password for GoldenGate deployment ''
([8=>length<=30][A-Z][a-z][0-9][-!@%&*.#]):オンボーディング・プレイブックは、Ansibleボールトを構成し、前述の2つの方法のいずれかを使用して実行すると、インベントリ・ディレクトリおよびAnsibleインベントリ・ファイルを作成します。
Ansibleを使用してGGHubデプロイメントを実行する前に、Ansibleインベントリ・ファイルを更新してパラメータ値を調整できます。
AnsibleボールトおよびデプロイメントのAnsibleインベントリ・ファイルを/u01/maagghub/inventory/ディレクトリで検証します。
(gghub) [~]$ ls /u01/maagghub/inventory/
maahub.yml
vault_pass
maahub.keyGGHubインベントリ構成ファイルの例:
(gghub) [~]$ cat /u01/maagghub/inventory/maahub.yml
gghservers:
children:
maahuba:
hosts:
maahuba1:
maahuba2:
vars:
appvip_ip_address: 10.53.240.11
asm_diskgroup: DATA
ansible_python_interpreter: /u01/app/oracle.ahf/common/venv/bin/python3.12
ansible_user: opc
maahubb:
hosts:
maahubb1:
maahubb2:
vars:
appvip_ip_address: 10.53.240.12
asm_diskgroup: DATA
ansible_python_interpreter: /u01/app/oracle.ahf/common/venv/bin/python3.12
ansible_user: opc
vars:
gg_deployment_name: maahub
gg_deployment_number: 1
gg_deployment_service_manager_port: 9100
gg_deployment_admin_user: oggadmin
gg_hub_groups: maahuba,maahubb
acfs_name: maahub
acfs_mount_point: /opt/oracle/gghub/maahub
asm_vol_size: 100G
gg_oracle_home: /u01/app/oracle/goldengate/gg23ai
gg_patch_file: p37777817_23802504OGGRU_Linux-x86-64.zip
xag_patch_file: p31215432_190000_Generic.zip
stage_dir_local: /u01/maagghub/stage
stage_dir_remote: /u01/oracle/stage
ansible_inventory_dir: /u01/maagghub/inventoryステップ3.2 - Ansibleを使用したGGHubクラスタ・ノードのSSH接続およびsudoアクセスの構成および検証| SSH接続元 | SSH接続先 | 用途 |
|---|---|---|
Ansibleオーケストレーション・ホスト上のAnsibleオーケストレーション・ユーザー(ansibleなど)
|
各GGHubクラスタ・ノードのGGHubオーケストレーション・ユーザー( このユーザーは、 |
AnsibleがGGHubノードに接続して、インストール、設定および管理コマンドを実行するには、必要に応じてroot、gridまたはoracleとして実行します。
|
次のAnsibleコマンドを実行して、Ansibleオーケストレーション・ホストからGGHubノードへのssh接続をテストし、GGHubノードに対するsudo権限も検証します。
(gghub) [~]$ ansible gghservers -i /u01/maagghub/inventory/maahub.yml -m command
-a 'sudo date'前述のAnsibleコマンドは、この例のインベントリ・ファイルmaahub.ymlのgghserversグループで指定されたすべてのGGHubホストから、日付出力およびリターン・コード0を返す必要があります。
プライマリ・クラスタおよびスタンバイ・クラスタでMAA GoldenGateハブを構成およびデプロイするには、oracle.gghub.deploy Ansibleプレイブックを実行します。Ansibleデプロイ・プレイブックは、各GGHubクラスタに1つのVIPとサービス・マネージャのペアを構成します。
oracle.gghub.deployプレイブックは、プライマリおよびスタンバイのGGHubクラスタで次のタスクを実行します:
- 前提条件チェックの実行
- Oracle GoldenGateソフトウェアのインストール
- プライマリとスタンバイのGGHubクラスタ間のACFSファイル・システムとACFSレプリケーションの構成
- APP VIPのクラスタウェア・リソースの作成
- Oracle GoldenGateデプロイメントの作成
- Oracle Grid Infrastructure Agent (XAG)の構成
- NGINXリバース・プロキシの構成およびNGINXクラスタウェア・リソースの作成
- GoldenGate Microservicesの保護による、セキュアでない直接アクセスの制限
Ansibleインベントリ・ファイルを使用して、次のようにoracle.gghub.deployプレイブックを実行します:
(gghub) [~]$ ansible-playbook oracle.gghub.deploy
-i /u01/maagghub/inventory/maahub.yml -e @/u01/maagghub/inventory/maahub.key
--ask-vault-passoracle.gghub.deployプレイブックでは、Ansibleボールト・パスワードの入力を求められ、すべての構成情報が表示され、デプロイメントを続行するための確認を求められます。
GGHubデプロイメント・プレイブックの例の出力
Vault password:
PLAY [Play for deploying GGHUB] *******************************************************
TASK [Gather server default minimum amount of facts] **********************************
ok: [maahuba1]
TASK [oracle.gghub.oracle_meta : Assert GoldenGate deployment password] ***************
ok: [maahuba1] => {
"changed": false,
"msg": "All assertions passed"
}
TASK [Show GoldenGate Deployment] *****************************************************
<snip>
[Confirm GGHUB deployment variables]
Are you sure you want to continue with the GGHUB deployment (yes/no):
<snip>
PLAY RECAP *******************************************************************************************************
maahuba1 : ok=233 changed=121 unreachable=0 failed=0 skipped=65 rescued=0 ignored=0
maahuba2 : ok=139 changed=47 unreachable=0 failed=0 skipped=145 rescued=0 ignored=0
maahubb1 : ok=180 changed=85 unreachable=0 failed=0 skipped=104 rescued=0 ignored=0
maahubb2 : ok=139 changed=48 unreachable=0 failed=0 skipped=145 rescued=0 ignored=0GGHubデプロイメント・プレイブックの実行では、プレイブックの実行の最後に表示されるAnsible PLAY RECAPサマリーに"失敗した"タスクは表示されません。"ok, changed"および"skipped"のタスク数は、環境および再試行によって異なる場合があります。
デプロイメントが完了すると、oracle.gghub.verifyプレイブックが自動的に実行され、GGHubデプロイメント構成情報が表示されます。
デプロイメント中に問題が発生した場合、または構成を削除する必要がある場合は、「Ansibleを使用したGGHubデプロイメントのトラブルシューティング」を参照してください。
ステップ3.4 - GoldenGate Microservices接続の検証最初のGGHubノードのroot OSユーザーとして、次のcurlコマンドを使用して、マイクロサービス接続を検証します。コマンドにより、oggadminデプロイメント・パスワードの入力が求められます。
[root@gghub_prim1 ~]# vi access.cfg
user = "oggadmin"
[root@gghub_prim1 ~]# curl --insecure --user oggadmin -svf
-K access.cfg https://<vip_name.FQDN>:<port#>/services/v2/config/health
-XGET && echo -e "\n*** Success"
Sample output:
Enter host password for user 'oggadmin':
* Connected to maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com (10.53.240.11)
port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
...
* Server certificate:
* subject: C=GE; ST=San Francisco; L=California; O=Oracle; OU=Oracle MAA;
CN=maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com
* start date: Nov 16 14:04:18 2025 GMT
* expire date: Nov 16 14:04:18 2026 GMT
* issuer: C=US; L=San Francisco; O=Oracle; OU=Oracle MAA;
CN=maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com; basicConstraints=CA:true
* SSL certificate verify result: self signed certificate in certificate chain (19),
continuing anyway.
* Server auth using Basic with user 'oggadmin'
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> GET /services/v2/config/health HTTP/1.1
> Host: maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com
> Authorization: Basic b2dnYWRtaW46V0VsY29tZTEyM19f
> User-Agent: curl/7.61.1
> Accept: */*
...
<
{"$schema":"api:standardResponse","links":[{"rel":"canonical","href":
"https://maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com/services/v2/config/health",
"mediaType":"application/json"},{"rel":"self","href":
"https://maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com/services/v2/config/health",
"mediaType":"application/json"},{"rel":"describedby","href":
"https://maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com/services/ServiceManager/v2/metadata-catalog/health",
"mediaType":"application/schema+json"}],"messages":[],"response":{"$schema":"ogg:health",
"deploymentName":"ServiceManager","serviceName":"ServiceManager","started":
"2025-11-13T20:25:30.321Z","healthy":true,"criticalResources":[{"deploymentName":
"ServiceManager","name":"ServiceManager","type":"service","status":"running",
"healthy":true},{"deploymentName":"ServiceManager","name":"pluginsrvr","type":"service",
"status":"stopped","healthy":true},{"deploymentName":"maahub","name":"adminsrvr","type":
"service","status":"running","healthy":true},{* Connection #0 to host
maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com left intact
"deploymentName":"maahub","name":"distsrvr","type":"service","status":"running","healthy":
true},{"deploymentName":"maahub","name":"recvsrvr","type":"service","status":"running",
"healthy":true}]}}
*** Successノート:
自己署名SSL証明書を使用している環境では、curlコマンドにフラグ--insecureを追加することで、エラー"NSS error -8172 (SEC_ERROR_UNTRUSTED_ISSUER)"を回避します。
次のサブステップに従って、Ansible自動化によって編成されたデプロイメントのNGINX SSL証明書およびキー・ファイルを置き換えます。
- ステップ3.5.1 - NGINX構成の検証
- ステップ3.5.2 - デプロイメントのNGINX構成ファイルの識別
- ステップ3.5.3 - 証明書およびキー・ファイルのコピー
- ステップ3.5.4 - NGINX構成ファイルの更新
- ステップ3.5.5 - NGINX構成のリロードおよび検証
ノート:
NGINXコマンドは、GGHubクラスタ・ノードで特権ユーザーとして実行する必要があります。次のコマンドを使用して、NGINX構成を検証します:
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulステップ3.5.2 - デプロイメントのNGINX構成ファイルの識別GGHubデプロイメントの場合、NGINX構成ファイルはディレクトリ/etc/nginx/conf.d/の下にあり、構成ファイル名は標準のogg_<GG_DEPLOYMENT_NAME>.confに従います。
NGINX構成ファイルの場所も、/etc/nginx/nginx.confファイルで指定されます。
この例では、GGHubデプロイメントのNGINX構成ファイル名はogg_maahub.confです。
# ls /etc/nginx/conf.d/
ogg_maahub.confステップ3.5.3 - 証明書およびキー・ファイルのコピーGGHub NGINX構成ファイルを表示し、サーバー・ブロックのssl_certificateおよびssl_certificate_keyパラメータ値をメモします:
# view /etc/nginx/conf.d/ogg_maahub.conf
server {
listen 443 ssl;
listen [::]:443 ssl;
proxy_read_timeout 600s;
proxy_buffer_size 16k;
proxy_buffers 8 16k;
server_name maahuba-app-vip1.clientsubnet.vcnfraans1.oraclevcn.com;
ssl_certificate /etc/nginx/ssl/maahuba-app-vip1.chained.pem;
ssl_certificate_key /etc/nginx/ssl/maahuba-app-vip1.key;認証局(CA)から証明書ファイルおよび対応する秘密キー・ファイルを受け取る必要があります(例: your_domain.crtおよびyour_domain.key)。CAがCAバンドルまたは中間証明書を提供した場合は、次のガイドラインに従って必ずチェーン証明書を作成してください。
CA署名付き証明書を使用する場合、ssl_certificate NGINXパラメータで指定した証明書には、1) CA署名付き証明書、2)中間証明書および3)ルート証明書を単一ファイルに含める必要があります。この順序は重要です。そうしていないと、NGINXの起動は失敗して、エラー・メッセージが表示されます。
(SSL: error:0B080074:x509 certificate routines: X509_check_private_key:key values mismatch)
チェーン証明書を使用する場合は、ファイル拡張子として.pemを使用します。この拡張機能は、1つのファイルに複数の証明書を追加するときに一般的に使用され、GoldenGateユーザー・ガイドで参照されます。
証明書(チェーン証明書)および秘密キー・ファイルを、NGINX構成ファイルから指定された/etc/nginx/ssl/ディレクトリにコピーします。
NGINX構成ファイルを編集し、ssl_certificateおよびssl_certificate_keyパラメータ値を更新して、新しい証明書およびキー・ファイルを使用します。
NGINX構成を検証し、GGHubクラスタ・ノードでNGINXサービスをリロードします。
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# systemctl reload nginx
# systemctl status nginx.serviceGGHubクラスタの2番目のノードでこのステップを繰り返します。
変更後のGoldenGate Microservices接続を検証するには、ステップ3.4を実行します。