附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
Provision an Oracle Exadata Database Service on Cloud@Customer Virtual Machine Cluster with Ansible
簡介
This tutorial explains how to use the OCI Ansible collection to provision Oracle Exadata Database Service on Cloud@Customer virtual machine (VM) clusters.若要在 Cloud@CustomerOracle Exadata Database Service on Cloud@Customer VM 叢集上建立 Oracle Exadata Database Service,必須先建立對應的 VM 叢集網路。
目標
- Provision an Oracle Exadata Database Service on Cloud@Customer VM cluster network and VM cluster using Ansible.
必要條件
-
提供 Oracle Exadata Database Service on Cloud@Customer 基礎架構的 Oracle Cloud Infrastructure (OCI) 帳戶。
-
SSH 金鑰組。
-
已正確安裝並設定具有下列元件的控制節點。
- Ansible。
- OCI Ansible 集合。
- Oracle Cloud Infrastructure 命令行介面 (OCI CLI)。
如需詳細資訊,請參閱搭配 Oracle Cloud Infrastructure 使用 Ansible 的先決條件。
作業 1:建立存貨
-
連線至正確設定的 Ansible 控制節點。
-
使用下列內容建立名稱為
inventory_exacc.yml
的產品目錄檔案。localhost ansible_connection=local
工作 2:建立變數檔案
建立名為 variables_exacc.yml
的變數檔案,其中包含下列內容中描述的所有變數。
# Your variables file
your_region: "eu-frankfurt-1" # The OCI region where your resources will reside - This parameter is optional
your_exa_infra_id: "ocid1.exadatainfrastructure.oc1.eu-frankfurt-1.xxx" # The OCI of your Exadata infrastructure
## Variables related to your VM cluster network
your_vm_net_comp_id: "ocid1.compartment.oc1..xxx" # The compartment OCID of your VM cluster network
your_vm_net_name: "my_vm_cluster_network_name" # The display name of your VM cluster network
your_vm_net_dns: "10.109.10.2" # The list of your DNS server IP addresses. Maximum of 3 allowed.
your_vm_net_ntp: "10.109.10.3" # The list of your NTP server IP addresses. Maximum of 3 allowed.
your_vm_net_scan_ips: ["203.101.10.123", "203.101.10.124", "203.101.10.125"] # The list of your SCAN IP addresses. Three addresses should be provided.
your_vm_net_scan_listener_port_tcp: "1521" # Your SCAN TCPIP port. Default is 1521.
### Variables related to your CLIENT network
your_cli_nodes_hostname_1: "your_1st_hostname" # The hostname of your 1st node on the CLIENT network
your_cli_nodes_ip_1: "203.101.10.101" # The IP address of your 1st node on the CLIENT network
your_cli_nodes_vip_hostname_1: "your_1st_hostname-vip" # The node virtual IP (VIP) host name of your 1st node on the CLIENT network
your_cli_nodes_vip_1: "203.101.10.102" # The node virtual IP (VIP) address of your 1st node on the CLIENT network
your_db_server_ocid_1: "ocid1.dbserver.oc1.eu-frankfurt-1.xxx" # The Db server OCID associated with your 1st node on the CLIENT network
your_cli_nodes_hostname_2: "your_2nd_hostname" # The hostname of your 2nd node on the CLIENT network
your_cli_nodes_ip_2: "203.101.10.103" # The IP address of your 2nd node on the CLIENT network
your_cli_nodes_vip_hostname_2: "your_2nd_hostname-vip" # The node virtual IP (VIP) host name of your 2nd node on the CLIENT network
your_cli_nodes_vip_2: "203.101.10.104" # The node virtual IP (VIP) address of your 2nd node on the CLIENT network
your_db_server_ocid_2: "ocid1.dbserver.oc1.eu-frankfurt-1.yyy" # The Db server OCID associated with your 2nd node on the CLIENT network
your_cli_vm_net_vlan_id: "123" # Your CLIENT network VLAN ID
your_cli_vm_net_netmask: "your_client_netmask" # Your CLIENT network netmask
your_cli_vm_net_gateway: "your_client_gateway_ip" # Your CLIENT network gateway
your_cli_vm_net_domain_name: "your_client_network_domain_name" # Your CLIENT network domain name
### Variables related to your BACKUP network
your_bck_nodes_hostname_1: "your_1st_hostname-bk" # The hostname of your 1st node on the BACKUP network
your_bck_nodes_ip_1: "10.108.10.3" # The IP address of your 1st node on the BACKUP network
your_bck_nodes_hostname_2: "your_2nd_hostname-bk" # The hostname of your 2nd node on the BACKUP network
your_bck_nodes_ip_2: "10.108.10.4" # The IP address of your 2nd node on the BACKUP network
your_bck_vm_net_vlan_id: "456" # Your BACKUP network VLAN ID
your_bck_vm_net_netmask: "your_backup_netmask" # Your BACKUP network netmask
your_bck_vm_net_gateway: "your_backup_gateway_ip" # Your BACKUP network gateway
your_bck_vm_net_domain_name: "your_backup_network_domain_name" # Your BACKUP network domain name
## Variables related to your VM cluster
your_vm_cluster_comp_id: "ocid1.compartment.oc1..yyy" # The compartment OCID of your VM cluster
your_vm_cluster_name: "my_vm_cluster_name"
your_vm_clus_ssh_public_keys: [ "ssh-rsa AAAAB3NzaC...qScP4xMPQ9L5xWsqs" ]
your_license_model: "LICENSE_INCLUDED" # The Oracle license model that applies to the VM cluster. The default is BRING_YOUR_OWN_LICENSE.
作業 3:建立啟動設定 VM 叢集網路的手冊
-
使用下列內容建立名為
playbook_exacc_vmCluster_network_creation.yml
的手冊檔案。- hosts: localhost collections: - oracle.oci vars_files: - variables_exacc.yml tasks: - name: Create VM cluster network oci_database_vm_cluster_network: region: "{{ your_region }}" compartment_id: "{{ your_vm_net_comp_id }}" exadata_infrastructure_id: "{{ your_exa_infra_id }}" display_name: "{{ your_vm_net_name }}" dns: "{{ your_vm_net_dns }}" ntp: "{{ your_vm_net_ntp }}" scans: - hostname: "{{ your_vm_clus_name }}-scan" ips: "{{ your_vm_net_scan_ips }}" scan_listener_port_tcp: "{{ your_vm_net_scan_listener_port_tcp }}" vm_networks: - network_type: CLIENT nodes: - hostname: "{{ your_cli_nodes_hostname_1 }}" ip: "{{ your_cli_nodes_ip_1 }}" vip_hostname: "{{ your_cli_nodes_vip_hostname_1 }}" vip: "{{ your_cli_nodes_vip_1 }}" db_server_id: "{{ your_db_server_ocid_1 }}" - hostname: "{{ your_cli_nodes_hostname_2 }}" ip: "{{ your_cli_nodes_ip_2 }}" vip_hostname: "{{ your_cli_nodes_vip_hostname_2 }}" vip: "{{ your_cli_nodes_vip_2 }}" db_server_id: "{{ your_db_server_ocid_2 }}" vlan_id: "{{ your_cli_vm_net_vlan_id }}" netmask: "{{ your_cli_vm_net_netmask }}" gateway: "{{ your_cli_vm_net_gateway }}" domain_name: "{{ your_cli_vm_net_domain_name }}" - network_type: BACKUP nodes: - hostname: "{{ your_bck_nodes_hostname_1 }}" ip: "{{ your_bck_nodes_ip_1 }}" vip_hostname: "{{ your_bck_nodes_vip_hostname_1 }}" vip: "{{ your_bck_nodes_vip_1 }}" db_server_id: "{{ your_db_server_ocid_1 }}" - hostname: "{{ your_bck_nodes_hostname_2 }}" ip: "{{ your_bck_nodes_ip_2 }}" vip_hostname: "{{ your_bck_nodes_vip_hostname_2 }}" vip: "{{ your_bck_nodes_vip_2 }}" db_server_id: "{{ your_db_server_ocid_2 }}" vlan_id: "{{ your_bck_vm_net_vlan_id }}" netmask: "{{ your_bck_vm_net_netmask }}" gateway: "{{ your_bck_vm_net_gateway }}" domain_name: "{{ your_bck_vm_net_domain_name }}" wait: true register: new_vmClusterNetwork
請注意,作業關鍵字
register
,在呼叫模組oci_database_vm_cluster_network
的結尾:表示模組的輸出將在new_vmClusterNetwork
變數中註冊。此變數將包含新建立之 VM 叢集網路的所有詳細資訊,包括其 OCID。注意:此教學課程的每個網路類型只有兩個節點字典,因為基礎 Exadata 基礎架構包含兩個
db servers
。若要建立含有四或八個節點的 VM 叢集,必須為每個網路類型提供足夠的節點字典數目。 -
在手冊
playbook_exacc_vmCluster_network_creation.yml
中,新增下列作業以擷取新建立之 VM 叢集網路的 OCID。- name: Get OCID of newly created VM cluster network set_fact: your_vm_net_ocid: "{{ item.id }}" loop: - "{{ new_vmClusterNetwork.vm_cluster_network }}" loop_control: label: "{{ item.display_name }}"
-
在手冊
playbook_exacc_vmCluster_network_creation.yml
中,新增下列工作來驗證新建立的 VM 叢集網路,以及下載其組態。- name: Validate VM cluster network oci_database_vm_cluster_network_actions: exadata_infrastructure_id: "{{ your_exa_infra_id }}" vm_cluster_network_id: "{{ your_vm_net_ocid }}" region: "{{ your_region }}" action: validate - name: Download network configuration file of VM cluster network oci_database_vm_cluster_network_actions: exadata_infrastructure_id: "{{ your_exa_infra_id }}" vm_cluster_network_id: "{{ your_vm_net_ocid }}" action: download_vm_cluster_network_config_file config_file_dest: "/tmp/net_config_my_vm_cluster_network.json" region: "{{ your_region }}"
-
在手冊
playbook_exacc_vmCluster_network_creation.yml
中,新增下列作業,以在進行驗證之後顯示新建立之 VM 叢集網路的詳細資訊。- name: Get facts of newly created VM cluster network oci_database_vm_cluster_network_facts: exadata_infrastructure_id: "{{ your_exa_infra_id }}" vm_cluster_network_id: "{{ your_vm_net_ocid }}" region: "{{ your_region }}" register: newly_created_VM_cluster_network_facts - name: Display details of newly created VM cluster network debug: msg : "{{ newly_created_VM_cluster_network_facts.vm_cluster_networks }}"
作業 4:執行手冊以啟動設定 VM 叢集網路
-
使用詳細資訊選項執行 VM 叢集網路建立手冊。
ansible-playbook playbook_exacc_vmCluster_network_creation.yml -i inventory_exacc.yml -vvv
注意:使用詳細選項
-vvv
將會增加詳細程度,並協助您瞭解執行手冊時的所有相關步驟。 -
在幾分鐘之後,成功執行
oci_database_vm_cluster_network
模組應該會傳回下列輸出。changed: [localhost] => { [...], "vm_cluster_network": { "compartment_id": "ocid1.compartment.oc1..xxx", "defined_tags": { "Oracle-Tags": { "CreatedBy": "creation_user", "CreatedOn": "2025-01-09T09:30:30.631Z" } }, "display_name": "my_vm_cluster_network_name", "dns": [ "10.109.10.2" ], "dr_scans": null, "exadata_infrastructure_id": "ocid1.exadatainfrastructure.oc1.eu-frankfurt-1.xxx", "freeform_tags": {}, "id": "ocid1.vmclusternetwork.oc1.eu-frankfurt-1.xxx", "lifecycle_details": null, "lifecycle_state": "REQUIRES_VALIDATION", "ntp": [ "10.109.10.3" ], "scans": [ { "hostname": "name_of_your-scan", "ips": [ "203.101.10.123", "203.101.10.124", "203.101.10.125" ], "port": 1521, "scan_listener_port_tcp": 1521, "scan_listener_port_tcp_ssl": 2484 } ], "time_created": "2025-01-09T09:30:30.818000+00:00", "vm_cluster_id": null, "vm_networks": [ { "domain_name": "your_client_network_domain_name", "gateway": "your_client_gateway_ip", "netmask": "your_client_netmask", "network_type": "CLIENT", "nodes": [ { "db_server_id": "ocid_of_your_1st_db_server", "hostname": "your_1st_hostname", "ip": "203.101.10.101", "lifecycle_state": "REQUIRES_VALIDATION", "vip": "203.101.10.102", "vip_hostname": "your_1st_hostname-vip" }, { "db_server_id": "ocid_of_your_2nd_db_server", "hostname": "your_2nd_hostname", "ip": "203.101.10.103", "lifecycle_state": "REQUIRES_VALIDATION", "vip": "203.101.10.104", "vip_hostname": "your_2nd_hostname-vip" } ], "vlan_id": "123" }, { "domain_name": "your_backup_network_domain_name", "gateway": "your_backup_gateway_ip", "netmask": "your_backup_netmask", "network_type": "BACKUP", "nodes": [ { "db_server_id": "ocid_of_your_1st_db_server", "hostname": "your_1st_hostname-bk", "ip": "10.108.10.3", "lifecycle_state": "REQUIRES_VALIDATION", }, { "db_server_id": "ocid_of_your_2nd_db_server", "hostname": "your_2nd_hostname-bk", "ip": "10.108.10.4", "lifecycle_state": "REQUIRES_VALIDATION", } ], "vlan_id": "456" } ] } }
作業 5:建立啟動設定 VM 叢集的手冊
-
使用下列內容建立名為
playbook_exacc_vmCluster_creation.yml
的手冊檔案。- hosts: localhost collections: - oracle.oci vars_files: - variables_exacc.yml tasks: - name: Get all existing VM cluster networks oci_database_vm_cluster_network_facts: exadata_infrastructure_id: "{{ your_exa_infra_id }}" compartment_id: "{{ your_vm_net_comp_id }}" region: "{{ your_region }}" register: get_all_vmClusterNetworks - name: Get OCID of the newly created VM cluster network set_fact: your_vm_net_ocid: "{{ item.id }}" loop: "{{ get_all_vmClusterNetworks.vm_cluster_networks }}" loop_control: label: "{{ item.display_name }}" when: item.display_name == your_vm_net_name
這 2 項作業是用來擷取新建立 VM 叢集網路的 OCID,因為建立 VM 叢集將會需要此 OCID。
-
在手冊
playbook_exacc_vmCluster_creation.yml
中新增 VM 叢集建立作業。- name: Create VM cluster oci_database_vm_cluster: region: "{{ your_region }}" compartment_id: "{{ your_vm_cluster_comp_id }}" display_name: "{{ your_vm_cluster_name }}" exadata_infrastructure_id: "{{ your_exa_infra_id }}" vm_cluster_network_id: "{{ your_vm_net_ocid }}" gi_version: "19.0.0.0.0" cpu_core_count: "4" ssh_public_keys: "{{ your_vm_clus_ssh_public_keys }}" time_zone: "Europe/Zurich" memory_size_in_gbs: "60" db_node_storage_size_in_gbs: "120" data_storage_size_in_tbs: "2" license_model: "{{ your_license_model }}" is_sparse_diskgroup_enabled: "false" is_local_backup_enabled: "false" data_collection_options: is_diagnostics_events_enabled: "false" is_health_monitoring_enabled: "false" is_incident_logs_enabled: "false" wait: true wait_timeout: 18000
請注意,
gi_version
參數目前接受的值為19.0.0.0.0
和23.0.0.0.0
。否則,將會發生下列錯誤:Cannot create VM cluster because Oracle Grid Infrastructure version is invalid. Valid versions are: [19.0.0.0.0, 23.0.0.0.0].
注意:建立 VM 叢集通常最多需要 3 個小時。這就是程式碼中新增
wait: true
和wait_timeout: 18000
指示的原因。
作業 6:執行手冊以啟動設定 VM 叢集
-
使用詳細資訊選項執行 VM 叢集建立手冊。
ansible-playbook playbook_exacc_vmCluster_creation.yml -i inventory_exacc.yml -vvv
注意:使用詳細選項
-vvv
將會增加詳細程度,並協助您瞭解執行手冊時的所有相關步驟。 -
在幾分鐘之後,成功執行模組
oci_database_vm_cluster
應傳回下列輸出。changed: [localhost] => { [...], "vm_clusters": [ { "availability_domain": "your_availability_domain", "compartment_id": "ocid1.compartment.oc1..yyy", "cpus_enabled": 4, "data_collection_options": { "is_diagnostics_events_enabled": false, "is_health_monitoring_enabled": false, "is_incident_logs_enabled": false }, "data_storage_size_in_gbs": null, "data_storage_size_in_tbs": 2.0, "db_node_storage_size_in_gbs": 120, "db_servers": [ "ocid1.dbserver.oc1.eu-frankfurt-1.xxx", "ocid1.dbserver.oc1.eu-frankfurt-1.yyy" ], "defined_tags": { "Oracle-Tags": { "CreatedBy": "creation_user", "CreatedOn": "2025-01-09T12:40:17.201Z" } }, "display_name": "my_vm_cluster_name", "exadata_infrastructure_id": "ocid1.exadatainfrastructure.oc1.eu-frankfurt-1.xxx", "file_system_configuration_details": [ { "file_system_size_gb": 15, "mount_point": "/" }, [...], { "file_system_size_gb": 16, "mount_point": "swap" } ], "freeform_tags": {}, "gi_software_image_id": null, "gi_version": "19.24.0.0.0", "id": "ocid1.vmcluster.oc1.eu-frankfurt-1.xxx", "is_local_backup_enabled": false, "is_sparse_diskgroup_enabled": false, "last_patch_history_entry_id": null, "license_model": "your_license_model", "lifecycle_details": null, "lifecycle_state": "AVAILABLE", "memory_size_in_gbs": 60, "ocpus_enabled": null, "shape": "your_ExadataCC_shape", "ssh_public_keys": null, "system_version": "24.1.6.0.0.241115", "time_created": "2025-01-09T12:40:17.256000+00:00", "time_zone": "Europe/Zurich", "vm_cluster_network_id": "your_newly_created_vmCluster_network_OCID" } ] }
作業 7:建立檢查新建立之 VM 叢集狀態的手冊
使用下列內容建立名為 playbook_exacc_vmCluster_post_creation_checks.yml
的手冊檔案。
- hosts: localhost
collections:
- oracle.oci
vars_files:
- variables_exacc.yml
tasks:
- name: Get newly created vmCluster facts
oci_database_vm_cluster_facts:
region: "{{ your_region }}"
compartment_id: "{{ your_vm_cluster_comp_id }}"
exadata_infrastructure_id: "{{ your_exa_infra_id }}"
display_name: "{{ your_vm_cluster_name }}"
register: output_cluster_facts
- name: Set vmCluster facts
set_fact:
your_vm_cluster_id: "{{ item.id }}"
your_vm_cluster_state: "{{ item.lifecycle_state }}"
loop: "{{ output_cluster_facts.vm_clusters }}"
loop_control:
label: "{{ item.display_name }}"
when: item.display_name == your_vm_cluster_name
- name: Check VM cluster state
debug:
msg: "The VM cluster your_vm_cluster_name is in lifecycle state your_vm_cluster_state ."
作業 8:執行手冊以檢查新建立之 VM 叢集的狀態
-
使用詳細資訊選項執行 VM 叢集檢查手冊。
ansible-playbook playbook_exacc_vmCluster_post_creation_checks.yml -i inventory_exacc.yml -vvv
注意:使用詳細選項
-vvv
將會增加詳細程度,並協助您瞭解執行手冊時的所有相關步驟。 -
在幾秒鐘之後,成功執行手冊
playbook_exacc_vmCluster_post_creation_checks.yml
會傳回下列輸出。ok: [localhost] => { "msg": "The VM cluster your_vm_cluster_name is in lifecycle state AVAILABLE." }
相關連結
認可
- 授權者 - Flora Barriele (EMEA Cloud Lift 導入技術主管 - 資料庫)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Provision an Oracle Exadata Database Service on Cloud@Customer Virtual Machine Cluster with Ansible
G27487-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.