2 PodmanでのOracle RAC用のターゲット構成

このドキュメントの手順は、2つのLinuxホスト・サーバーで実行されている2ノードのOracle RACクラスタでテストされ、共有記憶域にブロック・デバイスを使用しています。

Podman上のOracle RACの概要

Oracle Database 19c (19.16)以降、Oracle RACは本番デプロイメントのPodmanコンテナでサポートされています。

本番環境で単一のホストが完全な停止時間を引き起こすのを防ぐには、異なる物理サーバーで実行されているPodmanホスト間でOracle RACノードを分散します。テストおよび開発環境では、同じ物理サーバーで実行されているPodmanホストでOracle RACを構成できます。

次の図に、高可用性の記憶域およびネットワーク構成で、1つ目のホストには別々のゲスト・ドメインに2つのコンテナがあり、2つ目のホストにも2つのコンテナと2つの別々のゲスト・ドメインがある本番構成を示します。

prod-config-podman.pngの説明が続きます
図prod-config-podman.pngの説明

次の図に、高可用性の記憶域およびネットワーク構成で、コンテナが別個のハードウェア・サーバー上の異なるPodmanホストに配置されている別の本番デプロイメントを示します。

bare-metal-server-prod-podman.pngの説明が続きます
図bare-metal-server-prod-podman.pngの説明

次の図に、一般的なテストおよび開発デプロイメントの例を2つ示します。左側の例は、クラスタ・メンバー・ノードが同じPodmanホストのコンテナであるPodmanホストを示しています。右側の例は、同じハードウェア・サーバー上の2つのPodmanホストを示しており、各ホストには別個のコンテナがあります。

test-dev-podman.pngの説明が続きます
図test-dev-podman.pngの説明

仮想テストおよび開発クラスタでは、テストに高可用性は不要であるため、2つ以上のPodmanコンテナを同じクラスタのノードとして使用し、1つのOracle Linux Podmanホストでのみ実行できます。

Podmanホスト・サーバーの構成

Podmanホスト・サーバーの構成時に、次のガイドラインに従い、テストにOracleで使用される構成を確認してください。

Podmanサーバーは目的の数のPodmanコンテナをサポートするのに十分である必要があり、各コンテナは少なくともOracle Real Application ClustersノードをホストするOracle Grid Infrastructureサーバーの最小要件を満たしている必要があります。クライアント・マシンは、Oracle RACノードから実行されるX Window System (X11)リモート・ディスプレイ対話型インストール・セッションに十分に対応できる必要があります。ただし、非対話型(サイレント)インストールを使用する場合、クライアント・マシンは必要ありません。

Podmanの記憶域要件の詳細は、次のURLで記憶域構成オプションの設定を参照してください。

Oracle Linux Podmanユーザーズ・ガイド

このドキュメントの構成例では、次の構成を使用しています。実際の構成にあわせてホスト名およびコンテナ名を変更してください。

Oracle RACノード1

  • Podmanホスト: podman-host-1
  • コンテナ: racnode1
  • CPUコアID: 0および1
  • RAM: 16 GB
  • スワップ・メモリー: 16 GB
  • オペレーティング・システム・ディスク:

    Oracle Grid Infrastructureでサポートされている任意の記憶域オプションを使用できます。記憶域には、少なくとも次の使用可能な容量があることを確認します。

    • ルート(/): 40 GB
    • /scratch: 80 GB (Oracle Grid InfrastructureおよびOracle Databaseのホームを格納するために/u01に使用されるPodmanホスト・ディレクトリ)
    • /var/lib/containers: 100 GB xfs
  • Podmanバージョン: 4.0.2
  • Linux: カーネル5.4.17-2136.300.7.el8uek.x86_64を搭載したOracle Linux Serverリリース8.5

Oracle RACノード2

  • Podmanホスト: podman-host-2
  • コンテナ: racnode2
  • CPUコアID: 0および1
  • RAM: 16 GB
  • スワップ・メモリー: 16 GB
  • オペレーティング・システム・ディスク:

    Oracle Grid Infrastructureでサポートされている任意の記憶域オプションを使用できます。記憶域には、少なくとも次の使用可能な容量があることを確認します。

    • ルート(/): 40 GB
    • /scratch: 80 GB (Oracle Grid InfrastructureおよびOracle Databaseのホームを格納するために/u01に使用されるPodmanホスト・ディレクトリ)
    • /var/lib/containers: 100 GB xfs
  • Podmanバージョン: 4.0.2
  • Linux: カーネル5.4.17-2136.300.7.el8uek.x86_64を搭載したOracle Linux Serverリリース8.5

ブロック・デバイス

Oracle Grid Infrastructureでサポートされている任意の記憶域オプションを使用できます。記憶域には、少なくとも次の使用可能な容量があることを確認します。

  • /dev/sdd (50 GB)
  • /dev/sde (50 GB)

PodmanコンテナおよびOracle RACノード

このドキュメントで使用される構成について学習し、遂行する手順を理解してください。

このドキュメントでは、このガイドで示す例として、2ノード構成を使用してPodmanコンテナを作成するステップおよびコマンドを示します。後述の構成情報は、その構成のリファレンスです。

この構成例のPodmanコンテナは、Oracle Real Application Clusters (Oracle RAC)のPodmanホストpodman-host-1およびpodman-host-2に作成されました。

Oracle RACノード1

  • コンテナ: racnode1
  • CPUコアID: 0および1
  • メモリー
    • RAMメモリー: 16 GB
    • スワップ・メモリー: 16 GB
  • Oracle Automatic Storage Management (Oracle ASM)のディスク
    • /dev/asm-disk1
    • /dev/asm-disk2
  • ホスト名およびIPアドレス
    • racnode1、10.0.20.150
    • racnode1-vip、10.0.20.160
    • racnode1-priv、192.168.17.150
    • racnode-scan、10.0.20.170/171/172
    • ドメイン: example.info
  • racnode1のPodmanボリュームは、Podmanホスト・ディレクトリ・パスと適切な権限を使用してマウントされます。

    マウントがディレクトリとして実行されるようにするために、-vまたは--volumeを使用して各マウントを指定します。ボリュームは、コロン文字(:)で区切られた3つのフィールドで構成されます。ボリュームを設定する際、ボリューム・フィールドは次の順序で設定する必要があります: source-path:target-path:options。たとえば:

    # podman container create ... --volume /boot:/boot:ro ... -name racnode1

    /bootは、コンテナ内でreadonlyである必要があります。また、コンテナ内のパス(/boot/software/stageu01および/etc/localtime)は、Podmanホストのマウント(/boot:ro/scratch/software/stage/scratch/rac/cluster01/node1および/etc/localtime)に基づいています。

    次の各ボリュームがマウントされます。

    • /boot : 読取り専用(/boot:ro)
    • /software/stage 読取り/書込み(/scratch/software/stage)
    • /u01 読取り/書込み(/scratch/rac/cluster01/node1)
    • /etc/localtime 読取り専用(/etc/localtime)
  • Oracle Databaseの構成
    • リリース19.16
    • CDB名: orclcdb
    • PDB名: orclpdb
    • インスタンス: orclcdb1
    • SGAサイズ: 3 GB
    • PGAサイズ: 2 GB

Oracle RACノード2

  • コンテナ: racnode2
  • CPUコアID: 0および1
  • メモリー
    • RAMメモリー: 16 GB
    • スワップ・メモリー: 16 GB
  • Oracle Automatic Storage Management (Oracle ASM)のディスク
    • /dev/asm/disk1
    • /dev/asm-disk2
  • ホスト名およびIPアドレス
    • racnode2、10.0.20.151
    • racnode2-vip、10.0.20.161
    • racnode2-priv、192.168.17.151
    • racnode-scan、10.0.20.170/171/172
    • ドメイン: example.info
  • racnode2のPodmanボリュームは、Podmanホスト・ディレクトリ・パスと適切な権限を使用してマウントされます。

    マウントがディレクトリとして実行されるようにするために、-vまたは--volumeを使用してPodmanのマウントを作成します。ボリュームは、コロン文字(:)で区切られた3つのフィールドで構成されます。ボリュームを構成する際、ボリューム・フィールドは次の順序で設定する必要があります: source-path:target-path:options。たとえば:

    # Podman container create ... --volume /boot:/boot:ro ... -name racnode2

    次の各ボリュームが作成されます。

    • /boot : 読取り専用(/boot:ro)
    • /software/stage 読取り/書込み(/scratch/software/stage)
    • /u01 読取り/書込み(/scratch/rac/cluster01/node2)
    • /etc/localtime 読取り専用(/etc/localtime)

    ノート:

    この手順の完了後、マウントが設定されていることを確認するために、Podmanコマンドpodman container inspect racnode2を実行できます。このコマンドを使用して構成のマウントを確認する方法の詳細は、Podmanドキュメントを参照してください。

  • Oracle Database
    • インスタンス: orclcdb2

Podmanホスト・サーバーのプロビジョニング

PodmanをホストするLinuxサーバー(Podmanホスト・サーバー)は、ベア・メタル(物理)サーバーまたはOracle Linux仮想マシン(VM)にプロビジョニングできます。

Podmanホストの準備

Oracle Grid InfrastructureおよびOracle Real Application Clustersをインストールする前に、Podmanをインストールする必要があります。

Podmanコンテナのインストールの準備

Oracle Podmanコンテナのドキュメントを確認し、デプロイ用にシステムを準備します。

クラスタの一部としてデプロイする各コンテナは、Oracle Real Application Clusters (Oracle RAC)およびOracle Grid Infrastructureソフトウェアの最小ハードウェア要件を満たしている必要があります。Oracle Grid InfrastructureおよびOracle RACデータベース・ソフトウェアを環境で使用可能になっているデータ・ボリュームにインストールする場合は、Podmanイメージ上のOracle RACに5 GB以上の容量を割り当てておく必要があります。ただし、イメージ内にソフトウェアをインストールする場合は、Podmanイメージ上のOracle RACに約20 GBを割り当てておく必要があります。

Podmanエンジンのインストール

この例では、Podmanエンジンがバージョン5.4.17カーネルを搭載したOracle Linux Serverリリース8.5にインストールされます。

このコンテンツは、このシナリオのPodmanデプロイメントをまとめたものです。Podmanデプロイメントの詳細は、次のURLで『Oracle Linux Podmanユーザー・ガイド』を参照してください。

https://docs.oracle.com/en/operating-systems/oracle-linux/podman/

そのインストールでは、Podman記憶域は、xfsファイル・システムが格納されている/var/lib/containersにあります。設定後、Podmanエンジンは次の例のようになります。
# podman info
host:
  arch: amd64
  buildahVersion: 1.24.1
  cgroupControllers:
  - cpuset
  - cpu
  - cpuacct
  - blkio
  - memory
  - devices
  - freezer
  - net_cls
  - perf_event
  - net_prio
  - hugetlb
  - pids
  - rdma
  cgroupManager: systemd
  cgroupVersion: v1
  conmon:
    package: conmon-2.1.0-1.module+el8.6.0+20665+a3b29bef.x86_64
    path: /usr/bin/conmon
    version: 'conmon version 2.1.0, commit: 9a942873287e0edbdc580ebee0fcd4b3735244f5'
  cpus: 12
  distribution:
    distribution: '"ol"'
    variant: server
    version: "8.6"
  eventLogger: file
  hostname: podman-host-01
  idMappings:
    gidmap: null
    uidmap: null
  kernel: 5.4.17-2136.309.5.el8uek.x86_64
  linkmode: dynamic
  logDriver: k8s-file
  memFree: 2094616576
  memTotal: 41633333248
  networkBackend: cni
  ociRuntime:
    name: runc
    package: runc-1.0.3-2.module+el8.6.0+20665+a3b29bef.x86_64
    path: /usr/bin/runc
    version: |-
      runc version 1.0.3
      spec: 1.0.2-dev
      go: go1.17.7
      libseccomp: 2.5.2
  os: linux
  remoteSocket:
    path: /run/podman/podman.sock
  security:
    apparmorEnabled: false
    capabilities: CAP_NET_RAW,CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
    rootless: false
    seccompEnabled: true
    seccompProfilePath: /usr/share/containers/seccomp.json
    selinuxEnabled: true
  serviceIsRemote: false
  slirp4netns:
    executable: /bin/slirp4netns
    package: slirp4netns-1.1.8-2.module+el8.6.0+20665+a3b29bef.x86_64
    version: |-
      slirp4netns version 1.1.8
      commit: d361001f495417b880f20329121e3aa431a8f90f
      libslirp: 4.4.0
      SLIRP_CONFIG_VERSION_MAX: 3
      libseccomp: 2.5.2
  swapFree: 8571830272
  swapTotal: 8589930496
  uptime: 5h 22m 18.58s (Approximately 0.21 days)
plugins:
  log:
  - k8s-file
  - none
  - passthrough
  - journald
  network:
  - bridge
  - macvlan
  - ipvlan
  volume:
  - local
registries:
  search:
  - container-registry.oracle.com
  - docker.io
store:
  configFile: /etc/containers/storage.conf
  containerStore:
    number: 2
    paused: 0
    running: 2
    stopped: 0
  graphDriverName: overlay
  graphOptions:
    overlay.mountopt: nodev,metacopy=on
  graphRoot: /var/lib/containers/storage
  graphStatus:
    Backing Filesystem: xfs
    Native Overlay Diff: "false"
    Supports d_type: "true"
    Using metacopy: "true"
  imageCopyTmpDir: /var/tmp
  imageStore:
    number: 9
  runRoot: /run/containers/storage
  volumePath: /var/lib/containers/storage/volumes
version:
  APIVersion: 4.0.2
  Built: 1652749236
  BuiltTime: Tue May 17 01:00:36 2022
  GitCommit: ""
  GoVersion: go1.17.7
  OsArch: linux/amd64
  Version: 4.0.2

Oracle Grid Infrastructureデプロイメント用のLinuxリソースの割当て

Oracle Grid InfrastructureおよびOracle Real Application Clusters (Oracle RAC)コンテナ用のPodmanホストでLinuxリソースの割当ておよび構成設定を構成します。

Podmanホストでのカーネル・パラメータの設定

カーネル・リソースの割当てが適切になるように、Linuxの/etc/sysctl.confファイルを更新します。

  1. rootユーザーでログインします。
  2. vimエディタを使用して、/etc/sysctl.confのパラメータを次の値に更新します。
    • fs.aio-max-nr=1048576
    • fs.file-max = 6815744
    • net.core.rmem_max = 4194304
    • net.core.rmem_default = 262144
    • net.core.wmem_max = 1048576
    • net.core.wmem_default = 262144
    • vm.nr_hugepages=16384
  3. 次のコマンドを実行します:
    # sysctl -a
    # sysctl –p

ノート:

vm.nr_hugepagesはPodmanホストでhugepagesを有効にするため、Transparent HugePagesを無効にすることをお薦めします。このタスクの実行方法については、Oracle Database Linuxインストレーション・ガイド透過的なHugePagesの無効化を参照してください。
Oracleソフトウェア・バイナリのマウント・ポイントの作成

rootユーザーとして、ローカルまたはリモート記憶域にOracleソフトウェアのマウント・ポイントを作成します。

作成するマウント・ポイントは、すべてのPodmanホストで使用可能で、iscsiなどのインタフェースを使用し、/scratchなどのマウント・ポイントでホストにマウントされている必要があります。ローカル記憶域またはリモート記憶域の使用に関係なく、この同じマウント・ポイント・パスが各Podmanホスト上に存在する必要があります。

ノート:

デバイスを使用してホストに/scratchファイル・システムをマウントする場合、ホストの/etc/fstabファイルには/scratchのエントリがあり、オペレーティング・システムによってファイル・システム・マウント・サービスscratch.mountが生成され、ホストの再起動時にファイル・システムが自動的にマウントされます。

rootユーザーとして、次のようなコマンドを実行します。

podman-host-1の場合:

# mkdir -p /scratch/rac/cluster01/node1
podman-host-2の場合:
# mkdir -p /scratch/rac/cluster01/node2
共有メモリー・ファイル・システム・マウントの確認

このコマンドを使用して共有メモリーのマウントを確認します。

共有メモリー(/dev/shm)が十分なサイズでマウントされていることを確認します。

たとえば:

# df -h /dev/shm
Filesystem      Size  Used Avail Use% Mounted on
tmpfs            14G  168K   14G   1% /dev/shm

df -hコマンドでは、/dev/shmがマウントされているファイル・システムと、共有メモリーの総容量および空き容量がGBで表示されます。

PodmanホストでのNTPの構成

Oracle Real Application Clusters (Oracle RAC)コンテナ用のPodmanホストでネットワーク・タイム・プロトコル(NTP)機能サーバーのchrony実装の使用を設定する必要があります。

Podman上のコンテナは、Podmanホストから時刻を継承します。このため、chronydサービス・デーモンは、Oracle RACコンテナ内ではなく、Podmanホストで実行する必要があります。Oracle Linux 8では、NTPの管理のために、chronydデーモン・サービスがntpdに置き換わります。ネットワーク・タイム・サーバーの設定方法の詳細は、『Oracle Linux 8ネットワークの設定』chronyデーモン・サービスの構成方法に関する項を参照してください。

Podmanホストでのクロック・ソースの設定

Linux x86-64で仮想環境(VM)のパフォーマンスを向上させるために、クロック・ソースをtscに設定することをお薦めします。

Podmanコンテナは、Linuxホストのクロック・ソースを継承します。パフォーマンスを向上させ、Oracle Real Application Clusters (Oracle RAC)データベースのインストールに必要なクロック・ソースを提供するために、クロック・ソース設定をTSCに変更することをお薦めします。
  1. rootユーザーとして、tscクロック・ソースがシステムで使用可能かどうかを確認します。
    # cat /sys/devices/system/clocksource/clocksource0/available_clocksource
    kvm-clock tsc acpi_pm 
  2. tscクロック・ソースが使用可能な場合は、tscを現在のクロック・ソースとして設定します。
    # echo "tsc">/sys/devices/system/clocksource/clocksource0/current_clocksource
  3. 現在のクロック・ソースがtscに設定されていることを確認します。
    # cat /sys/devices/system/clocksource/clocksource0/current_clocksource
    tsc
  4. 任意のテキスト・エディタを使用して、/etc/default/grubファイルのGRUB_CMDLINE_LINUX行にclocksourceディレクティブを追加し、再起動後もこのクロック・ソース設定を保持します。
    GRUB_CMDLINE_LINUX="rd.lvm.lv=ol/root rd.lvm.lv=ol/swap rhgb quiet numa=off transparent_hugepage=never clocksource=tsc" 
PodmanホストでのOracleソフトウェアをステージングするディレクトリの作成

Oracle Grid InfrastructureおよびOracle Real Application Clustersソフトウェアをステージングするには、ローカル記憶域またはリモート記憶域にマウント・ポイントを作成します。

Oracle RACクラスタのノード1からインストールを実行するとした場合、Oracleソフトウェア用に作成するマウント・ポイントは、少なくともノード1のPodmanホストで使用可能で、コンテナ内のファイル・パス/stage/software下にマウント可能である必要があります。

rootユーザーとして、次のようなコマンドを実行します。

# mkdir -p /scratch/software/stage
# chmod a+rwx /scratch/software/stage
CVUを使用したOracle Podmanホストの準備状況の検証

Podmanホストでスタンドアロンのクラスタ検証ユーティリティ(CVU)を使用して、Podmanホストが正しく構成されていることを確認することをお薦めします。

CVUを使用すると、Oracle Real Application Clusters (Oracle RAC)用のPodmanコンテナの作成およびコンテナ内でのOracle RACのインストールの準備において、システム・チェックを支援できます。CVUによって、適切なシステム・チェックが自動的に実行され、検出された問題を解決するよう求められます。システム・チェックのメリットを得るには、Oracle RACコンテナをホストするように構成するすべてのPodmanホストでユーティリティを実行する必要があります。

CVUを取得するには、パッチ30839369: Standalone CVU version 21.7 for container host July 2022 (パッチ)をダウンロードします。

ノート:

必ず、標準のCVUディストリビューションとは異なる、コンテナ・ホストのパッチをダウンロードしてください。

Oracle RACプロセスに対するリアルタイム・モードの有効化

Unbreakable Enterprise Linux Release 6カーネル(UEKR6)でマシンの再起動時にリアルタイムCPUバジェットを作成するには、oneshot systemdサービスを作成します。

ノート:

Unbreakable Linux Kernel Release 7 (UEKR7)を使用している場合は、この手順を実行しないでください。実行しているバージョンを確認するには、次のコマンドを実行します。
uname -r

レスポンスがkernel-uek-5.4.17-2136.307.3以降の場合、UEKR6を使用しています。レスポンスがuek-5.15.0-3.60.5.1以降の場合、UEKR7を使用しています。

コンテナ内のプロセスをUEKR6のリアルタイム・モードで実行するには、/sys/fs/cgroup/cpu,cpuacct/machine.slice/cpu.rt_runtime_usにリアルタイム(RT)バジェットを移入する必要があります。oneshot systemdサービスにより、RTバジェットは自動的に移入されます。このサービスを実行する必要があるのは、Podmanコンテナ用の記憶域およびネットワーキングがホストで使用可能になった後のみです。したがって、プロパティAfter=には、サービスの包括的な依存関係として値multi-user.targetを指定できます。

oneshot systemdサービスを有効にするには、まずSystemd初期化ファイル/etc/systemd/system/podman-rac-cgroup.serviceを次の内容で作成する必要があります。

[Unit]
Description=Populate Cgroups with real time chunk on machine restart
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c "echo 950000 > /sys/fs/cgroup/cpu,cpuacct/machine.slice/cpu.rt_runtime_us && \
/bin/systemctl restart podman-restart.service"
StandardOutput=journal
CPUAccounting=yes
Slice=machine.slice
[Install]
WantedBy=multi-user.target

次に、oneshot systemdサービスを作成して開始するために、次のコマンドを実行します。


# systemctl daemon-reload
# systemctl enable podman-restart.service
# systemctl enable podman-rac-cgroup.service --now

PodmanをSELinuxモード用に構成する方法

SELinuxが有効になっている環境でPodmanコンテナを実行するには、コンテナ用にSELinuxポリシーを構成する必要があります。

セキュリティ強化Linux (SELinux)では、ポリシーを設定してコンテナに対する権限を実装する必要があります。コンテナ用にポリシー・モジュールを構成しないと、コンテナが無期限に再起動する可能性があります。クラスタのすべてのPodmanホスト・ノードをポリシー・モジュールrac-podmanに追加する必要があり、そのためには、必要なパッケージをインストールし、タイプ強制ファイルを作成(.te接尾辞で指定)してポリシーを構築し、システムにロードします。

次の例では、Podmanホストpodman-host-1をSELinuxポリシー・モジュールrac-podmanで構成しています。

[root@podman-host-1 ~]# dnf install selinux-policy-devel
[root@podman-host-1 ~]# dnf install setroubleshoot setools
[root@podman-host-1 ~]# cat /var/opt/rac-podman.te
module rac-podman  1.0;
 
require {
        type kernel_t;
        class system syslog_read;
        type container_runtime_t;
        type container_init_t;
        class file getattr;
        type container_file_t;
        type lib_t;
        type textrel_shlib_t;
        type unlabeled_t;
        class file read;
        type bin_t;
        class file { execmod execute map setattr };
 
}
 
#============= container_init_t ==============
allow container_init_t container_runtime_t:file getattr;
allow container_init_t bin_t:file map;
allow container_init_t bin_t:file execute;
allow container_init_t container_file_t:file execmod;
allow container_init_t lib_t:file execmod;
allow container_init_t textrel_shlib_t:file setattr;
allow container_init_t kernel_t:system syslog_read;
allow container_init_t unlabeled_t:file read;
 
[root@podman-host-1 ~]# cd /var/opt
[root@podman-host-1 ~]# make -f /usr/share/selinux/devel/Makefile rac-podman.pp
[root@podman-host-1 ~]# semodule -i rac-podman.pp
[root@podman-host-1 ~]# semodule -l | grep rac-pod
 

podman-host-2について、このプロセスを繰り返します。

次のコマンドを完了した後に、コンテナで使用されるホスト・ディレクトリのファイル・コンテキストを変更します:

[root@podman-host-1 ~]# semanage fcontext -a -t container_file_t /scratch/rac/cluster01/node1
[root@podman-host-1 ~]# restorecon -vF /scratch/rac/cluster01/node1

[root@podman-host-2 ~]# semanage fcontext -a -t container_file_t /scratch/rac/cluster01/node2
[root@podman-host-2 ~]# restorecon -vF /scratch/rac/cluster01/node2

PodmanでのOracle RAC用のPodmanイメージのビルド

Oracle Real Application Clusters (Oracle RAC)インストール・イメージをビルドするには、イメージ・ディレクトリを作成してイメージを作成し、Podmanホストがインターネットに接続されていることを確認します。

ノート:

あるPodmanホストではこの手順を実行し、他のPodmanホストではイメージを使用することも、各Podmanホストで同じイメージ・ビルドの手順を繰り返すこともできます。

Podmanイメージ・ビルド・ディレクトリの作成

Podmanイメージの作成を実行するには、この手順を使用してビルド・プロセス用のディレクトリを作成します。

rootとしてログインし、次のコマンドを入力します。
# mkdir /scratch/image
# cd /scratch/image

コンテナ設定スクリプトの準備

デバイスの権限、デフォルトのルートおよびホスト環境の構成を維持するには、コンテナの再起動後に自動的に実行してコンテナ環境を構成するスクリプトを作成します。

Podmanコンテナを再起動すると、そのコンテナ用に以前構成されていたデバイスの権限、デフォルトのルートおよび/etc/hostsエントリがリセットされます。PodmanおよびPodmanコンテナの再起動の間で構成を維持するには、この手順を使用して、再起動後に環境を設定するために各コンテナで実行するように構成できるスクリプトを作成します。

Oracle Real Application Clusters (Oracle RAC)ではsystemdに基づいてコンテナを使用するため、Oracle RACスリム・イメージの作成時にコンテナ内の/etc/rc.localフォルダにスクリプトを追加することで、再起動のたびにコンテナ環境スクリプトを実行できます。再起動後、rc.localに追加したスクリプトで、Podmanコンテナ環境を確実に復元できます。これらの各ステップを順に実行します。Podmanイメージ・ビルド・ディレクトリ(この例では/stage/image)にファイルおよびスクリプトを作成します。

  1. コンテナ環境用のPodmanホストでresolv.confを作成し、移入します。また、このresolv.confにはドメイン・ネーム・サーバー(DNS)検索のエントリおよび検索ドメインが含まれるため、コンテナを複数のホストにデプロイする場合、作成したこのファイルが、イメージがビルドされるすべてのPodmanホストで使用できるようにする必要があります。

    このガイドの構成例では、DNSに関するホスト・ファイルの内容は次のとおりです。

    search example.info 
    nameserver 162.88.2.6
    
  2. Podmanコンテナのホスト名がDNSにない場合(ステップ1を参照)、イメージがビルドされるすべてのPodmanホストでhostfileを作成して移入し、PodmanコンテナのパブリックIPアドレス、プライベートIPアドレスおよび仮想IPアドレスのホスト・エントリをファイルに移入します。環境に対して設定したIPアドレスおよびホスト名を使用します。コンテナを複数のホストにデプロイする場合は、コンテナをデプロイする予定のすべてのPodmanホストでhostfileが使用できるようにする必要があります。

    このガイドの構成例では、ホスト・ファイルの内容は次のとおりです。

    127.0.0.1 localhost
    ::1 localhost ip6-localhost ip6-loopback
    
    ## Public IP addresses
    10.0.20.150 racnode1.example.info racnode1
    10.0.20.151 racnode2.example.info racnode2
    
    ## Virtual IP addresses
    10.0.20.160 racnode1-vip.example.info racnode1-vip
    10.0.20.161 racnode2-vip.example.info racnode2-vip
    
    ## Private IPs
    192.168.17.150 racnode1-priv.example.info racnode1-priv
    192.168.17.151 racnode2-priv.example.info racnode2-priv
    
  3. Podmanイメージ・ビルド・ディレクトリにスクリプトsetupContainerEnv.shを作成し、次の内容をスクリプトにコピーして貼り付けます。

    たとえば:

    
    #!/bin/bash
    chown grid:asmadmin /dev/asm-disk1
    chown grid:asmadmin /dev/asm-disk2
    chmod 660 /dev/asm-disk1
    chmod 660 /dev/asm-disk2
    ip route del default
    # In the ip route command, replace with appropriate gateway IP
    ip route add default via 10.0.20.1
    cat /opt/scripts/startup/resolv.conf > /etc/resolv.conf
    cat /opt/scripts/startup/hostfile > /etc/hosts
    systemctl reset-failed
    

    常にスクリプト内のファイルの場所に対して完全なパスを使用し、スクリプトではPATH変数の設定を不要にします。

このスクリプトを追加して、コンテナ起動時にOracle RACコンテナの/etc/rc.localを使用して実行します。このステップは、PodmanイメージでのOracle RACデータベースの構築に関する項を参照してください。setupContainerEnv.shスクリプトをコールするための行を/etc/rc.localに追加した後に、Podmanコンテナがリセットされた場合、Podmanコンテナが起動されてinitがロードされると、setupContainerEnv.shはコンテナの再起動のたびに次の操作を実行します。
  1. デフォルトのゲートウェイを設定します
  2. ASMデバイスに対する正しいデバイス権限を設定します
  3. /etc/hostsファイルを設定します。
  4. /etc/resolv.confファイルを設定します。

複数のホストにコンテナをデプロイする場合は、イメージがビルドされるすべてのPodmanホストにsetupContainerEnv.shをコピーする必要があります。

ノート:

イメージ・ビルド時の設定スクリプトと、resolv.confおよびhostfileファイルの内容が、ビルド中にPodmanイメージに埋め込まれます。その内容は、同じイメージを他のデプロイメントに使用してデプロイされたコンテナに適用されない場合があるので、ASMディスクおよびネットワーク構成が異なります。ただし、コンテナを作成して起動した後に、たとえば、コンテナにログインして/opt/scripts/startupのファイルおよびスクリプトを編集することで、その内容を変更できます。

PodmanイメージでのOracle RAC用のContainerfileの作成

Oracle Real Application Clusters (Oracle RAC) Podmanファイル・イメージを設定するには、ベースOracle Linuxイメージをプルする必要があります。

  1. /scratch/image下にContainerfileというファイルを作成します。
  2. Containerfileをエディタで開き、次の行をファイルに貼り付けます。
    # Pull base image
    # ---------------
    FROM oraclelinux:8
    # Environment variables required for this build (do NOT change)
    # -------------------------------------------------------------
    ## Environment Variables
    ## ---
    ENV SCRIPT_DIR=/opt/scripts/startup \
        RESOLVCONFENV="resolv.conf" \
        HOSTFILEENV="hostfile" \
        SETUPCONTAINERENV="setupContainerEnv.sh"
    
    ### Copy Files
    # ----
    
    COPY  $SETUPCONTAINERENV $SCRIPT_DIR/
    
    ### RUN Commands
    # -----
    COPY $HOSTFILEENV $RESOLVCONFENV $SCRIPT_DIR/
    RUN dnf install -y oracle-database-preinstall-19c systemd vim passwd openssh-server hostname xterm xhost vi policycoreutils-python-utils && \
     dnf clean all && \
     sync && \
     groupadd -g 54334 asmadmin && \
     groupadd -g 54335 asmdba && \
     groupadd -g 54336 asmoper && \
     useradd -u 54332 -g oinstall -G oinstall,asmadmin,asmdba,asmoper,racdba,dba grid && \
     usermod -g oinstall -G oinstall,dba,oper,backupdba,dgdba,kmdba,asmdba,racdba,asmadmin oracle && \
     cp /etc/security/limits.d/oracle-database-preinstall-19c.conf /etc/security/limits.d/grid-database-preinstall-19c.conf && \
     sed -i 's/oracle/grid/g' /etc/security/limits.d/grid-database-preinstall-19c.conf && \
     rm -f /etc/rc.d/init.d/oracle-database-preinstall-19c-firstboot && \
     rm -f /etc/sysctl.conf && \
     rm -f /usr/lib/systemd/system/dnf-makecache.service && \
     echo "$SCRIPT_DIR/$SETUPCONTAINERENV" >> /etc/rc.local && \
     chmod +x $SCRIPT_DIR/$SETUPCONTAINERENV && \
     chmod +x /etc/rc.d/rc.local && \
     setcap 'cap_net_admin,cap_net_raw+ep' /usr/bin/ping && \
     sync
    
    USER root
    WORKDIR /root
    VOLUME ["/stage/software"]
    VOLUME ["/u01"]
    CMD ["/usr/sbin/init"]
    # End of the Containerfile
    

アプリケーションに追加のパッケージが必要な場合は、それらをRUN yumコマンドに追加できます。

PodmanイメージでのOracle RACの作成

Oracle Real Application Clusters (Oracle RAC)イメージを作成するには、必要に応じてOracle Linux環境を設定し、Containerfileおよびコンテキストからイメージをビルドします。

  1. rootとしてログインし、以前に準備したイメージ作成用のディレクトリに移動します。

    # cd /scratch/image
  2. ユースケースの手順を実行します。

    • サーバーがプロキシ・ファイアウォールの内側にある場合:
      • 次のコマンドを実行します。説明:
        • localhost-domainは、ネットワーク内のインターネット・ゲートウェイのローカル・ホストおよびドメインです
        • http-proxyは、ネットワーク環境のHTTPプロキシ・サーバーです
        • https-proxyは、ネットワーク環境のHTTPSプロキシ・サーバーです
        • 19.16 RUで更新済の19.3は、コンテナ内にインストールしようとしているOracle Databaseリリースです。
      # export NO_PROXY=localhost-domain 
      # export http_proxy=http-proxy
      # export https_proxy=https-proxy
      # export version=19.16
      # podman build --force-rm=true --no-cache=true --build-arg \
      http_proxy=${http_proxy} --build-arg https_proxy=${https_proxy} \
      -t oracle/database-rac:$version-slim  -f Containerfile .
    • サーバーがプロキシ・ファイアウォールの内側にない場合:
      • 次のコマンドを実行します(versionは、Podmanコンテナ内にインストールしようとしているOracle Databaseリリース(19.16など)です)。
      # export version=19.16 
      # podman build --force-rm=true --no-cache=true -t oracle/database-rac:$version-slim -f Containerfile .
  3. イメージが正常にビルドされると、Podmanホストに作成されたイメージoracle/database-rac:19.16-slimが表示されます。

    [root@podman-host--1 image]# podman images
    REPOSITORY                                    TAG         IMAGE ID      CREATED        SIZE
    localhost/oracle/database-rac                 19.16-slim  9d5fed7eb7ba  7 seconds ago  396 MB
    container-registry.oracle.com/os/oraclelinux  8-slim      2ea85efcdb48  3 weeks ago    114 MB
    container-registry.oracle.com/os/oraclelinux  8           e6ca9618a97b  3 weeks ago    243 MB
    
  4. イメージをtarファイルに保存して、他のPodmanホストに転送します。

    # podman image save -o /var/tmp/database-rac.tar localhost/oracle/database-rac:19.16-slim 
    # scp -i <ssh key for host podman-host-2> /var/tmp/database-rac.tar opc@podman-host-2:/var/tmp/database-rac.tar
    
  5. 他のPodmanホストで、tarファイルからイメージをロードし、ロードされたことを確認します。

    # podman image load -i /var/tmp/database-rac.tar 
    # podman images
    REPOSITORY                                    TAG         IMAGE ID      CREATED        SIZE
    localhost/oracle/database-rac                 19.16-slim  9d5fed7eb7ba  2 minutes ago  396 MB
    container-registry.oracle.com/os/oraclelinux  8           dfce5863ff0f  2 months ago   243 MB

Podman上のOracle RACへの中央イメージ・リポジトリの使用

Podmanイメージのコンテナ・イメージ・リポジトリを設定することを選択できます。

Podmanホストが到達可能なコンテナ・イメージ・リポジトリがネットワーク上にある場合、Podmanイメージ上のOracle RACが1つのPodmanホストで作成されると、リポジトリにプッシュしてすべてのPodmanホストで使用できます。リポジトリの設定および使用の詳細は、Podmanドキュメントを参照してください。

Oracle ASM用の共有デバイスのプロビジョニング

Oracle Automatic Storage Management (Oracle ASM)用の記憶域デバイスはクリーン・ディスクを使用してプロビジョニングする必要があります。

Oracle Real Application Clustersの記憶域では、ブロック記憶域またはネットワーク・ファイル・システム(NFS)でOracle ASMを使用する必要があります。Podman上のOracle RACにOracle Advanced Storage Management Cluster File System (Oracle ACFS)を使用することはサポートされていません。

Oracle ASMに使用するデバイスには、既存のファイル・システムを含めないでください。デバイスの他の既存のファイル・システム・パーティションまたはプライマリ・ブート・レコードを上書きするには、次のようなコマンドを1つのPodmanホストで使用します。

# dd if=/dev/zero of=/dev/sdd  bs=1024k count=1024
# dd if=/dev/zero of=/dev/sde  bs=1024k count=1024

このデプロイメントの例では、Podmanホスト・デバイス/dev/sddおよび/dev/sdeは両方のPodmanホストで同じデバイス・パスに存在し、コンテナで/dev/asm-disk1および/dev/asm-disk2としてマップされます。このマッピングは、コンテナ作成手順「Oracle RACコンテナの作成」で行われます

PodmanでのOracle RAC用のパブリック・ネットワークおよびプライベート・ネットワークの作成

この例では、Oracle Real Application Clusters (Oracle RAC)用のパブリック・ネットワークおよびプライベート・ネットワークを構成する方法を示します。

インストールを開始する前に、コンテナ内に少なくとも1つのパブリック・ネットワークおよび2つのプライベート・ネットワークを作成する必要があります。冗長プライベート・ネットワークを作成することをお薦めします。この例は、独自の構成のモデルとして使用しますが、ネットワーク・ドメインで構成するアドレスを使用します。

開発テストでは、次の構成を使用して、プライベートIPアドレスでネットワークが作成されます。

  • rac_eth0pub1_nw (10.0.20.0/24): パブリック・ネットワーク
  • rac_eth1priv1_nw (192.168.17.0/24): プライベート・ネットワーク1
  • rac_eth2priv2_nw (192.168.18.0/24): プライベート・ネットワーク2

このドキュメントの以降の他の例では、これらのネットワーク名およびアドレスを使用します。

Podmanホストで親ゲートウェイ・インタフェースを使用してパブリック・ネットワークを設定するには、Podman MACVLANドライバまたはIPVLANドライバを使用して、マルチホスト用のPodmanでOracle RACを実行する必要があります。また、使用するゲートウェイ・インタフェースは、Oracle Grid Infrastructureの単一クライアント・アクセス名(SCAN)およびホスト名を登録したドメイン・ネーム・サーバー(DNS)が解決先にできるものである必要があります。この例では、パブリック・ネットワークにmacvlanを使用し、様々なPodmanホスト間でのOracle RACプライベート・ネットワーク通信にもmacvlanを使用しました。

--subnetオプションは、-o parentパラメータで指定された物理インタフェースに関連付けられたサブネットに対応している必要があります。-o parentパラメータでは、macvlanインタフェースを関連付ける物理インタフェースをリストする必要があります。--gatewayオプションは、物理インタフェースのネットワーク上のゲートウェイに対応している必要があります。詳細は、Podmanドキュメントを参照してください。

ネットワーク構成には、標準の最大転送単位(MTU)ネットワークとジャンボ・フレームMTUネットワークの2つのオプションがあります。Oracle RAC通信のパフォーマンスを向上させるために、ネットワーク・インタフェースに対してジャンボ・フレームを有効にし、MTUが1,500バイトを超えるようにすることをお薦めします。ジャンボ・フレームを有効にした場合、ネットワーク・デバイス・オプション・パラメータを使用して、ネットワークのMTUパラメータをジャンボフレームMTUと同じ値に設定できます。

例2-1 標準フレームMTUネットワーク構成

標準フレームMTUネットワークは次のように構成されます。

# ip link show | egrep "eth0|eth1|eth2"
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
5: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
# podman network create -d macvlan --subnet=10.0.20.0/24 --gateway=10.0.20.1 -o parent=eth0 rac_eth0pub1_nw
# podman network create -d macvlan --subnet=192.168.17.0/24 -o parent=eth1 rac_eth1priv1_nw
# podman network create -d macvlan --subnet=192.168.18.0/24 -o parent=eth2 rac_eth2priv2_nw

例2-2 ジャンボ・フレームMTUネットワーク構成

ジャンボ・フレームMTUネットワークは次のように構成されます。

[podman-host-01 ~]$ ip link show | egrep "eth0|eth1|eth2"
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
5: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000

各インタフェースでのMTUが9000に設定されている場合、各Podmanホストで次のコマンドを実行して、MTU全体を使用するように各ネットワークの最大ペイロード長を拡張できます。

# podman network create -d macvlan --subnet=10.0.20.0/24 --gateway=10.0.20.1 -o mtu=9000 parent=eth0 -o rac_eth0pub1_nw
# podman network create -d macvlan --subnet=192.168.17.0/24 -o parent=eth1 -o mtu=9000 rac_eth1priv1_nw
# podman network create -d macvlan --subnet=192.168.18.0/24 -o parent=eth2 -o mtu=9000 rac_eth2priv2_nw

PodmanコンテナでOracle RACを実行するようにネットワークを設定するには、複数のパブリック・ネットワークと、3つ以上のプライベート・ネットワークまたは1つのプライベート・ネットワークのみの使用を選択できます。複数のネットワークを構成する場合、これらのネットワークを作成するには、ネットワークに適した値を使用してpodman network createコマンドを繰り返します。

ネットワークの作成後、コマンドpodman network lsを実行します。このコマンドの結果には、次のようなPodmanホストで作成されたネットワークが表示されます。

[root@podman-host--1 image]# podman network ls
NETWORK ID      NAME                   DRIVER
2f259bab93aa    podman                 bridge
0b560469e2e6    rac_eth0pub1_nw        macvlan
85c5e0aa3969    rac_eth1priv1_nw       macvlan
606a44672e40    rac_eth2priv2_nw       macvlan

デプロイ前に考慮するオプション

PodmanにOracle RACをデプロイする前に、ネットワークおよびホストの構成オプションを確認します。

デプロイ前に、1つのプライベート・ネットワークを使用するか、複数のプライベート・ネットワークを構成するかを決定できます。次のいずれかのオプションを選択することもできます。

  • 複数のPodmanホスト
  • 単一のPodmanホスト上の複数のPodmanブリッジ

使用するネットワーク構成オプションを決定したら、選択した構成のデプロイメント手順を完了します。

Unbreakable Linux Kernel Release 6 (UEK6)とUnbreakable Linux Kernel Release 7 (UEK7)には違いがあります。これらについては、必要に応じて説明します。

ノート:

このドキュメントでは、一般的な推奨されるブロック・デバイス記憶域およびネットワーク・オプションを示します。ただし、デプロイメント・トポロジおよび記憶域の可能性に応じて、PodmanでのOracle RACのデプロイ要件により適した他のオプションを検討できます。

PodmanでのOracle RACの記憶域用のNFSの構成

記憶域にNFSを使用する場合は、Oracle Grid InfrastructureおよびOracle RACファイル用にNFSボリュームを作成し、Oracle RACコンテナで使用できるようにします。

Linux x86-64上のOCRおよび投票ディスク・ファイルに使用されないバイナリ、Oracle Databaseデータ・ファイルおよびOracle ASMディスクグループのOracle RAC NFSマウント・オプションは次のとおりです。

rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0

Oracle Clusterware OCRおよび投票ディスク・ファイルのNFSマウントの場合は、マウント・オプションにnoacを追加し、OCRおよび投票ディスク・ファイルがASMディスク・グループに配置されるようにします。

rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,noac,vers=3,timeo=600,actimeo=0
目的とするユースケースに必要なマウント・オプション用にNFSボリュームを作成すると、コンテナで使用できます。詳細は、My Oracle Supportの『Mount Options for Oracle files for RAC databases and Clusterware when used with NFS on NAS devices』(ドキュメントID 359515.1)を参照してください。

例2-3 Oracle Real Application Clustersデータ・ファイル用のNFSボリューム

Oracle Databaseデータ・ファイルの記憶域として使用できるNFSボリュームを作成するには、このコマンドを使用できます(nfs-serverはNFSサーバーのIPまたはホスト名です)。

podman volume create --driver local \
--opt type=nfs \
--opt o=addr=nfs-server,rw,bg,hard,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0 \
--opt device=:/oradata \
racstorage

例2-4 Oracle Clusterwareファイル用のNFSボリューム

クラスタ共有記憶域として使用できるNFSボリュームを作成するには、このコマンドを使用できます(nfs-serverはNFSサーバーのIPまたはホスト名です)。

たとえば、Oracle Databaseファイルに使用できるNFSボリュームを作成するには、このコマンドを使用できます(nfs-serverはNFSサーバーのIPまたはホスト名です)。

podman volume create --driver local \
--opt type=nfs \
--opt o=addr=nfs-server,rw,bg,hard,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0,noac \
--opt device=:/crs \
crsstorage

この場合、ボリュームを作成するときに、Podman podman container createコマンドで次の引数を指定します。


  --volume racstorage:/oradata \

これらの例のコマンドが実行され、Podmanコンテナがボリューム引数を使用して作成されると、コンテナの稼働時に/oradataにあるNFSファイル・システムにアクセスできます。

PodmanでのOracle RAC用の複数のプライベート・ネットワーク・オプション

デプロイの前に、PodmanでOracle RACに複数のプライベート・ネットワークを使用する場合は、プライベート・インターコネクトに複数のNICを使用できるようにPodmanコンテナの作成を変更します。

Oracle Real Application Clusters (Oracle RAC)に複数のプライベート・ネットワークを使用する場合は、チューニング可能なrp_filter0または2に設定する必要があります。rp_filter値を設定するには、コンテナの作成時にpodman createコンテナ・コマンドにチューニング可能な引数を追加します。

--sysctl 'net.ipv4.conf.private_interface_name.rp_filter=2'

以前に構成したパブリック・ネットワークおよびプライベート・ネットワークへの接続順序に基づいて、このコマンドで定義するプライベート・インタフェース名を予測できます。

たとえば、このガイドのプライベート・ネットワークrac_eth1priv1_nwは、パブリック・ネットワークの後に接続されます。rac_eth1priv1_nwに対して構成されたインタフェース名がeth1である場合、イーサネット・ネットワーク・インタフェースは接続の順序によって割り当てられるため、インタフェースでの2つ目のプライベート・ネットワーク接続はインタフェース名eth2になります。

この場合、podman container createコマンドで次の引数を指定します。

--sysctl 'net.ipv4.conf.eth1.rp_filter=2' --sysctl 'net.ipv4.conf.eth2.rp_filter=2'. 

複数のPodmanホスト・オプション

複数のPodmanホストを使用する場合は、この例のようなコマンドを使用してネットワーク・ブリッジを作成します。

外部ネットワークへの接続には、(引数-o parent=adapter nameを使用して)親アダプタとともにPodman MACVLANドライバを使用する必要があります。

# podman network create -d macvlan --subnet=10.0.20.0/24 --gateway=10.0.20.1 -o parent=eth0 rac_eth0pub1_nw 
# podman network create -d macvlan --subnet=192.168.17.0/24 -o parent=eth1 rac_eth1priv1_nw

ノート:

各PodmanホストのPodmanイメージでOracle RACを構築するプロセスを繰り返さない場合は、1つのPodmanホストでPodmanイメージを作成し、そのイメージをTARファイルにエクスポートできます。このオプションを使用するには、イメージを作成するPodmanホストでpodman image saveコマンドを実行し、tarファイルを他のPodmanホストに転送します。次に、これらのPodmanホストではpodman image loadコマンドを使用してイメージをインポートできます。これらのコマンドの詳細は、Podmanドキュメントを参照してください。

単一のPodmanホスト上の複数のPodmanブリッジ・オプション

使用している環境でMACVLANドライバを使用できない場合は、この例を使用して、単一のホストにPodmanブリッジを作成する方法を確認できます。

MACVLANを使用できない場合でも、Podmanブリッジを環境に作成できます。ただし、このブリッジは外部ネットワークから到達できません。また、特定のクラスタ用のOracle RAC Podmanコンテナは同じPodmanホスト内に限定されます。

ノート:

ブリッジ・ネットワークでジャンボ・フレームMTUを有効にするには、次のオプションを使用できます。

option "-o mtu=9000"

Podmanホストと同様にログインし、次のようなコマンドを使用します。

# podman network create --driver=bridge --subnet=10.0.20.0/24 rac_eth0pub1_nw
# podman network create --driver=bridge --subnet=192.168.17.0/24 rac_eth1priv1_nw

Oracle RACコンテナの作成

Oracle Real Application Clusters (Oracle RAC)コンテナを作成するには、これらの例のようなPodman createコマンドを実行します。

ブロック・デバイスを使用したRacnode1コンテナの作成

この手順を使用して、podman-host-1上のPodmanに1つ目のOracle RACコンテナを作成します。

この例をPodmanホストで使用するには、--cpuset-cpu--memoryおよび--device --dnsの値を使用している環境に適した値に変更します。--dnsで指定したドメイン・ネーム・サーバー(DNS)が、Oracle Grid Infrastructureに使用する予定のホスト名および単一クライアント・アクセス名(SCAN)を解決できることを確認します。次のコマンドで説明されているすべてのオプションを理解するには、ホストにインストールされているPodmanバージョンのPodmanドキュメントを参照してください。手動コマンドを使用してコンテナを正常に停止することもできます。このドキュメントのRACコンテナを正常に停止する方法を参照してください。

ノート:

UEKR7を使用してOracle RACコンテナをデプロイする場合は、Oracle RACコンテナ作成コマンドで--systemd=true \の前にある次の行を省略する必要があります。
--cpu-rt-runtime 95000 \ 

省略しないと、コンテナの起動に失敗します

# podman create -t -i \
  --hostname racnode1 \
  --shm-size 2G \
  --dns-search=example.info \
  --dns=162.88.2.6 \
  --device=/dev/sdd:/dev/asm-disk1:rw  \
  --device=/dev/sde:/dev/asm-disk2:rw  \
  --privileged=false  \
  --volume /scratch/software/stage:/software/stage \
  --volume /scratch/rac/cluster01/node1:/u01 \
  --cpuset-cpus 0-3 \
  --memory 16G \
  --memory-swap 32G \
  --sysctl kernel.shmall=2097152  \
  --sysctl "kernel.sem=250 32000 100 128" \
  --sysctl kernel.shmmax=8589934592  \
  --sysctl kernel.shmmni=4096 \
  --sysctl 'net.ipv4.conf.eth1.rp_filter=2' \
  --sysctl 'net.ipv4.conf.eth2.rp_filter=2' \
  --cap-add=SYS_NICE \
  --cap-add=SYS_RESOURCE \
  --cap-add=NET_ADMIN \
  --cap-add=AUDIT_WRITE \
  --cap-add=AUDIT_CONTROL \
  --restart=always \
  --cpu-rt-runtime=95000 \
  --ulimit rtprio=99  \
  --systemd=true \
  --name racnode1 \
oracle/database-rac:19.16-slim

ブロック・デバイスを使用したRacnode2コンテナの作成

この手順を使用して、podman-host-2上のPodmanに2つ目のOracle Real Application Clusters (Oracle RAC)コンテナを作成します。

この例をPodmanホストで使用するには、--cpuset-cpu--memoryおよび--device --dnsの値を使用している環境に適した値に変更します。--dnsで指定したドメイン・ネーム・サーバー(DNS)が、Oracle Grid Infrastructureに使用する予定のホスト名および単一クライアント・アクセス名(SCAN)を解決できることを確認します。次のコマンドで説明されているすべてのオプションを理解するには、ホストにインストールされているPodmanバージョンのPodmanドキュメントを参照してください。手動コマンドを使用してコンテナを正常に停止することもできます。このドキュメントのRACコンテナを正常に停止する方法を参照してください。

ノート:

UEKR7を使用してOracle RACコンテナをデプロイする場合は、Oracle RACコンテナ作成コマンドで--systemd=true \の前にある次の行を省略する必要があります。
--cpu-rt-runtime 95000 \ 

省略しないと、コンテナの起動に失敗します

# podman create -t -i \
  --hostname racnode2 \
  --shm-size 2G \
  --dns-search=example.info \
  --dns=162.88.2.6 \
  --device=/dev/sdd:/dev/asm-disk1:rw  \
  --device=/dev/sde:/dev/asm-disk2:rw  \
  --privileged=false  \
  --volume /scratch/rac/cluster01/node2:/u01 \
  --cpuset-cpus 0-3 \
  --memory 16G \
  --memory-swap 32G \
  --sysctl kernel.shmall=2097152  \
  --sysctl "kernel.sem=250 32000 100 128" \
  --sysctl kernel.shmmax=8589934592  \
  --sysctl kernel.shmmni=4096 \
  --sysctl 'net.ipv4.conf.eth1.rp_filter=2' \
  --sysctl 'net.ipv4.conf.eth2.rp_filter=2' \
  --cap-add=SYS_NICE \
  --cap-add=SYS_RESOURCE \
  --cap-add=NET_ADMIN \
  --cap-add=AUDIT_WRITE \
  --cap-add=AUDIT_CONTROL \
  --restart=always \
  --cpu-rt-runtime=95000 \
  --ulimit rtprio=99  \
  --name racnode2 \
oracle/database-rac:19.16-slim

ネットワークの接続とPodmanコンテナの起動

コンテナを起動する前に、パブリック・ネットワークとプライベート・ネットワークを設定し、ネットワークをOracle RACコンテナに割り当てます。

Oracle RACコンテナへのネットワークの割当て

次の手順を使用して、Podmanコンテナ上のOracle RACで作成した各Oracle Real Application Clusters (Oracle RAC)ノードにネットワークを割り当てます。

各ノードで特定のネットワークに使用されるネットワーク・インタフェース名を必ず同じになるようにするには、各ノードで、関連付けられたネットワークに対してまったく同じ順序の切断および接続のコマンドを使用する必要があります。たとえば、すべてのノードで一貫してeth0インタフェースはパブリックです。eth1インタフェースは1つ目のプライベート・ネットワーク・インタフェースであり、eth2インタフェースは2つ目のプライベート・ネットワーク・インタフェースです。

podman-host-1では、ネットワークをracnode1に割り当てます。

# podman network disconnect podman racnode1
# podman network connect rac_eth0pub1_nw --ip 10.0.20.150 racnode1
# podman network connect rac_eth1priv1_nw --ip 192.168.17.150  racnode1
# podman network connect rac_eth2priv2_nw --ip 192.168.18.150  racnode1

podman-host-2では、ネットワークをracnode2に割り当てます。

# podman network disconnect podman racnode2
# podman network connect rac_eth0pub1_nw --ip 10.0.20.151 racnode2
# podman network connect rac_eth1priv1_nw --ip 192.168.17.151  racnode2
# podman network connect rac_eth2priv2_nw --ip 192.168.18.151  racnode2

Podmanコンテナの起動とネットワークへの接続

Podman環境でOracle RACを有効にするには、コンテナを起動します。

podman-host-1の場合

# systemctl start podman-rac-cgroup.service
# podman start racnode1

podman-host-2の場合

# systemctl start podman-rac-cgroup.service
# podman start racnode2

memlock制限の調整

コンテナ合計メモリーがホストのmemlock制限の計算に含まれるようにするには、Podmanコンテナの作成後にコンテナの制限を調整します。

この手順では、Podmanコンテナにログインし、合計コンテナ・メモリーを評価してから、memlock制限に推奨される90%の値を導出します。この例のコンテナは、racnode1およびracnode2です。
  1. racnode1にrootとしてログインし、次のコマンドを実行します。

    [root@racnode1 ~]# CONTAINER_MEMORY=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
    
    [root@racnode1 ~]# echo $CONTAINER_MEMORY
    17179869184
    
    [root@racnode1 ~]# echo $((($CONTAINER_MEMORY/1024)*9/10))
    15099494
    
    

    既存のmemlock制限値を評価された値に置き換えます。

    
    
    [root@racnode1 ~]# grep memlock
    /etc/security/limits.d/oracle-database-preinstall-19c.conf
    # oracle-database-preinstall-19c setting for memlock hard limit is maximum of
    128GB on x86_64 or 3GB on x86 OR 90 % of RAM
    oracle   hard   memlock    222604311
    # oracle-database-preinstall-19c setting for memlock soft limit is maximum of
    128GB on x86_64 or 3GB on x86 OR 90% of RAM
    oracle   soft   memlock    222604311
    
    [root@racnode1 ~]# sed -i -e 's,222604311,15099494,g'
    /etc/security/limits.d/oracle-database-preinstall-19c.conf
    
    [root@racnode1 ~]# grep memlock
    /etc/security/limits.d/oracle-database-preinstall-19c.conf
    # oracle-database-preinstall-19c setting for memlock hard limit is maximum of
    128GB on x86_64 or 3GB on x86 OR 90 % of RAM
    oracle   hard   memlock    15099494
    # oracle-database-preinstall-19c setting for memlock soft limit is maximum of
    128GB on x86_64 or 3GB on x86 OR 90% of RAM
    oracle   soft   memlock    15099494
  2. oracleユーザーのmemlock値を変更した後、gridユーザーの2つ目の制限構成ファイルについて値の置換を繰り返します。そのファイルは/etc/security/limits.d/grid-database-preinstall-19c.confです。

    [root@racnode1 ~]# sed -i -e 's,222604311,15099494,g'
    /etc/security/limits.d/grid-database-preinstall-19c.conf
  3. racnode2にrootとしてログインし、手順を繰り返します。

Oracle Grid InfrastructureおよびOracle Databaseソフトウェアのダウンロード

Oracle Technology NetworkからOracle DatabaseおよびOracle Grid Infrastructureソフトウェアをダウンロードし、ステージングします。

コンテナの作成方法として、ステージングされたダウンロード・ファイルにコンテナがアクセスするためにプロビジョニングされたPodmanボリュームがあります。Podmanコンテナ作成コマンドのこの行により、ボリュームが作成されます。

--volume /scratch/software/stage:/software/stage \

ソフトウェアをPodmanホストにダウンロードして/scratch/software/stageフォルダにステージングし、コンテナ内でこれらのファイルが/software/stageでアクセスできるようにします。

  • Oracle Database 19c Grid Infrastructure (19.3) for Linux x86-64 (LINUX.X64_193000_grid_home.zip)
  • Oracle Database 19c (19.3) for Linux x86-64 (LINUX.X64_193000_db_home.zip)
  • Oracle Grid Infrastructure 19.16 GIRU、パッチ34130714
  • パッチ34339952、Oracle Grid Infrastructure 19.16上にパッチ適用
  • パッチ32869666、Oracle Grid Infrastructure 19.16上にパッチ適用
  • 最新のOPatchバージョン(このリリースの時点では、p6880880_190000_Linux-x86-64.zip)

https://www.oracle.com/database/technologies/

Oracle Database用のOPatchの最新バージョンをダウンロードします。

Primary Note For OPatch (Doc ID 293369.1)

コンテナへのOracle Grid InfrastructureおよびOracle RACのデプロイ

コンテナを準備したら、標準のOracle Grid InfrastructureおよびOracle Real Application Clusters (Oracle RAC)を完了します。

プラットフォーム固有のインストレーション・ガイドの指示に従って、Oracle Grid Infrastructureをインストールして構成し、Oracle Real Application Clusters (Oracle RAC) 19cをデプロイし、リリース更新(RU) 19.16 (Oracle Database 19.16 RU、パッチ3413364)にパッチを適用します。開始する前に、最新のOpatchリリース(p6880880_190000_Linux-x86-64.zip)をダウンロードします。Oracle Grid Infrastructureのインストール中にRUを適用するには、-applyRUフラグを使用できます。ソフトウェアのインストール中に個別パッチを適用するには、-applyOneOffsフラグを使用できます。

デプロイ後に考慮するオプション

Oracle RACをコンテナにデプロイした後、Oracle Real Application Clusters (Oracle RAC)ノードを追加または削除するか、異なるリリースのOracle RACをインストールするかを選択できます。

デプロイ完了後、Podman上のOracle RACクラスタを変更できます。

Oracle RACノードの追加

Oracle RACコンテナで実行されている既存のOracle RACクラスタでOracle RACノードを追加するには、このドキュメントの「Oracle RACコンテナの作成」で説明されているのと同じ方法でコンテナを作成しますが、コンテナの名前とホスト名を変更する必要があります。その他に必要なステップは、Oracle Grid Infrastructureドキュメントを参照してください。

PodmanでのOracle RACの既知の問題

PodmanコンテナにOracle Real Application Clusters (Oracle RAC)をデプロイする際、問題が発生した場合は、既知の問題かどうかを確認してください。

PodmanデプロイメントでのOracle RACに固有の問題については、My Oracle SupportドキュメントID 2885873.1を参照してください。

Podman上のOracle RAC構成に関する追加情報

この情報は、Podman上のOracle Real Application Clusters (Oracle RAC)で発生する可能性のある問題の解決に役立ちます。

Oracle RACのインタフェース名をリカバリする方法

コンテナ上のOracle RACノードでネットワーク・インタフェース名が表示されなくなり、別のインタフェース名が作成された場合は、この手順を使用して名前をリカバリします。

Oracle Real Application Clusters (Oracle RAC)を実行しているコンテナのネットワークが切断された場合、同じネットワークを再接続すると、Oracle RACノードでネットワーク・インタフェース名が表示されなくなる可能性があります。前のネットワーク・インタフェースのかわりに、別のインタフェース名が作成されます。このシナリオが発生した場合、その結果はOracle Clusterwareのネットワーク構成と矛盾するネットワーク構成になります。そのネットワーク・インタフェースがクラスタ・ノードの唯一のプライベート・インタフェースである場合、そのノードはクラスタから削除できます。

この問題を修正するには、この手順を使用して、コンテナでネットワーク・インタフェース名をリストアし、Oracle Clusterwareで最初に構成した同じネットワーク・インタフェース名にします。

  1. コンテナを停止します。
  2. すべてのネットワークを切断します。
  3. Oracle Grid Infrastructureインストール用にコンテナを作成して構成したときに使用したのと同じ順序でネットワークを再接続します。
  4. コンテナを再起動します。
この手順を完了すると、コンテナ上のOracle RACノードのネットワーク・インタフェース名が元の構成にリストアされ、Oracle Clusterwareの構成と一致します。

Podmanネットワークで使用されるNICアダプタを交換する方法

Podmanホストの外部にある物理ネットワークでネットワーク・インタフェース・カード(NIC)を交換する必要がある場合は、この手順を使用します。

Oracle RACのパブリック・ネットワークまたはプライベート・ネットワークがPodmanホストの外部にある物理ネットワークに接続されている場合、対応するPodmanネットワークでは、PodmanホストのNICアダプタを親アダプタとして使用して、LinuxブリッジをバイパスするMacvlanモードを使用します。

構成後に、Oracle Real Application Clusters (Oracle RAC)を実行しているコンテナのネットワークで使用されるNICカードを切断して交換する必要がある場合、同じネットワークを再接続すると、Oracle RACノードでネットワーク・インタフェース名が表示されなくなる可能性があります。前のネットワーク・インタフェース名のかわりに、別のインタフェース名が作成されます。このシナリオが発生した場合、その結果はOracle Clusterwareのネットワーク構成と矛盾するネットワーク構成になります。そのネットワーク・インタフェースがクラスタ・ノードの唯一のプライベート・インタフェースである場合、そのノードはクラスタから削除できます。

この問題を解決するには、次の手順を使用します。

  1. ノードでOracle Clusterwareを無効にしてから停止します。

    # crsctl disable crs
    # crsctl stop crs
  2. 交換するホストNICに対応するネットワークからコンテナを切断します。たとえば、コンテナ名がmycontainerで、ネットワーク名がmypriv1の場合は、次のコマンドを入力します。
    
    # podman network disconnect mycontainer mypriv1
  3. ホストNICを交換し、新しいNICが検出され、ホストで使用可能であり、ホスト・オペレーティング・システムのデバイス名が検出されることを確認します。NIC名は、以前とは異なる場合があります。ホスト環境によっては、このステップでホスト・オペレーティング・システムの再起動が必要になる場合があります。たとえば、NICデバイス名が以前はeth1であった場合、交換後はeth3になることがあります。
  4. 検出したNICデバイス名を使用してネットワークを再作成します。たとえば、ネットワーク名がmypriv1で、以前はeth1だったNICが現在はeth3である場合です。
    # podman network rm mypriv1
    # podman network create .... -o parent=eth3 mypriv1
  5. コンテナを停止します。
  6. 他のネットワークをコンテナから切断します。
  7. コンテナを最初に作成したときに使用したのと同じ順序で、すべてのネットワークをコンテナに再接続します。同じ順序でネットワークを接続すると、コンテナ内のインタフェース名は交換前と必ず同じになります。
  8. コンテナを起動し、ネットワーク・インタフェース名およびIPアドレスが以前と同じであることを確認します。
  9. ノードでClusterwareを再起動して有効にします。
    # crsctl enable crs
    # crsctl start crs

PodmanでOracle RACをクリーン・アップする方法

PodmanでOracle Real Application Clusters (Oracle RAC)を削除する必要がある場合は、この手順を使用します。

PodmanでOracle RACを削除するには、まずOracleソフトウェアを停止して削除してから、Podmanを構成解除します。
  1. 各コンテナで、クラスタを停止し、クラスタからOracle RACインスタンスを削除し、Oracle Clusterwareノードを削除します。
  2. Oracle Grid InfrastructureおよびOracle RACソフトウェアを削除します。
  3. Oracleソフトウェアの削除後、Podmanホストで各コンテナについてPodmanコンテナ削除コマンドを実行します。

    たとえば:

    # podman container stop racnode1
    # podman container rm racnode1

Oracle RACノードに使用したコンテナを削除した後、そのコンテナを再作成すると、マウント・ポイントに同じボリューム(/u01)を使用しても、そのコンテナはOracle RACノードではありません。コンテナを再度Oracle RACノードにするには、Oracle Grid Infrastructureインストレーションおよびアップグレード・ガイドfor LinuxおよびOracle Real Application Clusters管理およびデプロイメント・ガイドのノードの削除手順とノードの追加手順を使用します。

podman image pruneを使用したPodmanイメージのクリーン・アップ

Podmanサーバー上のOracle RACでPodmanイメージをクリーン・アップする必要がある場合は、podman image pruneコマンドを使用できます。

通常、Podmanのオブジェクトは、明示的に削除しないかぎり削除されません。podman image pruneコマンドを使用してPodmanイメージでOracle RACを削除する方法は、Podmanドキュメントを参照してください。

Podmanホストの再起動後のOracle RACノードの可用性を保証する方法

再起動後のOracle RACノードの可用性を保証するには、Podmanサービスを有効にしておきます。

デフォルトでは、Podmanエンジンのインストール後、PodmanサービスはPodmanホストで有効になっています。このサービスは、PodmanホストでOracle RACノードの可用性を保証するために有効のままにしておく必要があります。Podmanサービスが有効になっている場合、Podmanホストが再起動されると、計画メンテナンスによるものであれ計画外停止のためであれ、Podmanサービスも再起動されます。Podmanサービスは管理対象のコンテナを自動的に再起動するため、Oracle RACノード・コンテナは自動的に再起動されます。Oracle Clusterware (CRS)が自動再起動に対して有効になっている場合、Podmanは再起動されたノードでOracle Clusterwareの起動も試みます。

Oracle RACコンテナを正常に停止する方法

PodmanコンテナでOracle Real Application Clusters (Oracle RAC)を正常に停止するには、この手順を使用します。

コンテナ内のCluster Ready Services (CRS)スタックを停止してからコンテナを停止するか、コンテナ内のOracle RACの正常な停止に十分な猶予期間を使用して、ホストから直接コンテナを停止することによって、コンテナを正常に停止できます。

例2-5 CRSスタックおよびコンテナの停止による正常な停止

  1. コンテナ内のCRSスタックを停止します。たとえば:

    [root@racnode1 ~]# crsctl stop crs
  2. ホストからコンテナを停止します。たとえば:

    # podman stop racnode1

例2-6 猶予期間を設定してホストからコンテナを停止することによる正常な停止

猶予期間を使用してホストから直接コンテナを停止するには、コンテナ内のOracle RACの正常な停止に十分な秒数のタイムアウトが必要です。たとえば:

# podman stop -t 600 racnode1

ノート:

コンテナが、指定した猶予期間(秒)よりも早く正常に停止できる場合、コマンドは猶予期間の制限前に完了します。

Podmanホスト・オペレーティング・システムのアップグレードのためのガイドライン

可用性の要件とOracle Linuxオペレーティング・システムの要件を満たすオペレーティング・システムおよびサーバーのアップグレード・オプションを選択します。

Podmanホスト・オペレーティング・システムにパッチを適用またはアップグレードするには、サーバーで新しいオペレーティング・システムにパッチを適用またはアップグレードします。マルチホスト構成では、ローリング方式でPodmanホストをアップグレードできます。単一のPodmanホスト上のPodmanのOracle RACは開発およびテスト環境用であるため、可用性は問題にならないので、PodmanデータベースのOracle RACを新しいアップグレードされたPodmanホストに移行できます。詳細は、Oracle Linuxのドキュメントを参照してください。

ノート: サーバー・オペレーティング・システムがサポートされ、Podmanホスト・オペレーティング・システムのカーネルおよびパッケージの要件がPodmanの最小要件を満たしていることを確認します。