裸金属解决方案上的 Oracle 的最佳实践

在裸金属解决方案上实现 Oracle 数据库时,我们深知您的目标是轻松启动环境,并尽可能减少问题。为了帮助您实现此目标,我们收集了在裸金属解决方案上实施过 Oracle 数据库的客户、解决方案架构师和支持人员的反馈。以下信息为您提供了从这些专家处获得的建议,以帮助您在裸金属解决方案上启动自己的 Oracle 数据库环境时取得成功。

软件部署

为了成功部署 Oracle 软件,我们建议您使用裸金属解决方案工具包。该工具包提供了几个 Ansible 和 JSON 脚本,可帮助您在裸金属解决方案上执行 Oracle 软件安装。如需详细了解裸金属解决方案工具包以及如何在裸金属解决方案环境中安装 Oracle 数据库,请参阅工具包用户指南

操作系统

在裸金属解决方案服务器上设置操作系统时,我们建议您执行以下操作。

验证 NTP 服务器

所有裸金属解决方案服务器都应与一个时间源同步。选择最符合您需求的 NTP 服务器选项(物理或虚拟)。

如果您的服务器使用 NTP 进行时间同步,请使用 timedatectlntpstat 命令查看服务器是否与时间源同步。下面的示例显示了成功同步的服务器的命令输出:

timedatectl show -p NTPSynchronized
NTPSynchronized=yes
synchronised to NTP server (216.239.35.8) at stratum 3
   time correct to within 49 ms
   polling server every 1024 s

查看 Oracle 虚拟机 CPU 数量和内存详细信息

如需查看有关 Oracle 虚拟机 (OVM) 主机的信息(包括 CPU 和内存详情),请使用 xm info 命令。例如:

/usr/sbin/xm info

如需了解详情,请参阅有关查看主机信息的 Oracle 文档

检查 /etc/fstab 设置以确认装载选项正确

为了防止启动过程挂起,请始终使用 nofail 装载选项配置您创建的非根装载点(例如 /u01/u02)设置,以代替默认设置。在极少数情况下,主机重启时底层存储设备可能不可用。设置 nofail 装载选项可让启动过程在服务器无法查看存储设备时继续。

以下示例展示了 /etc/fstab 文件中 /u01/u02 装载点的推荐设置:

/dev/mapper/3600a098038314352513f4f765339624c1 /u01 xfs nofail 0 0
/dev/mapper/3600a374927591837194d4j371563816c1 /u02 xfs nofail 0 0

您可以将装载选项从 defaults 修改为 nofail,而不会对操作系统产生任何影响。但是,要应用新设置,您需要重新启动服务器。

确认 shell 限制设置

裸金属解决方案工具包会配置设置 Oracle RAC 所需的 shell 限制。如果您使用了裸金属解决方案工具包,并且没有更改 shell 限制,则可以跳过此验证。必须为拥有 Oracle 软件(包括 Grid Infrastructure)的所有操作系统账号设置 shell 限制。Oracle 建议对 Linux 使用以下设置:

限额 软性值 硬性值
打开文件 1024 65536
最大用户进程数 16384 16384
堆栈大小 10240 32768
最大锁定内存 至少 90% 的内存 至少 90% 的内存

使用 ulimit 命令验证软性和硬性 shell 限制。例如,输入以下命令以验证软性 shell 限制:

ulimit -S -n -u -s -l

以下输出显示了具有 384 GB 内存的系统的正确软性 shell 限制设置:

open files                      (-n) 1024
max user processes              (-u) 16384
stack size              (kbytes, -s) 10240
max locked memory       (kbytes, -l) 355263678

如需验证硬性 shell 限制,请使用以下命令:

ulimit -H -n -u -s -l

以下输出显示了具有 384 GB 内存的系统的正确硬性 shell 限制:

open files                      (-n) 65536
max user processes              (-u) 16384
stack size              (kbytes, -s) 32768
max locked memory       (kbytes, -l) 355263678

如果未正确设置任何 shell 限制,请修改 /etc/security/limits.conf 文件中的条目,如以下示例所示:

oracle  soft  nofile  1024
oracle  hard  nofile  65536
oracle  soft  nproc   2047
oracle  hard  nproc   16384
oracle  soft  stack   10240
oracle  hard  stack   32768
oracle  soft  memlock 355263678
oracle  hard  memlock 355263678

grid    soft  nofile  1024
grid    hard  nofile  65536
grid    soft  nproc   2047
grid    hard  nproc   16384
grid    soft  stack   10240
grid    hard  stack   32768
grid    soft  memlock 355263678
grid    hard  memlock 355263678
grep MemTotal /proc/meminfo
MemTotal:       16092952 kB

避免更改多路径设置

如果选择更改多路径设置,如果您使用 multipath.conf 为设备创建别名,请勿配置 path_grouping_policy 特性。此更改会覆盖 devices 定义部分中设置的默认政策。

在正常操作下,multipath -ll 命令应显示类似于以下示例的状态。每个设备包括两个处于就绪状态的活跃路径。

3600a0980383143524f2b50476d59554e dm-7 NETAPP  ,LUN C-Mode
size=xxxG features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 14:0:3:2 sdf                8:80   active ready running
| `- 16:0:5:2 sdv                65:80  active ready running
`-+- policy='service-time 0' prio=10 status=enabled
  |- 14:0:2:2 sdc                8:32   active ready running
  `- 16:0:3:2 sdq                65:0   active ready running

使用巨型帧

为了防止数据包在 RAC 环境中从一个服务器传输到另一个服务器时发生碎片化,Oracle 建议您为服务器接口配置巨型帧。巨型帧的 MTU 大小为 9000 字节,其大小足够支持 8192 字节的 Oracle 数据库块大小。

如需在 Oracle RAC 的裸金属解决方案服务器上配置巨型帧,请执行以下操作:

  1. 查看裸金属解决方案专用网络的设置,确认已配置巨型帧:

    gcloud bms networks describe NETWORK_NAME --project=PROJECT_ID --region=REGION | grep jumboFramesEnabled
    

    示例输出:

    jumboFramesEnabled: true
    
  2. 确定网络接口及其 mtu 大小:

    ip link show | grep mtu
    

    示例输出:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    2: enp55s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    3: enp55s0f2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    4: enp55s0f3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    5: enp17s0f0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000
    6: enp17s0f1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
    7: enp173s0f0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000
    8: enp173s0f1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
    9: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    10: bond1.117@bond1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    11: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    12: bond0.118@bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    13: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    14: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    
  3. 使用根级权限,将 MTU=9000 添加到裸金属解决方案环境中使用巨型帧的所有服务器的接口配置文件。您可以在 /etc/sysconfig/network-scripts/ifcfg-interface_name 找到该文件。

    示例输出:

    BONDING_OPTS="lacp_rate=1 miimon=100 mode=802.3ad xmit_hash_policy=1"
    TYPE=Bond
    BONDING_MASTER=yes
    PROXY_METHOD=none
    BROWSER_ONLY=no
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=no
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=bond1
    UUID=0e7da685-64bf-44f3-812f-9846d747a801
    DEVICE=bond1
    ONBOOT=yes
    AUTOCONNECT_SLAVES=yes
    MTU=9000
    
  4. 重启网络服务以使更改生效:

    service network restart
    
  5. 发出 ping 命令以测试新的 MTU 配置:

     ping -c 2 -M do -s 8972 svr001
     PING svr001 (172.16.1.10) 8972(9000) bytes of data.
     8980 bytes from svr001 (172.16.1.10): icmp_seq=1 ttl=64 time=0.153 ms
     8980 bytes from svr001 (172.16.1.10): icmp_seq=2 ttl=64 time=0.151 ms
    
    --- svr001 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 0.151/0.152/0.153/0.001 ms
    

Oracle RMAN 备份和延迟影响

如果 Oracle RMAN 备份过程不受 RATE 参数的限制,它可以将存储吞吐量或 IOPS 推送到某个存储卷的性能限制。这会导致存储 IO 受到限制,从而增加存储卷的延迟时间。

我们建议您实现 RATE 通道参数,以限制 Oracle RMAN 可以使用的带宽或吞吐量。

如需了解详情,请参阅 Oracle 文档:23.2.1.4 RATE 渠道参数

Oracle 自动存储管理

我们的 Cloud Customer Care 团队和一些裸金属解决方案客户已将 Oracle 自动存储管理 (ASM) 添加到其裸金属解决方案环境中。基于他们的集体经验和智慧,我们整理了以下最佳实践列表,以帮助您成功安装自己的 ASM 磁盘组。我们的目标是帮助您实现裸金属解决方案环境的最佳存储性能

使用统一的 LUN 大小

您选择的 LUN 大小应代表增长单元。ASM 最适合用于具有相同大小和相似性能特征的 LUN。对于非常大的数据库,我们建议使用 2 TB 的 LUN 大小以优化性能。

最多创建两个 ASM 磁盘组

您应该将数据文件和 REDO 日志的一个副本发送到单个 DATA 磁盘组。您还可以选择创建第二个 FRA 磁盘组以存储磁盘上的备份和归档日志。将 REDO 日志存储在高弹性存储空间时,您不需要拥有两个副本。

REDO 日志写入对延迟时间比较敏感。因此,仅当 FRA 磁盘组的性能配置文件与 DATA 磁盘组的性能配置文件匹配时,才应考虑多路复用 REDO 日志。

跨所有卷中的所有 LUN 对 ASM 磁盘组进行条带化

创建 ASM 磁盘组时,请跨所有卷的所有 LUN 对磁盘组进行条带化。如果您的 LUN 属于单个卷,则必须在创建磁盘组时包含该卷中的所有 LUN。例如,如果一个卷有 X 个 LUN,则应在创建磁盘组时使用所有 X 个 LUN。

本指南也适用于使用多个卷的情况,因为我们提供卷的 QoS 限制。如果您使用多个卷来提高吞吐量 (>900 Mbps),则需要在创建磁盘组时包含每个卷中的所有 LUN 以实现所需的性能。

在同一磁盘组中使用具有相同性能特征的 LUN 和卷

如果您使用多个卷来提高吞吐量,请在创建 ASM 磁盘组时使用相同的卷大小和性能特征。

请勿混合使用具有不同性能特征的卷中的 LUN。如果您在同一磁盘组中包含了具有不同性能配置文件的 LUN 和卷,则执行 I/O 操作的磁盘的性能上限可能会低得多,还可能会导致延迟时间高峰。

例如,如果您创建了一个包含两个大小不一致的卷(1 个 16 TiB 和 1 个 5 TiB)的 ASM 磁盘组,则 5 TB 卷中的磁盘执行的 I/O 操作可能会导致延迟时间增加。5 TiB 卷的吞吐量和 IOPS 上限要低得多,因此会在远低于 16 TiB 卷的限制水平的时候就达到限制水平。

不要跨多个 RAC 集群共享存储卷

对于每个 RAC 集群,请预配唯一的存储卷。不要跨多个 RAC 集群共享同一个存储卷。由于存储设备在卷级别应用 QoS,因此这种做法可以最大限度地降低近邻争用单个 IOPS 和吞吐量池的可能性。

例如,如果单个卷具有 8 个 LUN,请勿将一些 LUN 分配给一个 RAC 数据库集群,并将其余的 LUN 分配给另一个 RAC 数据库集群。您应该预配两个单独的存储卷,并将每个卷分配给单独的专用 RAC 集群。

在创建 ASM 磁盘组之前了解所需的 IOPS 和吞吐量容量

请注意本地环境的性能峰值。如需查找此信息,请在高峰工作负载时段内生成 AWR 报告,以记录系统的峰值 IOPS 和吞吐量值。您还可以使用我们的 Oracle 数据库评估工具来收集您的峰值性能数值。

获得本地性能数值后,请查看我们的裸金属解决方案存储性能表,以计算分配给 ASM 磁盘组以及实现预期性能所需要的存储空间。如果您有更高的吞吐量要求 (>768 Mbps),则可以创建多个卷并跨所有 LUN 和所有卷对 ASM 磁盘组进行条带化。

保持多路径配置不变

您不应更改 /etc/multipath.conf 文件中的默认 group_pathing_policy。而应始终使用默认值 group_pathing_policy=group_by_prio,以避免在存储路径失败时逐出 RAC 节点。

如需详细了解如何保持多路径配置不变,请参阅避免更改多路径设置

为 ASM 配置重要设置

如果您在 Linux 上使用 Oracle Grid Infrastructure 12.1.0.2 或更高版本,请使用 ASMFD 或 UDEV 设置 ASM。

对于之前的 Oracle Grid Infrastructure 版本,请使用 ASMLib。

  • 如需阻止 Oracle ASM 先选择单路径 ASM 设备,请按如下所示设置扫描顺序:

    ORACLEASM_SCANORDER="dm"
    ORACLEASM_SCANEXCLUDE="sd"
    

    由于裸金属解决方案存储环境使用您可以在 /proc/partitions 中查看的 DM 设备,因此我们要求进行此设置。

  • 如需检查 ASMLib 是否配置为管理 ASM 磁盘,请以根用户身份运行以下命令:

    /usr/sbin/oracleasm configure | grep SCAN
    

    如果您使用的是 ASMLib,则输出结果将如下所示:

    ORACLEASM_SCANBOOT=true
    ORACLEASM_SCANORDER="dm"
    ORACLEASM_SCANEXCLUDE="sd"
    ORACLEASM_SCAN_DIRECTORIES=""
    

创建具有外部冗余的 ASM 磁盘组

裸金属解决方案提供的存储使用 NETAPP RAID-DP,它是 RAID 6 的一种形式,即使两个磁盘出现故障,也可以保护数据。因此,我们建议您为 ASM 使用外部冗余。

创建 ASM 磁盘后重新启动裸金属解决方案服务器

创建 ASM 磁盘组后,您应该重新启动集群中的所有裸金属解决方案服务器,以确保 ASM 实例和磁盘组在重新启动后联机。遵循此主动步骤将使您可以避免在 ASM 磁盘组上构建数据库集群后可能发生的问题。

Oracle RAC

本部分介绍在裸金属解决方案上安装 Oracle 真实应用集群 (RAC) 的最佳实践。

Oracle 网格基础架构集群名称长度

集群名称不得超过 15 个字符。

长度超过 15 个字符的集群名称会导致 root.sh 脚本失败。

通过 SSH 创建隧道 VNC 查看器

裸金属解决方案服务器的默认操作系统防火墙会阻止任意服务器(例如 VNC Viewer)。因此,请通过 SSH 建立 X Window 或 VNC Viewer 隧道:

ssh -L 5901:localhost:5901 bms-host
vncviewer localhost:1

有足够的空间供根文件系统使用

确保根文件系统 (/) 有足够的可用空间。裸金属解决方案服务器附带 20GB 的根文件系统,这可能还不够。

在裸金属解决方案服务器上,检查根“/”文件系统的大小。默认大小为 20GB,这可能不够。如果大小为 20 GB,请增大。

使用域名服务器来替代 Cloud DNS

如果您不想使用 Cloud DNS,请安装您自己的域名服务器来解析裸金属解决方案服务器上的主机 IP 地址。Oracle Grid Infrastructure 使用 nslookup 命令获取 DNS 服务器的名称。nslookup 命令不使用 /etc/hosts 文件,

请按照以下步骤操作:

  1. 安装 dnsmasq

    yum makecache
    yum install dnsmasq
    
  2. 在修改模式下打开 /etc/dnsmasq.conf 文件。

    vi /etc/dnsmasq.conf
    
  3. /etc/dnsmasq.conf 文件中,添加以下行:

    port=53
    domain-needed
    bogus-priv
    
    strict-order
    expand-hosts
    domain=localdomain
    
    address=/.localdomain/127.0.0.1
    address=//127.0.0.1
    
    listen-address=127.0.0.1
    resolv-file=/etc/dnsmasq-resolv.conf
    
  4. 修改 /etc/dnsmasq-resolv.conf 文件和 /etc/resolv.conf 文件,使其仅包含以下代码行:

    nameserver 127.0.0.1
    
  5. 启动 dnsmasq 服务:

    systemctl restart dnsmasq
    
    systemctl status dnsmasq
    
  6. 在这两个节点上运行 nslookup 命令。

    nslookup at-2811641-svr001
    Server:         127.0.0.1
    Address:        127.0.0.1#53
    
    Name:   at-2811641-svr001
    Address: 192.168.1.10
    
    nslookup at-2811641-svr002
    Server:         127.0.0.1
    Address:        127.0.0.1#53
    
    Name:   at-2811641-svr002
    Address: 192.168.1.11
    

安装 NTP

安装 NTP 时,请确保所有 RAC 节点与跳转主机或内部 NTP 服务器的时间同步。请按照以下步骤操作:

  1. 安装 NTP。

    yum install ntp
    
  2. 启动 ntpd 服务。

    systemctl start ntpd
    
  3. /etc/ntp.conf 文件中,添加以下代码行以与堡垒主机同步,在本例中为 10.x.x.x。您也可以使用内部 NTP 服务器。在这种情况下,192.x.x.x 是您的裸金属解决方案服务器。

    restrict 192.x.x.x mask 255.255.255.0 nomodify notrap
    server 10.x.x.x prefer
    
  4. 若要开始同步,请更新时间服务器以开始同步。

    ntpdate -qu SERVER_NAME
    

一次在一个节点上运行根脚本

一次在一个节点上运行根脚本 root.sh。如果在第一个节点上执行失败,请勿继续到下一个节点。

解决 Localhost

由于裸金属解决方案服务器不会将 Localhost 添加到 /etc/hosts 文件中,因此请手动将 Localhost 解析为 127.0.0.1

确保足够的资源限制

在裸金属解决方案服务器上安装 Oracle RAC 之前,请确保 root 用户和 oracle 用户的资源限制足够高。

您可以使用 ulimit 命令检查限制。

设置 ORACLEASM_SCANORDER 变量

如果您使用的是 Oracle ASMLib,则要阻止 Oracle ASM 先选择单路径 ASM 设备,请按如下方式设置扫描顺序:

ORACLEASM_SCANORDER="dm"
ORACLEASM_SCANEXCLUDE="sd"

我们之所以需要此设置,是因为裸金属解决方案存储环境使用您可以在 /proc/partitions 文件中查看的 DM 设备。

Oracle 是 Oracle 和/或其关联公司的注册商标。