タスク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/localhost
Example 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.key

GGHubインベントリ構成ファイルの例:

(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接続元 SSH接続先 用途
Ansibleオーケストレーション・ホスト上のAnsibleオーケストレーション・ユーザー(ansibleなど)

各GGHubクラスタ・ノードのGGHubオーケストレーション・ユーザー(opcなど)

このユーザーは、rootユーザーに対する特権アクセス(su/sudo)を持っている必要があります。これは、Ansibleインベントリ・ファイルでparameteransible_userとして指定されます。

AnsibleがGGHubノードに接続して、インストール、設定および管理コマンドを実行するには、必要に応じてrootgridまたは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を返す必要があります。

ステップ3.3 - Ansibleを使用したプライマリ・クラスタおよびスタンバイ・クラスタへのGGHubのデプロイ

プライマリ・クラスタおよびスタンバイ・クラスタで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-pass

oracle.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=0

GGHubデプロイメント・プレイブックの実行では、プレイブックの実行の最後に表示される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)"を回避します。
ステップ3.5 - NGINX SSL証明書の置換

次のサブステップに従って、Ansible自動化によって編成されたデプロイメントのNGINX SSL証明書およびキー・ファイルを置き換えます。

  • ステップ3.5.1 - NGINX構成の検証
  • ステップ3.5.2 - デプロイメントのNGINX構成ファイルの識別
  • ステップ3.5.3 - 証明書およびキー・ファイルのコピー
  • ステップ3.5.4 - NGINX構成ファイルの更新
  • ステップ3.5.5 - NGINX構成のリロードおよび検証

ノート:

NGINXコマンドは、GGHubクラスタ・ノードで特権ユーザーとして実行する必要があります。
ステップ3.5.1 - NGINX構成の検証

次のコマンドを使用して、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/ディレクトリにコピーします。

ステップ3.5.4 - NGINX構成ファイルの更新

NGINX構成ファイルを編集し、ssl_certificateおよびssl_certificate_keyパラメータ値を更新して、新しい証明書およびキー・ファイルを使用します。

ステップ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

# systemctl reload nginx
# systemctl status nginx.service

GGHubクラスタの2番目のノードでこのステップを繰り返します。

変更後のGoldenGate Microservices接続を検証するには、ステップ3.4を実行します。