Proxmox VEでVMを作成してOracle Linux 8をインストールする

Proxmox VEでVMを作成してOracle Linux 8をインストールする

この記事でやること

第2回では、Proxmox VE上にVM3台を作成し、Oracle Linux 8.9をインストールしてOS初期設定を行います。

作業対象
VMの作成ol8-rac19-21 / ol8-rac19-22 / ol8-iscsi-23
Oracle Linux 8.9 インストール全3ノード
ネットワーク・ホスト名設定全3ノード
タイムゾーン・NTP設定全3ノード
DNFメディアリポジトリ登録全3ノード
firewalld無効化全3ノード
SELinux permissive設定 + THP無効化全3ノード

VMの作成(Proxmox VE)

Proxmox VE管理画面(https://192.168.1.100:8006)にアクセスし、VM3台を作成します。

※ 本環境の値。各自の環境に読み替えてください。

共通設定の方針

全VMで共通する設定です。

項目設定値補足
SCSIコントローラVirtIO SCSI singleI/Oスレッドを有効活用できる
NICドライバvirtio準仮想化ドライバ。パフォーマンスが良い
Qemuエージェント有効Proxmox管理画面からIPアドレスの確認などができるようになる
ISOp-nas-nfs:iso/V1039330-01.isoNAS上のOracle Linux 8.9 ISO(※)

p-nas-nfs は本環境のProxmox NFSストレージ名です。各自の環境のISOストレージ名に読み替えてください。

ノード1(ol8-rac19-21)

  1. 「VMを作成」をクリック

  2. 全般タブ

    • ノード: pve01
    • 名前: ol8-rac19-21

  3. OSタブ: ISO p-nas-nfs:iso/V1039330-01.iso(各自のストレージ名に読み替え)、種別 Linux、バージョン 6.x - 2.6 Kernel

  4. システムタブ: Qemuエージェント 有効化

  5. ディスク: local-lvm150 GB

  6. CPU: 3コア

  7. メモリ: 12288 MiB(12 GB)

  8. ネットワーク: vmbr1、タグ 10(VLAN10 / Public)

VM作成後、NICを2つ追加します(「ハードウェア」→「追加」→「ネットデバイス」)。

追加NICブリッジVLANタグ用途
2枚目vmbr120Interconnect
3枚目vmbr130Management

ノード2(ol8-rac19-22)

ノード1と同じ手順で作成します。差分のみ記載します。

項目設定値
名前ol8-rac19-22

NICの追加(VLAN20・VLAN30)はノード1と同じです。

ストレージノード(ol8-iscsi-23)

RACノードとの主な違いはCPUとメモリが小さい点と、ASM用の追加ディスクが2本ある点です。

  1. 「VMを作成」をクリック

  2. 全般タブ

    • ノード: pve01
    • 名前: ol8-iscsi-23

  3. OSタブ: ISO p-nas-nfs:iso/V1039330-01.iso(各自のストレージ名に読み替え)、種別 Linux、バージョン 6.x - 2.6 Kernel

  4. システムタブ: Qemuエージェント 有効化

  5. ディスク: local-lvm60 GB(OS用)

  6. CPU: 1コア

  7. メモリ: 2048 MiB(2 GB)

  8. ネットワーク: vmbr1、タグ 10(VLAN10 / Public)

VM作成後、NICを2つ追加します(ノード1・2と同様)。

さらに、ASM用ディスクを2本追加します(「ハードウェア」→「追加」→「ハードディスク」)。

ディスクデータストアサイズ用途
scsi1local-lvm100 GBASM DATA
scsi2local-lvm100 GBASM RECO


Oracle Linux 8.9 インストール

3台のVMに順番にOracle Linux 8.9をインストールします。Proxmox管理画面のコンソール(noVNC)から操作します。

パーティション設計の方針

Oracle RACでは /home は不要なため削除し、その領域を / に割り当てます。swapはメモリサイズに合わせて設定します。

ノードswap/
ol8-rac19-21 / 2212 GiB残り全て(約135 GB)
ol8-iscsi-232 GiB残り全て(約55 GB)

ノード1・2(ol8-rac19-21 / ol8-rac19-22)

  1. VMを起動 → 「Install Oracle Linux 8.9.0」を選択

  2. 言語: 日本語 → 続行

  3. ソフトウェアの選択 → 「サーバー(GUI使用)」を選択

  4. インストール先 → ストレージ設定「カスタム」

    • 「ここをクリックすると自動的に作成します。」をクリック(/boot/home・swap・/ が自動作成される)

    • /home を削除
    • swap を 12 GiB に変更
    • 残り全てを / に割り当て

  5. ネットワークとホスト名 → Management NIC(VLAN30)のみ設定

    • 左ペインのインタフェース一覧から Management NIC(net2相当)を選択してオンにする
    • 「設定」→ 「全般」タブ → 「優先的に自動接続する」にチェックを入れる

    • 「設定」→「IPv4設定」タブ → 方式: 手動 → アドレスを追加
      • ノード1: アドレス 192.168.30.21、プレフィックス 24、ゲートウェイ 空欄
      • ノード2: アドレス 192.168.30.22、プレフィックス 24、ゲートウェイ 空欄
    • 「保存」

    「優先的に自動接続する」を設定しないと、インストール後の再起動でNICが接続されず踏み台からSSH接続できません。

    インストーラーの画面には複数のNICが並んでいます。Management NIC(VLAN30 / net2)を正しく特定するために、事前にProxmox管理画面の「ハードウェア」タブでnet2のMACアドレスを確認しておき、インタフェース一覧と照合してから選択してください。

    インストール時にManagement NICのみ設定するのは、OS起動後すぐに踏み台からSSH接続できるようにするためです。SSH接続が確立できればnoVNCコンソールを使わずにnmcliでコマンドライン操作できるため、Public / Interconnect NICの設定はインストール後にSSH経由で行います。

  6. rootパスワードを設定

  7. 「インストールの開始」

ストレージノード(ol8-iscsi-23)

基本的な手順はノード1・2と同じですが、以下の2点が異なります。

インストール先の選択に注意が必要です。 ストレージノードには100 GBのディスクが2本(ASM DATA・RECO用)ありますが、OSインストール先には60 GBのディスクのみを選択します。

項目ストレージノードの設定
インストール先60 GiBのディスクのみ選択(100 GBは選択しない)
swap2 GiB(メモリ2 GBに合わせる)
管理NIC192.168.30.23 / 24
優先的に自動接続するチェックを入れる(全般タブ)

Management NIC(VLAN30 / net2)の特定はノード1・2と同様です。Proxmox管理画面でnet2のMACアドレスを確認してから選択してください。


OS初期設定

OL8インストール完了後、以下の設定を行います。

【事前作業】NIC名とVLANの対応確認

複数NICを持つVMでは、OSのインタフェース名(ens18/ens19/ens20など)とProxmoxのNIC(net0/net1/net2)の対応をMACアドレスで確認してから設定します。順番が環境によって異なる場合があるため、必ず突き合わせてから進めてください。

① Proxmox WebUIでMACアドレスを確認

「ハードウェア」タブ → ネットワークデバイスを1つずつクリックしてMACアドレスをメモします。

Proxmox NICVLANタグネットワーク帯用途
net01010.0.10.0/24Public
net120172.16.20.0/24Interconnect
net230192.168.30.0/24Management

② OS側でMACアドレスを確認

Proxmoxコンソール(noVNC)から実行します。

ip link show

出力例:

2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> ... link/ether bc:24:11:aa:bb:cc
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> ... link/ether bc:24:11:dd:ee:ff
4: ens20: <BROADCAST,MULTICAST,UP,LOWER_UP> ... link/ether bc:24:11:11:22:33

③ 対応表を作成してインタフェース名を確定

OSインタフェースMACアドレス(実測値)Proxmox NICVLAN用途
ens18bc:24:11:…net010Public
ens19bc:24:11:…net120Interconnect
ens20bc:24:11:…net230Management

順番が異なる場合は、以降のコマンド中の ens18 / ens19 / ens20 を実際の名前に読み替えてください。

【事前作業】踏み台からSSH接続

Management NIC(VLAN30)のIPはOSインストール時に設定済みのため、踏み台サーバからSSH接続できます。以降の作業はSSH接続後にコピペで実行できます。

ssh root@192.168.30.21   # ol8-rac19-21
ssh root@192.168.30.22   # ol8-rac19-22
ssh root@192.168.30.23   # ol8-iscsi-23

※ 本環境の値。各自の環境に読み替えてください。

ネットワーク・ホスト名設定(1台ずつ)

IPアドレスとホスト名はノードごとに異なるため、1台ずつ実施します。

ノード1(ol8-rac19-21)

# ホストとユーザの確認
hostname && whoami

# 接続プロファイル名を確認(nmcli con modで指定する名前。通常はens18等のインタフェース名と一致するが、
# 「有線接続1」のような名前になっている場合は以降のcon modコマンドのプロファイル名を読み替えること)
nmcli con show

# ens18 (VLAN10 / Public)
# ipv4.dns: BINDはまだ起動していないが設定だけ入れておく。第3回でBIND構築後に有効になる
nmcli con mod ens18 \
  ipv4.addresses 10.0.10.21/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv4.dns 10.0.10.23 \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens18

# ens19 (VLAN20 / Interconnect)
nmcli con mod ens19 \
  ipv4.addresses 172.16.20.21/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens19

# ens20 (VLAN30 / Management)
# インストーラーのGUIで設定済みだが、IPv6無効化など細かい設定を統一するために再設定する
nmcli con mod ens20 \
  ipv4.addresses 192.168.30.21/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv4.dns 192.168.30.23 \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens20

# ホスト名
hostnamectl set-hostname ol8-rac19-21

# 確認
ip a && hostname

ノード2(ol8-rac19-22)

# ホストとユーザの確認
hostname && whoami

# 接続プロファイル名を確認(nmcli con modで指定する名前。通常はens18等のインタフェース名と一致するが、
# 「有線接続1」のような名前になっている場合は以降のcon modコマンドのプロファイル名を読み替えること)
nmcli con show

# ens18 (VLAN10 / Public)
# ipv4.dns: BINDはまだ起動していないが設定だけ入れておく。第3回でBIND構築後に有効になる
nmcli con mod ens18 \
  ipv4.addresses 10.0.10.22/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv4.dns 10.0.10.23 \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens18

# ens19 (VLAN20 / Interconnect)
nmcli con mod ens19 \
  ipv4.addresses 172.16.20.22/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens19

# ens20 (VLAN30 / Management)
# インストーラーのGUIで設定済みだが、IPv6無効化など細かい設定を統一するために再設定する
nmcli con mod ens20 \
  ipv4.addresses 192.168.30.22/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv4.dns 192.168.30.23 \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens20

# ホスト名
hostnamectl set-hostname ol8-rac19-22

# 確認
ip a && hostname

ストレージノード(ol8-iscsi-23)

# ホストとユーザの確認
hostname && whoami

# 接続プロファイル名を確認(nmcli con modで指定する名前。通常はens18等のインタフェース名と一致するが、
# 「有線接続1」のような名前になっている場合は以降のcon modコマンドのプロファイル名を読み替えること)
nmcli con show

# ens18 (VLAN10 / Public)
nmcli con mod ens18 \
  ipv4.addresses 10.0.10.23/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens18

# ens19 (VLAN20 / Private)
nmcli con mod ens19 \
  ipv4.addresses 172.16.20.23/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens19

# ens20 (VLAN30 / Management)
# インストーラーのGUIで設定済みだが、IPv6無効化など細かい設定を統一するために再設定する
nmcli con mod ens20 \
  ipv4.addresses 192.168.30.23/24 \
  ipv4.method manual \
  ipv4.gateway "" \
  ipv6.method disabled \
  connection.autoconnect yes
nmcli con up ens20

# ホスト名
hostnamectl set-hostname ol8-iscsi-23

# 確認
ip a && hostname

このノード自身がBINDサーバになるため、DNS設定は不要です。


以降の作業(タイムゾーン設定以降)は、3台同時に実行できます。MobaXtermのMultiExec機能など、複数ホストへの同時実行ツールを使うと効率的です。


タイムゾーン設定(全ノード同時)

複数サーバを扱う場合、タイムゾーンを統一しておくのはセオリーです。ノード間でタイムゾーンがずれていると、ログのタイムスタンプが一致せずトラブルシューティングが困難になります。本環境は日本国内での運用を想定しているため Asia/Tokyo を設定します。異なるタイムゾーンで運用する場合は適宜読み替えてください。

# ホストとユーザの確認
hostname && whoami

# 変更前の確認
timedatectl

# タイムゾーンをAsia/Tokyoに設定(再起動不要で即時反映される)
timedatectl set-timezone Asia/Tokyo

# 確認
timedatectl

NTP設定(全ノード同時)

本環境では踏み台サーバ(ol8-bastion-254 / 192.168.30.254)をNTPサーバとして使用しています。既存のNTPサーバがある場合はそちらのIPに読み替えてください。

# ホストとユーザの確認
hostname && whoami

# NTPサーバを追記(iburst: 初回同期時に複数パケットを送って素早く同期する)
echo "server 192.168.30.254 iburst" >> /etc/chrony.conf

# chronydを再起動して設定を反映
systemctl restart chronyd

# 時刻を即時修正(通常chronydは少しずつ時刻を調整するが、makestepは強制的に即時修正する)
chronyc makestep
# 同期確認(Reference IDが設定したNTPサーバのIPになっていること)
chronyc tracking

DNFメディアリポジトリの登録(全ノード同時)

インターネット接続がない環境でパッケージをインストールするため、ISOイメージ(CD-ROM)をリポジトリとして登録します。

# ホストとユーザの確認
hostname && whoami

# CD-ROMをマウント
mount /dev/cdrom /media
df | grep media
# リポジトリファイルを作成
cat > /etc/yum.repos.d/local-oel-dvd.repo << 'EOF'
[dvd-appstreams]
name=dvd-appstreams
baseurl=file:///media/AppStream
enabled=1
gpgcheck=0

[dvd-baseos]
name=dvd-baseos
baseurl=file:///media/BaseOS
enabled=1
gpgcheck=0
EOF
# ファイル内容確認
cat /etc/yum.repos.d/local-oel-dvd.repo
# OL8デフォルトリポジトリを無効化(インターネット接続が必要なリポジトリを無効にしないと、
# オフライン環境でのパッケージインストール時にエラーになる)
dnf config-manager -q --disable 'ol8*'

# キャッシュを削除(古いキャッシュが残っていると新しいリポジトリ設定が反映されない場合がある)
dnf clean all

# メタデータを取得してキャッシュを作成(パッケージ検索・依存解決が高速になる)
dnf makecache

# 有効なリポジトリ一覧を確認(dvd-appstreams と dvd-baseos のみが表示されること)
dnf repolist

root .bashrc設定(全ノード同時)

rootユーザーのプロンプトに色を付けて視認性を上げます。

# ホストとユーザの確認
hostname && whoami

# バックアップ取得
work_date=$(date +%Y%m%d)
cp -p ~/.bashrc{,.${work_date}}

# 追記
echo "export PS1='\\[\\e[1;33m\\]\\u@\\h:\\W#\\[\\e[m\\] '" >> ~/.bashrc

# 差分確認
diff ~/.bashrc{,.${work_date}}

# 反映
source ~/.bashrc

firewalld無効化(全ノード同時)

Oracle RACはクラスタウェアが独自にポート管理を行うため、firewalldが有効だとクラスタ間通信が妨げられる可能性があります。本環境(ラボ環境)ではfirewalldを無効化して構築します。

# ホストとユーザの確認
hostname && whoami

# 変更前の確認
systemctl status firewalld --no-pager

# firewalldを即時停止
systemctl stop firewalld

# OS起動時の自動起動を無効化(stopだけでは再起動後に再び起動してしまうため両方必要)
systemctl disable firewalld
# 確認(inactive かつ disabled になっていること)
systemctl status firewalld --no-pager

SELinux permissive設定 + THP無効化(全ノード同時)

SELinuxとTHPの無効化はいずれも再起動が必要です。まとめて設定して1回のrebootで反映します。

SELinux permissive設定

enforcing(ブロックあり)から permissive(ログのみ・ブロックなし)に変更します。Oracle RACの動作を確認しながらポリシー違反を把握できるため、ラボ環境では permissive が扱いやすいです。

# ホストとユーザの確認
hostname && whoami

# バックアップ取得
work_date=$(date +%Y%m%d)
cp -p /etc/selinux/config{,.${work_date}}

# permissiveに変更
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config

# 差分確認(enforcing → permissive になっていること)
diff /etc/selinux/config{,.${work_date}}

# 設定値確認
grep '^SELINUX=' /etc/selinux/config
# → SELINUX=permissive

透過的HugePages(THP)無効化

Oracle Databaseは独自のメモリ管理機構(HugePages)を使用するため、OSのTHP(Transparent HugePages)と競合してパフォーマンス低下やフリーズが発生します。Oracle環境ではTHP無効化が必須です。

# 現在の状態確認([always] madvise never が初期状態)
cat /sys/kernel/mm/transparent_hugepage/enabled

# カーネル起動引数に永続的に無効化を設定
grubby --update-kernel=ALL --args="transparent_hugepage=never"
状態意味Oracle DBでの評価
[always]システム全体でTHPが常に有効NG(非推奨)
[madvise]明示的に要求したプロセスのみ使用△(注意)
[never]THP完全無効OK(推奨)

再起動と確認

reboot

再起動後、以下で両方の設定を確認します。

# SELinux確認
getenforce
# → Permissive

# THP確認([never] になっていること)
cat /sys/kernel/mm/transparent_hugepage/enabled
# → always madvise [never]

まとめ

この記事では以下を完了しました。

  • Proxmox VE上にVM3台を作成(RACノード×2・ストレージノード×1)
  • Oracle Linux 8.9のインストール(パーティション設計・管理NIC設定)
  • ネットワーク・ホスト名・タイムゾーン・NTPの設定
  • DNFメディアリポジトリの登録
  • firewalld無効化・SELinux permissive設定・THP無効化

次の記事では、iSCSI共有ストレージの構築とBIND DNSサーバの設定を行います。