適用於 Bare Metal 解決方案的 Oracle 最佳做法

在 Bare Metal 解決方案中導入 Oracle 資料庫時,我們瞭解您的目標是輕鬆建立環境,並盡可能減少問題。為了協助您達成這項目標,我們收集了客戶、解決方案架構師和支援人員的意見回饋,他們已在 Bare Metal 解決方案上導入 Oracle 資料庫。以下資訊提供這些專家提供的建議,協助您在 Bare Metal 解決方案上建立 Oracle 資料庫環境時,盡可能獲得成功。

軟體部署

為確保 Oracle 軟體部署作業順利進行,建議您使用 Bare Metal 解決方案工具包。工具包提供多個 Ansible 和 JSON 指令碼,協助您在 Bare Metal 解決方案上安裝 Oracle 軟體。如要進一步瞭解 Bare Metal 解決方案工具包,以及如何在 Bare Metal 解決方案環境中安裝 Oracle 資料庫,請參閱 工具包使用手冊

作業系統

在 Bare Metal 解決方案伺服器上設定作業系統時,建議您執行下列動作。

驗證 NTP 伺服器

所有 Bare Metal 解決方案伺服器都應與時間來源保持同步。請選取最符合需求的 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 VM CPU 數量和記憶體詳細資料

如要查看 Oracle VM (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,而不會對作業系統造成任何影響。不過,您必須重新啟動伺服器,才能套用新設定。

確認殼層限制設定

Bare Metal 解決方案工具包會設定設定 Oracle RAC 所需的殼層限制。如果您使用 Bare Metal 解決方案工具包且未變更殼層限制,可以略過這項驗證。所有擁有 Oracle 軟體 (包括 Grid Infrastructure) 的作業系統帳戶,都必須設定 Shell 限制。Oracle 建議在 Linux 上採用下列設定:

限制 軟值 硬值
開啟檔案 1024 65536
使用者處理程序上限 16384 16384
堆疊大小 10240 32768
鎖定記憶體上限 至少 90% 的記憶體 至少 90% 的記憶體

請使用 ulimit 指令驗證軟殼和硬殼限制。舉例來說,輸入下列指令即可驗證軟殼限制:

ulimit -S -n -u -s -l

下列輸出內容顯示 384 GB 記憶體系統的正確軟殼限制設定:

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

如要確認硬殼限制,請使用下列指令:

ulimit -H -n -u -s -l

下列輸出內容顯示 384 GB 記憶體系統的正確硬殼限制:

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

如果任何殼層限制都未正確設定,請修改 /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 建議您使用巨型封包設定伺服器介面。Jumbo 封包的 MTU 大小為 9000 位元組,足以支援 8192 位元組的 Oracle 資料庫區塊大小。

如要在 Bare Metal 解決方案伺服器上設定巨型資料流,以便使用 Oracle RAC:

  1. 查看 Bare Metal 解決方案私人網路的設定,確認是否已設定巨型資料流:

    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. 請使用根層級權限,針對使用巨型影格 (jumbo frame) 的 Bare Metal 解決方案環境中的所有伺服器,將 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 推升至儲存體積的效能限制。這會導致儲存空間 I/O 受到節流,進而增加儲存空間磁碟區的延遲時間。

建議您實作 RATE 管道參數,以便限制 Oracle RMAN 可使用的頻寬或吞吐量。

詳情請參閱 Oracle 說明文件:23.2.1.4 RATE 管道參數

Oracle 自動儲存空間管理

我們的 Cloud Customer Care 團隊和多位 Bare Metal 解決方案客戶已在 Bare Metal 解決方案環境中新增 Oracle 自動儲存空間管理 (ASM)。我們彙整了以下最佳做法清單,並集結了他們的經驗和智慧,協助您順利安裝 ASM 磁碟群組。我們的目標是協助您為 Bare Metal 解決方案環境取得最佳儲存空間效能

使用統一 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 作業的磁碟可能會出現效能上限大幅降低的情形,並導致延遲時間飆升。

舉例來說,如果您建立的 ASM 磁碟群組含有 2 個不均衡的磁區 (1 X 16 TiB 和 1 X 5 TiB),則 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 Database Assessment 工具收集峰值效能數字。

請查看裸機解決方案的儲存空間效能表,計算需要分配給 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"
    

    我們需要這項設定,因為 Bare Metal 解決方案儲存空間環境會使用您可以在 /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 磁碟群組

Bare Metal Solution 提供的儲存空間採用 NETAPP RAID-DP,這是一種 RAID 6 形式,即使兩個磁碟發生故障,也能保護資料。因此,我們建議您為 ASM 使用外部備援機制。

建立 ASM 磁碟後重新啟動 Bare Metal 解決方案伺服器

建立 ASM 磁碟群組後,請重新啟動叢集中的所有 Bare Metal Solution 伺服器,確保 ASM 例項和磁碟群組在重新啟動後皆可上線。請採取這項主動措施,避免在 ASM 磁碟群組上建構資料庫叢集後發生問題。

Oracle RAC

本節說明在 Bare Metal 解決方案上安裝 Oracle Real Application Clusters (RAC) 時的最佳做法。

Oracle Grid Infrastructure 叢集名稱長度

叢集名稱長度不得超過 15 個半形字元。

叢集名稱長度超過 15 個字元會導致 root.sh 指令碼失敗。

透過 SSH 建立 VNC 檢視器通道

任意伺服器 (例如 VNC Viewer) 會遭到 Bare Metal 解決方案伺服器的預設 OS 防火牆封鎖。因此,請透過 SSH 建立 X Window 或 VNC Viewer 通道:

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

有足夠的空間供根檔案系統使用

確認根檔案系統 (/) 有足夠的可用空間。Bare Metal 解決方案伺服器提供 20 GB 的根目錄檔案系統,但可能不足以應付需求。

在 Bare Metal 解決方案伺服器上,檢查根目錄 '/' 檔案系統的大小。預設大小為 20 GB,可能不足以應付需求。如果大小為 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 是您的 Bare Metal 解決方案伺服器。

    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

由於 Bare Metal 解決方案伺服器不會將 Localhost 新增至 /etc/hosts 檔案,因此請手動將 Localhost 解析為 127.0.0.1

確保有足夠的資源限制

在 Bare Metal 解決方案伺服器上安裝 Oracle RAC 之前,請確認 root 使用者和 oracle 使用者的資源限制是否足夠。

您可以使用 ulimit 指令查看限制。

設定 ORACLEASM_SCANORDER 變數

如果您使用的是 Oracle ASMLib,請設定掃描順序,以便停止 Oracle ASM 優先選取單一路徑 ASM 裝置:

ORACLEASM_SCANORDER="dm"
ORACLEASM_SCANEXCLUDE="sd"

我們需要這項設定,因為 Bare Metal 解決方案儲存空間環境會使用 DM 裝置,您可以在 /proc/partitions 檔案中查看這些裝置。

Oracle 是 Oracle 和/或其關聯企業的註冊商標。