TR-4986:使用 iSCSI 在Amazon FSx ONTAP上简化、自动化 Oracle 部署
Allen Cao、Niyaz Mohamed, NetApp
该解决方案提供了在Amazon FSx ONTAP中自动部署和保护 Oracle 的概述和详细信息,其中 Amazon FSx ONTAP 是使用 iSCSI 协议作为主数据库存储,而 Oracle 数据库则在独立 ReStart 中配置,并使用 Oracle asm 作为卷管理器。
目的
Amazon FSx ONTAP是一种存储服务,允许您在 AWS 云中启动和运行完全托管的NetApp ONTAP文件系统。它提供NetApp文件系统熟悉的功能、性能、能力和 API,以及完全托管的 AWS 服务的灵活性、可扩展性和简单性。它使您能够安心地在 AWS 云中运行最苛刻的数据库工作负载,例如 Oracle。
本文档演示了使用 Ansible 自动化在Amazon FSx ONTAP文件系统中简化 Oracle 数据库的部署。 Oracle 数据库部署在独立的 ReStart 配置中,使用 iSCSI 协议进行数据访问,使用 Oracle ASM 进行数据库存储磁盘管理。它还提供有关使用NetApp SnapCenter UI 工具备份、恢复和克隆 Oracle 数据库的信息,以便在 AWS 云中进行存储高效的数据库操作。
此解决方案适用于以下用例:
-
在Amazon FSx ONTAP文件系统上自动部署 Oracle 数据库
-
使用NetApp SnapCenter工具在Amazon FSx ONTAP文件系统上备份和恢复 Oracle 数据库
-
使用NetApp SnapCenter工具在Amazon FSx ONTAP文件系统上克隆用于开发/测试或其他用例的 Oracle 数据库
受众
此解决方案适用于以下人群:
-
想要在Amazon FSx ONTAP文件系统上部署 Oracle 的 DBA。
-
一位数据库解决方案架构师想要在Amazon FSx ONTAP文件系统上测试 Oracle 工作负载。
-
一位存储管理员想要在Amazon FSx ONTAP文件系统上部署和管理 Oracle 数据库。
-
希望在Amazon FSx ONTAP文件系统上建立 Oracle 数据库的应用程序所有者。
解决方案测试和验证环境
该解决方案的测试和验证是在实验室环境中进行的,可能与最终部署环境不匹配。请参阅部署考虑的关键因素了解更多信息。
架构
硬件和软件组件
硬件 |
||
Amazon FSx ONTAP存储 |
AWS 提供的当前版本 |
同一 VPC 和可用区中的一个 FSx HA 集群 |
用于计算的 EC2 实例 |
t2.xlarge/4vCPU/16G |
两个 EC2 T2 xlarge EC2 实例用于并发部署 |
软件 |
||
红帽Linux |
RHEL-8.6,4.18.0-372.9.1.el8.x86_64 内核 |
部署 RedHat 订阅进行测试 |
Windows Server |
2022 标准版,10.0.20348 内部版本 20348 |
托管SnapCenter服务器 |
Oracle 网格基础设施 |
19.18 版 |
已应用RU补丁p34762026_190000_Linux-x86-64.zip |
Oracle 数据库 |
19.18 版 |
已应用RU补丁p34765931_190000_Linux-x86-64.zip |
Oracle OPatch |
版本 12.2.0.1.36 |
最新补丁 p6880880_190000_Linux-x86-64.zip |
SnapCenter 服务器 |
版本 4.9P1 |
工作组部署 |
打开 JDK |
版本 java-1.8.0-openjdk.x86_64 |
数据库虚拟机上的SnapCenter插件要求 |
实验室环境中的 Oracle 数据库配置
服务器 |
数据库 |
数据库存储 |
ora_01 |
NTAP1(NTAP1_PDB1、NTAP1_PDB2、NTAP1_PDB3) |
Amazon FSx ONTAP文件系统上的 iSCSI lun |
ora_02 |
NTAP2(NTAP2_PDB1、NTAP2_PDB2、NTAP2_PDB3) |
Amazon FSx ONTAP文件系统上的 iSCSI lun |
部署考虑的关键因素
-
Oracle 数据库存储布局。在此自动化 Oracle 部署中,我们默认配置四个数据库卷来托管 Oracle 二进制文件、数据和日志。卷中的单个 LUN 分配给 Oracle 二进制文件。然后,我们从数据和日志 LUN 创建两个 ASM 磁盘组。在 +DATA asm 磁盘组中,我们配置两个数据卷,每个卷有两个 LUN。在 +LOGS asm 磁盘组中,我们在日志卷中创建两个 lun。 ONTAP卷内布局的多个 LUN 通常可提供更好的性能。
-
*多个数据库服务器部署。*自动化解决方案可以在单个 Ansible 剧本运行中将 Oracle 容器数据库部署到多个 DB 服务器。无论数据库服务器的数量有多少,剧本的执行都保持不变。您可以将多个容器数据库部署到具有不同数据库实例 ID(Oracle SID)的单个 EC2 实例。但要确保主机上有足够的内存来支持部署的数据库。
-
iSCSI 配置。 EC2 实例数据库服务器通过 iSCSI 协议连接到 FSx 存储。 EC2 实例通常部署单个网络接口或 ENI。单个 NIC 接口同时承载 iSCSI 和应用程序流量。通过仔细分析 Oracle AWR 报告来衡量 Oracle 数据库峰值 I/O 吞吐量要求非常重要,这样才能选择满足应用程序和 iSCSI 流量吞吐量要求的正确 EC2 计算实例。此外,AWS EC2 通常将每个 TCP 流限制为 5 Gbps。每个 iSCSI 路径提供 5 Gbps (625 MBps) 的带宽,并且可能需要多个 iSCSI 连接来支持更高的吞吐量要求。
-
*您创建的每个 Oracle ASM 磁盘组使用的 Oracle ASM 冗余级别。*由于Amazon FSx ONTAP已启用 HA 以在集群磁盘级别进行数据保护,因此您应该使用
External Redundancy
,这意味着该选项不允许 Oracle ASM 镜像磁盘组的内容。 -
数据库备份。 NetApp提供了SnapCenter software套件,用于数据库备份、恢复和克隆,并具有用户友好的 UI 界面。 NetApp建议实施这样的管理工具,以实现快速(一分钟内)的 SnapShot 备份、快速(几分钟内)的数据库恢复和数据库克隆。
解决方案部署
以下部分提供了在Amazon FSx ONTAP文件系统上自动部署和保护 Oracle 19c 的分步过程,其中数据库 lun 通过 iSCSI 直接安装到单节点重新启动配置中的 EC2 实例 VM,并使用 Oracle ASM 作为数据库卷管理器。
部署先决条件
Details
部署需要以下先决条件。
-
已设置 AWS 账户,并在您的 AWS 账户内创建了必要的 VPC 和网络段。
-
从 AWS EC2 控制台,将 EC2 Linux 实例部署为 Oracle DB 服务器。为 ec2-user 启用 SSH 私钥/公钥身份验证。有关环境设置的详细信息,请参阅上一节中的架构图。还请查看"Linux 实例用户指南"了解更多信息。
-
从 AWS FSx 控制台,配置满足要求的Amazon FSx ONTAP文件系统。查看文档"创建 FSx ONTAP文件系统"以获得分步说明。
-
步骤 2 和 3 可以使用以下 Terraform 自动化工具包执行,该工具包创建一个名为
ora_01`以及一个名为 `fsx_01
。在执行之前,请仔细检查说明并更改变量以适合您的环境。该模板可以根据您自己的部署要求轻松修改。git clone https://github.com/NetApp-Automation/na_aws_fsx_ec2_deploy.git
-
将 EC2 Linux 实例配置为 Ansible 控制器节点,并安装最新版本的 Ansible 和 Git。详细信息请参考以下链接:"NetApp解决方案自动化入门"在第 -
Setup the Ansible Control Node for CLI deployments on RHEL / CentOS`或者
。
`Setup the Ansible Control Node for CLI deployments on Ubuntu / Debian -
配置 Windows 服务器以运行最新版本的NetApp SnapCenter UI 工具。详细信息请参考以下链接:"安装SnapCenter服务器"
-
克隆适用于 iSCSI 的NetApp Oracle 部署自动化工具包的副本。
git clone https://bitbucket.ngage.netapp.com/scm/ns-bb/na_oracle_deploy_iscsi.git
-
在 EC2 实例 /tmp/archive 目录上按照 Oracle 19c 安装文件进行阶段。
installer_archives: - "LINUX.X64_193000_grid_home.zip" - "p34762026_190000_Linux-x86-64.zip" - "LINUX.X64_193000_db_home.zip" - "p34765931_190000_Linux-x86-64.zip" - "p6880880_190000_Linux-x86-64.zip"
确保您已在 Oracle VM 根卷中分配至少 50G,以便有足够的空间来存放 Oracle 安装文件。 -
观看以下视频:
使用 iSCSI 在Amazon FSx ONTAP上简化和自动化 Oracle 部署
自动化参数文件
Details
Ansible playbook 使用预定义参数执行数据库安装和配置任务。对于此 Oracle 自动化解决方案,有三个用户定义的参数文件需要在剧本执行之前用户输入。
-
主机 - 定义自动化剧本运行的目标。
-
vars/vars.yml - 定义适用于所有目标的变量的全局变量文件。
-
host_vars/host_name.yml - 定义仅适用于命名目标的变量的本地变量文件。在我们的用例中,这些是 Oracle DB 服务器。
除了这些用户定义的变量文件之外,还有几个默认变量文件,其中包含默认参数,除非必要,否则不需要更改。以下部分介绍如何配置用户定义的变量文件。
参数文件配置
Details
-
Ansible 目标 `hosts`文件配置:
# Enter Amazon FSx ONTAP management IP address [ontap] 172.16.9.32 # Enter name for ec2 instance (not default IP address naming) to be deployed one by one, follow by ec2 instance IP address, and ssh private key of ec2-user for the instance. [oracle] ora_01 ansible_host=10.61.180.21 ansible_ssh_private_key_file=ora_01.pem ora_02 ansible_host=10.61.180.23 ansible_ssh_private_key_file=ora_02.pem
-
全球的 `vars/vars.yml`文件配置
############################################################################################################# ###### Oracle 19c deployment global user configurable variables ###### ###### Consolidate all variables from ONTAP, linux and oracle ###### ############################################################################################################# ############################################################################################################# ###### ONTAP env specific config variables ###### ############################################################################################################# # Enter the supported ONTAP platform: on-prem, aws-fsx. ontap_platform: aws-fsx # Enter ONTAP cluster management user credentials username: "fsxadmin" password: "xxxxxxxx" ############################################################################################################# ### Linux env specific config variables ### ############################################################################################################# # Enter RHEL subscription to enable repo redhat_sub_username: xxxxxxxx redhat_sub_password: "xxxxxxxx" ############################################################################################################# ### Oracle DB env specific config variables ### ############################################################################################################# # Enter Database domain name db_domain: solutions.netapp.com # Enter initial password for all required Oracle passwords. Change them after installation. initial_pwd_all: xxxxxxxx
-
本地数据库服务器 `host_vars/host_name.yml`配置如ora_01.yml,ora_02.yml…
# User configurable Oracle host specific parameters # Enter container database SID. By default, a container DB is created with 3 PDBs within the CDB oracle_sid: NTAP1 # Enter database shared memory size or SGA. CDB is created with SGA at 75% of memory_limit, MB. The grand total of SGA should not exceed 75% available RAM on node. memory_limit: 8192
剧本执行
Details
自动化工具包中共有六个剧本。每个执行不同的任务块并服务于不同的目的。
0-all_playbook.yml - execute playbooks from 1-4 in one playbook run. 1-ansible_requirements.yml - set up Ansible controller with required libs and collections. 2-linux_config.yml - execute Linux kernel configuration on Oracle DB servers. 3-ontap_config.yml - configure ONTAP svm/volumes/luns for Oracle database and grant DB server access to luns. 4-oracle_config.yml - install and configure Oracle on DB servers for grid infrastructure and create a container database. 5-destroy.yml - optional to undo the environment to dismantle all.
有三个选项可以使用以下命令运行剧本。
-
在一次组合运行中执行所有部署剧本。
ansible-playbook -i hosts 0-all_playbook.yml -u ec2-user -e @vars/vars.yml
-
按照 1-4 的数字序列逐个执行剧本。
ansible-playbook -i hosts 1-ansible_requirements.yml -u ec2-user -e @vars/vars.yml
ansible-playbook -i hosts 2-linux_config.yml -u ec2-user -e @vars/vars.yml
ansible-playbook -i hosts 3-ontap_config.yml -u ec2-user -e @vars/vars.yml
ansible-playbook -i hosts 4-oracle_config.yml -u ec2-user -e @vars/vars.yml
-
使用标签执行 0-all_playbook.yml。
ansible-playbook -i hosts 0-all_playbook.yml -u ec2-user -e @vars/vars.yml -t ansible_requirements
ansible-playbook -i hosts 0-all_playbook.yml -u ec2-user -e @vars/vars.yml -t linux_config
ansible-playbook -i hosts 0-all_playbook.yml -u ec2-user -e @vars/vars.yml -t ontap_config
ansible-playbook -i hosts 0-all_playbook.yml -u ec2-user -e @vars/vars.yml -t oracle_config
-
撤消环境
ansible-playbook -i hosts 5-destroy.yml -u ec2-user -e @vars/vars.yml
执行后验证
Details
剧本运行后,以 oracle 用户身份登录 Oracle DB 服务器,验证 Oracle 网格基础架构和数据库是否成功创建。以下是主机 ora_01 上的 Oracle 数据库验证的示例。
-
验证 EC2 实例上的 Oracle 容器数据库
[admin@ansiblectl na_oracle_deploy_iscsi]$ ssh -i ora_01.pem ec2-user@172.30.15.40 Last login: Fri Dec 8 17:14:21 2023 from 10.61.180.18 [ec2-user@ip-172-30-15-40 ~]$ uname -a Linux ip-172-30-15-40.ec2.internal 4.18.0-372.9.1.el8.x86_64 #1 SMP Fri Apr 15 22:12:19 EDT 2022 x86_64 x86_64 x86_64 GNU/Linux [ec2-user@ip-172-30-15-40 ~]$ sudo su [root@ip-172-30-15-40 ec2-user]# su - oracle Last login: Fri Dec 8 16:25:52 UTC 2023 on pts/0 [oracle@ip-172-30-15-40 ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 8 18:18:20 2023 Version 19.18.0.0.0 Copyright (c) 1982, 2022, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.18.0.0.0 SQL> select name, open_mode, log_mode from v$database; NAME OPEN_MODE LOG_MODE --------- -------------------- ------------ NTAP1 READ WRITE ARCHIVELOG SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 NTAP1_PDB1 READ WRITE NO 4 NTAP1_PDB2 READ WRITE NO 5 NTAP1_PDB3 READ WRITE NO SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- +DATA/NTAP1/DATAFILE/system.257.1155055419 +DATA/NTAP1/DATAFILE/sysaux.258.1155055463 +DATA/NTAP1/DATAFILE/undotbs1.259.1155055489 +DATA/NTAP1/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.266.1155056241 +DATA/NTAP1/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.267.1155056241 +DATA/NTAP1/DATAFILE/users.260.1155055489 +DATA/NTAP1/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.268.1155056241 +DATA/NTAP1/0C03AAFA7C6FD2E5E063280F1EACFBE0/DATAFILE/system.272.1155057059 +DATA/NTAP1/0C03AAFA7C6FD2E5E063280F1EACFBE0/DATAFILE/sysaux.273.1155057059 +DATA/NTAP1/0C03AAFA7C6FD2E5E063280F1EACFBE0/DATAFILE/undotbs1.271.1155057059 +DATA/NTAP1/0C03AAFA7C6FD2E5E063280F1EACFBE0/DATAFILE/users.275.1155057075 NAME -------------------------------------------------------------------------------- +DATA/NTAP1/0C03AC0089ACD352E063280F1EAC12BD/DATAFILE/system.277.1155057075 +DATA/NTAP1/0C03AC0089ACD352E063280F1EAC12BD/DATAFILE/sysaux.278.1155057075 +DATA/NTAP1/0C03AC0089ACD352E063280F1EAC12BD/DATAFILE/undotbs1.276.1155057075 +DATA/NTAP1/0C03AC0089ACD352E063280F1EAC12BD/DATAFILE/users.280.1155057091 +DATA/NTAP1/0C03ACEABA54D386E063280F1EACE573/DATAFILE/system.282.1155057091 +DATA/NTAP1/0C03ACEABA54D386E063280F1EACE573/DATAFILE/sysaux.283.1155057091 +DATA/NTAP1/0C03ACEABA54D386E063280F1EACE573/DATAFILE/undotbs1.281.1155057091 +DATA/NTAP1/0C03ACEABA54D386E063280F1EACE573/DATAFILE/users.285.1155057105 19 rows selected. SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- +DATA/NTAP1/CONTROLFILE/current.261.1155055529 +LOGS/NTAP1/CONTROLFILE/current.256.1155055529 SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- +DATA/NTAP1/ONLINELOG/group_3.264.1155055531 +LOGS/NTAP1/ONLINELOG/group_3.259.1155055539 +DATA/NTAP1/ONLINELOG/group_2.263.1155055531 +LOGS/NTAP1/ONLINELOG/group_2.257.1155055539 +DATA/NTAP1/ONLINELOG/group_1.262.1155055531 +LOGS/NTAP1/ONLINELOG/group_1.258.1155055539 6 rows selected. SQL> exit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.18.0.0.0
-
验证 Oracle 监听器。
[oracle@ip-172-30-15-40 ~]$ lsnrctl status listener LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 08-DEC-2023 18:20:24 Copyright (c) 1991, 2022, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ip-172-30-15-40.ec2.internal)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 08-DEC-2023 16:26:09 Uptime 0 days 1 hr. 54 min. 14 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/19.0.0/grid/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/ip-172-30-15-40/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ip-172-30-15-40.ec2.internal)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ip-172-30-15-40.ec2.internal)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/product/19.0.0/NTAP1/admin/NTAP1/xdb_wallet))(Presentation=HTTP)(Session=RAW)) Services Summary... Service "+ASM" has 1 instance(s). Instance "+ASM", status READY, has 1 handler(s) for this service... Service "+ASM_DATA" has 1 instance(s). Instance "+ASM", status READY, has 1 handler(s) for this service... Service "+ASM_LOGS" has 1 instance(s). Instance "+ASM", status READY, has 1 handler(s) for this service... Service "0c03aafa7c6fd2e5e063280f1eacfbe0.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... Service "0c03ac0089acd352e063280f1eac12bd.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... Service "0c03aceaba54d386e063280f1eace573.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... Service "NTAP1.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... Service "NTAP1XDB.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... Service "ntap1_pdb1.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... Service "ntap1_pdb2.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... Service "ntap1_pdb3.solutions.netapp.com" has 1 instance(s). Instance "NTAP1", status READY, has 1 handler(s) for this service... The command completed successfully
-
验证创建的电网基础设施和资源。
[oracle@ip-172-30-15-40 ~]$ asm [oracle@ip-172-30-15-40 ~]$ crsctl check has CRS-4638: Oracle High Availability Services is online [oracle@ip-172-30-15-40 ~]$ crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.DATA.dg ONLINE ONLINE ip-172-30-15-40 STABLE ora.LISTENER.lsnr ONLINE ONLINE ip-172-30-15-40 STABLE ora.LOGS.dg ONLINE ONLINE ip-172-30-15-40 STABLE ora.asm ONLINE ONLINE ip-172-30-15-40 Started,STABLE ora.ons OFFLINE OFFLINE ip-172-30-15-40 STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.cssd 1 ONLINE ONLINE ip-172-30-15-40 STABLE ora.diskmon 1 OFFLINE OFFLINE STABLE ora.driver.afd 1 ONLINE ONLINE ip-172-30-15-40 STABLE ora.evmd 1 ONLINE ONLINE ip-172-30-15-40 STABLE ora.ntap1.db 1 ONLINE ONLINE ip-172-30-15-40 Open,HOME=/u01/app/o racle/product/19.0.0 /NTAP1,STABLE --------------------------------------------------------------------------------
-
验证 Oracle ASM。
[oracle@ip-172-30-15-40 ~]$ asmcmd ASMCMD> lsdg State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 512 4096 4194304 163840 155376 0 155376 0 N DATA/ MOUNTED EXTERN N 512 512 4096 4194304 81920 80972 0 80972 0 N LOGS/ ASMCMD> lsdsk Path AFD:ORA_01_DAT1_01 AFD:ORA_01_DAT1_03 AFD:ORA_01_DAT2_02 AFD:ORA_01_DAT2_04 AFD:ORA_01_LOGS_01 AFD:ORA_01_LOGS_02 ASMCMD> afd_state ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'ip-172-30-15-40.ec2.internal' ASMCMD> exit
-
登录 Oracle Enterprise Manager Express 来验证数据库。
使用SnapCenter进行 Oracle 备份、恢复和克隆
Details
参考 TR-4979"VMware Cloud on AWS 中简化的自主管理 Oracle,带有客户机安装的 FSx ONTAP"部分 `Oracle backup, restore, and clone with SnapCenter`有关设置SnapCenter和执行数据库备份、恢复和克隆工作流的详细信息。
在哪里可以找到更多信息
要了解有关本文档中描述的信息的更多信息,请查看以下文档和/或网站:
-
Amazon FSx ONTAP
-
Amazon EC2
-
使用新数据库安装为独立服务器安装 Oracle Grid Infrastructure
-
使用响应文件安装和配置 Oracle 数据库
-
将 Red Hat Enterprise Linux 8.2 与ONTAP结合使用