DBサーバ構築 2(DM Multipath)

DBサーバ・Oracle RAC

DBサーバ構築(Oracle RAC環境用デバイス設定)

ポートグループ作成

DBネットワーク用ポートグループとインターコネクト用ポートグループを作成します。

【ポートグループ設定】

設定項目DBネットワーク用ポートグループインターコネクト用ポートグループ
NameProduction DB Pub NetworkProduction DB Prv Network
VLAN ID1020
Virtual suitchvSwitchp2vSwitchp3

【ポートグループ作成手順】

No.操作
1ESXiコンソールの画面左の「ネットワーク」をクリック → ネットワーク管理画面表示
2「ポートグループ」タブ – 「ポートグループの追加」をクリック → ポートグループ作成画面表示
3以下の通り設定
——————————————————
 DBネットワーク用ポートグループ
——————————————————
 名前:Production DB Pub Network
 VLAN ID:10
 仮想スイッチ:vSwitchp2
——————————————————
 インターコネクト用ポートグループ
——————————————————
 名前:Production DB Prv Network
 VLAN ID:20
 仮想スイッチ:vSwitchp3
4「追加」をクリック → ポートグループ作成画面終了
5ネットワーク管理画面・ポートグループ一覧に作成したポートグループが追加されていることを確認

OSインストールメディア入手

Oracle21cがサポートするRHELバージョンはRHEL8まででRHEL9はサポート対象外となっています。
本日時点のRHEL 8最新パージョンはRed Hat Enterprise Linux 8.10なのでこのインストール・メディアを入手してESXiにアップロードします。

OSインストール・メディア入手

Oracle製品イメージ・ファイルの入手

Oracle technology networkのダウンロードページからOracle DB 21cとGrid Infrastructure 21cのイメージ・ファイルをダウンロードします。

Oracle Database 21c Download for Linux x86-64

  • Oracle Database 21c for Linux x86-64
    • LINUX.X64_213000_db_home.zip
  • Oracle Database 21c Grid Infrastructure (21.3) for Linux x86-64
    • LINUX.X64_213000_grid_home.zip

ダウンロードしイメージ・ファイルは管理サーバのNFSにディレクトリを作成して格納します。

【prsmg01で実行】
---------------------------------------------------------------------------
# Oracle DBイメージ・ファイル格納用ディレクトリ作成
mkdir -p /nfsdisk/exports/media/oracle/21c/db
→ Teratermのscpファイル転送等で作成したディレクトリにLINUX.X64_213000_db_home.zipを格納

# Grid Infrastructureイメージ・ファイル格納用ディレクトリ作成
mkdir -p /nfsdisk/exports/media/oracle/21c/grid
→ Teratermのscpファイル転送等で作成したディレクトリにLINUX.X64_213000_grid_home.zipを格納

サーバ初期構築

仮想マシンを作成してOSインストール、初期構築まで行います。

仮想マシン作成

DBサーバとして使用する3台の仮想マシンを作成します。

【DBサーバ・仮想マシン構成】

設定項目設定値
仮想マシン名prsdb01 prsdb02 prsdb03
CPU4
Memory12 GB
Hard Disk 1100 GB
 Disk ProvisioningThin provisioned
CD/DVD Media<データストア・アップロード・ディレクトリ>/rhel-8.10-x86_64-dvd.iso

仮想マシン作成

OSインストール

作成した仮想マシンにOS(RHEL8)をインストールします。各DBサーバのホスト名及びIPアドレスは以下の通りです。

【DBサーバ・ホスト名/IPアドレス一覧】

DBサーバ#1DBサーバ#2DBサーバ#3
ホスト名prsdb01.exsample.lanprsdb02.exsample.lanprsdb03.exsample.lan
IPアドレス172.16.10.21172.16.10.22172.16.10.23

OSインストール

サーバ初期構築

RHEL8もRHEL9も初期構築の手順はほとんど同じですが、RHEL8は最初からrootログインが可能なのでsshd_configの編集は不要です。また、chronydのサービスがデフォルトでは無効化してあるので有効化を行います。

サーバ初期構築

デバイス追加

サーバ初期構築が終わったらネットワーク・アダプタ、ローカル・ディスク、共有ディスクの順にデバイスの追加を行います。

ネットワーク・インターフェース

まず最初にDBネットワーク用のアダプタ、次にインターコネクト用のアダプタを仮想マシンに追加します。各アダプタに割り当てるポートグループとIPアドレスは以下の通りです。

【仮想マシン・追加ネットワーク・アダプタ】

ネットワーク・アダプタポートグループ
ネットワーク アダプタ 2Production DB Pub Network
ネットワーク アダプタ 3Production DB Prv Network

【N/Wインターフェース・IPアドレス設定】

デバイス名DBサーバ#1(prsdb01)DBサーバ#2(prsdb02)DBサーバ#3(prsdb03)
ens224192.168.30.21/24192.168.30.22/24192.168.30.23・24
ens25610.10.20.1/2410.10.20.2/2410.10.20.3/24

ネットワーク・アダプタ追加

ローカル・ディスク

Oracle Grid Infrastructure、Oracle Databaseをインストールするために50GBのローカルディスクを追加します。

【DBサーバ 追加ローカル・ディスク】

設定項目設定値
ハードディスク 2(サイズ)50 GB
ファイル・システムタイプxfs
ファイルシステム マウント・ポイント/opt/app

ハードディスク追加(ローカル・ディスク)

共有ディスク

ASMディスクとして使用する共有ディスクをDBサーバに追加します。3台のDBサーバが同じディスクに同じ順番で接続するように構成しないとASMが構成できないので注意が必要です。

追加する共有ディスクの構成は以下の通り。SCSI ID(1:x)の 1 はコントローラ番号、x はディスク番号です。なおディスク番号 7 は割り当てに使用されず、ディスク番号 6 の次はディスク番号 8 となります。

【共有ディスク】

ハードディスクサイズ場所SCSIコントローラ
ハードディスク 35 GB[datastore]/storage/prsdb/disk001.vmdkSCSIコントローラ 1 SCSI(1:0)
ハードディスク 45 GB[datastore]/storage/prsdb/disk002.vmdkSCSIコントローラ 1 SCSI(1:1)
ハードディスク 55 GB[datastore]/storage/prsdb/disk003.vmdkSCSIコントローラ 1 SCSI(1:2)
ハードディスク 610 GB[datastore]/storage/prsdb/disk011.vmdkSCSIコントローラ 1 SCSI(1:3)
ハードディスク 710 GB[datastore]/storage/prsdb/disk012.vmdkSCSIコントローラ 1 SCSI(1:4)
ハードディスク 810 GB[datastore]/storage/prsdb/disk101.vmdkSCSIコントローラ 1 SCSI(1:5)
ハードディスク 910 GB[datastore]/storage/prsdb/disk102.vmdkSCSIコントローラ 1 SCSI(1:6)
ハードディスク 1030 GB[datastore]/storage/prsdb/disk201.vmdkSCSIコントローラ 1 SCSI(1:8)
ハードディスク 1130 GB[datastore]/storage/prsdb/disk202.vmdkSCSIコントローラ 1 SCSI(1:9)

ハードディスク追加(共有ディスク)

共有ディスクの追加が環境したら lsblkでデバイスが正しく追加されていることを確認します。

【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# ブロックデバイスを確認
lsblk

# ディスクのハードウェア・パスを確認
ls -l /dev/disk/by-path/ | cut -d" " -f 12-

-----------------------------------------------------------------------------
【実行例】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
Lsda1 8:1 0 1G 0 part /boot
Lsda2 8:2 0 99G 0 part
Lroot_vg-root 253:0 0 57G 0 lvm /
Lroot_vg-swap 253:1 0 12G 0 lvm [SWAP]
Lroot_vg-var 253:2 0 30G 0 lvm /var
sdb 8:16 0 50G 0 disk
Lsdb1 8:17 0 50G 0 part
Lapp_vg-app_lv1 253:3 0 50G 0 lvm /opt/app
sdc 8:32 0 3G 0 disk
sdd 8:48 0 3G 0 disk
sde 8:64 0 3G 0 disk
sdf 8:80 0 10G 0 disk
sdh 8:112 0 10G 0 disk
sdi 8:128 0 10G 0 disk
sdj 8:144 0 30G 0 disk
sdk 8:160 0 30G 0 disk

sr0 11:0 1 13.3G 0 rom
[root@prsdb01 ~]#
[root@prsdb01 ~]# ls -l /dev/disk/by-path/ | cut -d" " -f 12-

pci-0000:02:03.0-ata-1 -> ../../sr0
pci-0000:03:00.0-scsi-0:0:0:0 -> ../../sda
-> ../../sda1
-> ../../sda2
pci-0000:03:00.0-scsi-0:0:1:0 -> ../../sdb
-> ../../sdb1
pci-0000:04:00.0-scsi-0:0:0:0 -> ../../sdc
pci-0000:04:00.0-scsi-0:0:1:0 -> ../../sdd
pci-0000:04:00.0-scsi-0:0:2:0 -> ../../sde
pci-0000:04:00.0-scsi-0:0:3:0 -> ../../sdf
pci-0000:04:00.0-scsi-0:0:4:0 -> ../../sdg
pci-0000:04:00.0-scsi-0:0:5:0 -> ../../sdh
pci-0000:04:00.0-scsi-0:0:6:0 -> ../../sdi
pci-0000:04:00.0-scsi-0:0:8:0 -> ../../sdj
pci-0000:04:00.0-scsi-0:0:9:0 -> ../../sdk

[root@prsdb01 ~]#

DM Multi-Path設定

ディスクのハードウェア・パスとデバイス名(デバイスファイル /dev/sda、/dev/sdb、…)を見ると仮想マシンに接続されたディスクには「SCSIコントローラ番号:ディスク番号」の順番にデバイス名が割り当てられています。ただしこの割り当ての順番はカーネルによって保証されたものではありません。

ディスクのデバイス名はOS起動やディスク追加のタイミングでudevにより割り当て(デバイスファイルの作成)が行われます。この割り当ての順番はディスクが接続された順番ではなくカーネルがディスク(デバイス)を認識した順番です。

ファイルシステムのマウントはデバイス名ではなくUUIDを参照します。そのためサーバ起動時にディスクのデバイス名が入れ替わってしまっても問題ありません。ところがASMディスクはファイルシステムを使用しないので、デバイス名が入れ替わったりノード間で一致しないということが起きてしまってはあまりよろしくありません。

そこでDM Multipath(device-mapper-multipath)を使用してディスクに割り当てるデバイス名を永続的に固定します。DM Multipathはその名の通りマルチパスのディスク・アクセスを制御するドライバですが、このドライバで共有ディスクを片パスのマルチパスデバイスとして構成します。

DBサーバのパッケージ構成ではDM multipathが既にインストールされています。まず、各DBサーバでmpathconf –enableを実行してデフォルトの設定ファイルを作成します。

【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
mpathconf --enable

# 設定ファイル(multipath.conf)が作成されたことを確認
ls /etc/multipath.conf

DBサーバ#1でmultipathd.serviceを起動してステータスを確認します。

【prsdb01で実行】
-----------------------------------------------------------------------------
# multipathd.service起動
systemctl start multipathd.service

# multipathd.serviceステータス確認
systemctl status multipathd.service

この時点ではまだ何も設定していないので「sda: failed to get udev…」「sdb: failed to get udev」といったエラーが出力されると思いますがステータスが”active (running)”となっていれば問題ありません。

先に確認したディスクのハードウェア・パスではSCSIコントローラ 1に接続した共有ディスクのハードウェア・パスは”/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:x:0”で x がディスク番号になっていることがわかります。対象を絞って共有ディスクのWWN(World Wide Name)を取得します。

【prsdb01で実行】
-----------------------------------------------------------------------------
# SCSIコントローラ 1に接続したディスクのWWNを出力(1行で記述)
ls /dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:*:0 | while read DEVPATH ; do /lib/udev/scsi_id --whitelisted --device=${DEVPATH};done

-----------------------------------------------------------------------------
【実行例】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# ls /dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:*:0 | while read DEVPATH ; do /lib/udev/scsi_id --whitelisted --device=${DEVPATH};done
36000c29a3f0a7b1c0cfce643cbd2998a
36000c298625b80b185837f00f9a086de
36000c295799d0b1c0e4c886066513186
36000c298f4fde5ccf40d0b016a9464aa
36000c29802c1077545367d572fcfe23f
36000c29880c6e9c851e00d5f6537cc2a
36000c29dc34668da2329d10889319d3e
36000c298792b9280cdb2d7a4ecbfe242
36000c2946ad523c016fbafd30ad31abb

[root@prsdb01 ~]#

取得したWWNを元に/etc/multipath.confを編集します。

【prsdb01で実行】
-----------------------------------------------------------------------------
vi /etc/multipath.conf

-----------------------------------------------------------------------------
【/etc/multipath.conf編集内容】
-----------------------------------------------------------------------------
defaults {
user_friendly_names no
find_multipaths no

enable_foreign "^$"
}

blacklist {
wwid ".*"
}


blacklist_exceptions {
# property "(SCSI_IDENT_|ID_WWN)"
wwid "36000c29a3f0a7b1c0cfce643cbd2998a"
wwid "36000c298625b80b185837f00f9a086de"
wwid "36000c295799d0b1c0e4c886066513186"
wwid "36000c298f4fde5ccf40d0b016a9464aa"
wwid "36000c29802c1077545367d572fcfe23f"
wwid "36000c29880c6e9c851e00d5f6537cc2a"
wwid "36000c29dc34668da2329d10889319d3e"
wwid "36000c298792b9280cdb2d7a4ecbfe242"
wwid "36000c2946ad523c016fbafd30ad31abb"

}

multipaths {
multipath {
wwid 36000c29a3f0a7b1c0cfce643cbd2998a
alias asmd001
skip_kpartx yes

}
multipath {
wwid 36000c298625b80b185837f00f9a086de
alias asmd002
skip_kpartx yes
}
        ・
        ・
        ・
multipath {
wwid 36000c2946ad523c016fbafd30ad31abb
alias asmd202
skip_kpartx yes
}
}

devices {
device {
vendor "VMware"
product "Virtual disk"
getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
}
}

[root@prsdb01 ~]#

【multipath.conf 補足説明】

設定セクション/項目設定内容説明
user_friendly_namesnoyes :デバイス名を/dev/mapper/mpathに設定
no :デバイス名を/dev/mapper/WWIDに設定
find_multipathsnoマルチパスデバイスのセットアップ用のモードを定義。yesに設定するとブラックリスト化されていないすべてのパスに対してデバイスの作成を試行するのではなく条件を満たす場合だけデバイス化
blacklist“.*”ブラックリストを記述するセクション。wwid “.*”に該当するデバイス、つまりすべてのデバイスををマルチパス化しない。要はACLと一緒で最初に全部対象外にしてblacklist_exceptionsでマルチパス対象デバイスを記述
blacklist_exceptionsASMディスクのWWNブラックリストから除外するデバイスを記述するセクション。wwidに続けて上で取得したASMディスクのWWNを記述
multipathsデバイスごとのマルチパス定義マルチパス定義を記述するセクション。ASMディスクごとにmultipath設定を記述
————————————————
multipath {
  wwid <ASMディスクのWWN>
  alias  <asmd+仮想ディスク(.vmdk)の数値部分>
  skip_kpartx yes
}
————————————————
wwid :ディスクのWWN
alias :ディスクのエイリアス(任意の文字列を設定可)
skip_kpartx:yes に設定すると、kpartx は自動的にデバイスにパーティションを作成しない
devicesVMWare仮想ディスクのストレージタイプストレージデバイス用に設定できる属性を定義するセクション。もともと主要ベンダーのストレージ情報は組み込まれている。MWareの仮想ディスクが見つからなかったので追加
————————————————
device {
  vendor “VMware”
  product ”Virtual disk”
  getuid_callout “/lib/udev/scsi_id –whitelisted –device=/dev/%n”
————————————————
vendor:cat /sys/block/sda/device/vendorで取得
product:cat /sys/block/sda/device/modelで取得
getuid_callout:
一意のパス識別子を取得するためにコールアウトするデフォルトのプログラムと引数を指定(絶対パスでの指定が必要)

編集内容をチェックしてエラーがなければmultipathd.serviceをリロードします。

【prsdb01で実行】
-----------------------------------------------------------------------------
# 設定ファイルをチェック
multipath -t > /dev/nul

# multipathd.serviceの設定をリロード
systemctl reload multipathd.service

# マルチパスデバイスを出力
multipath -ll

-----------------------------------------------------------------------------
【実行例】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# multipath -t > /dev/nul
[root@prsdb01 ~]# systemctl reload multipathd.service
[root@prsdb01 ~]# multipath -ll
asmd001 (36000c29a3f0a7b1c0cfce643cbd2998a) dm-4 VMware,Virtual disk
size=3.0G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
`- 5:0:0:0 sdc 8:32 active ready running
asmd002 (36000c298625b80b185837f00f9a086de) dm-5 VMware,Virtual disk
size=3.0G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
`- 5:0:1:0 sdd 8:48 active ready running
    ・
    ・
    ・
asmd201 (36000c298792b9280cdb2d7a4ecbfe242) dm-11 VMware,Virtual disk
size=30G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
`- 5:0:8:0 sdj 8:144 active ready running
asmd202 (36000c2946ad523c016fbafd30ad31abb) dm-12 VMware,Virtual disk
size=30G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
`- 5:0:9:0 sdk 8:160 active ready running
[root@prsdb01 ~]#

マルチパスデバイスのリンク(asmdxxx)は/dev/mapperに作られます。ls、lsblkでデバイスが正常に構成されていることを確認します。

【prsdb01で実行】
-----------------------------------------------------------------------------
ls -l /dev/mapper/
lsblk

DBサーバ#1で編集したmultipath.confをDBサーバ#2、DBサーバ#3に転送します。

【prsdb01で実行】
-----------------------------------------------------------------------------
scp /etc/multipath.conf 172.16.10.22:/etc/
scp /etc/multipath.conf 172.16.10.23:/etc/

DBサーバ#2、DBサーバ#3でmultipathd.serviceを起動してマルチパスデバイスが構成されていることを確認します。

【prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# multipathd起動
systemctl start multipathd.service

# マルチパスデバイス確認
multipath -ll
ls -l /dev/mapper/
lsblk

DBサーバのOracle RAC環境用デバイス設定が完了したら次はGrid Infrastructure、OracleDBのインストール環境を構築します。

コメント

タイトルとURLをコピーしました