DBサーバ構築 2(DM Multipath)

3層Webシステム

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はサポート対象外となっています。ということで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 Grid Infrastructure (21.3) 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インストール、初期構築まで行います。

サーバ構築時に必要なネットワーク・アダプタとローカル・ディスクを全部組み込んでしまってもOKですが、今回は共通化した仮想マシン作成・OSインストール手順を使用するので最初にネットワーク・アダプタ1個、内蔵HDD1個でサーバを構築してその後に必要なデバイスを追加します。

仮想マシン作成

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

設定項目設定値
仮想マシン名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)をインストールします。インストール時に設定するホスト名と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サーバ#1(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

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

ローカル・ディスク

50GBのローカルディスクを追加してファイルシステムを/opt/appにマウントします。

【ローカル・ディスク】

設定項目設定値
ハードディスク 2(サイズ)50 GB

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

共有ディスク

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

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

-----------------------------------------------------------------------------
【実行例】
-----------------------------------------------------------------------------
[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 ~]#

DM Multi-Path設定

lsblkの結果を見てわかる通り、仮想マシンに接続されたSCSIディスクには「SCSIコントローラ番号:ディスク番号」の順番にデバイス名(デバイスファイル /dev/sda、/dev/sdb、/dev/sdc…)が割り当てられています。

ただしこの順番は保証されたものではなく、さらに言えばこのようにきれいに並ぶのもRHEL8まででRHEL9の仮想マシンに複数のディスクを接続するとてんでバラバラな順番でデバイス名が割り当てられてしまったりします。(まあこれはサポート対象外のESXiバージョンを使っているからという可能性もありますが)

ディスクのデバイス名はOS起動やディスク追加のタイミングでudevにより割り当て(デバイスファイルの作成)が行われます。ディスク上のファイルシステムをマウントする場合はデバイス名ではなくデバイスのUUIDを使用するので仮にデバイス名が入れ替わってしまっても問題はありませんが、ファイルシステムを使用しないASMディスクではデバイス名が入れ替わったり、すべてのDBサーバ間で統一されていないと困ります。

そこでDM Multipath(device-mapper-multipath)を使用してデバイス名を固定します。

DM Multipathは名前の通りマルチパスのディスクアクセスを制御するドライバですが、これを使用して片パス(そもそも仮想マシンに複数パスは設定できない)のマルチパスデバイスを構成してASMディスクごとに固定のエイリアスを設定します。

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

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

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

DBサーバ#1で設定ファイルを編集してマルチパスデバイスを構成します。うまく構成できれば設定ファイルをDBサーバ#2、DBサーバ#3に配布するという流れです。

まず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」といったエラーが出力されると思いますがこの時点ではまだ何も設定していないので大丈夫です。

DBサーバ#1で追加したディスクのハードウェア・パスを確認します。

【prsdb01で実行】
-----------------------------------------------------------------------------
ls -l /dev/disk/by-path/ | grep sd[a-z] | awk '{ print "/dev/disk/by-path/"$9" "$11}' | sed 's/..\/..\///g'

-----------------------------------------------------------------------------
【実行例】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# ls -l /dev/disk/by-path/ | grep sd[a-z] | awk '{ print "/dev/disk/by-path/"$9" "$11}' | sed 's/..\/..\///g'
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0 sda
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0-part1 sda1
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0-part2 sda2
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:1:0 sdb
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:1:0-part1 sdb1
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:0:0 sdc
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:1:0 sdd
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:2:0 sde
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:3:0 sdf
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:4:0 sdg
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:5:0 sdh
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:6:0 sdi
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:8:0 sdj
/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:9:0 sdk

[root@prsdb01 ~]#

lsblkの結果と合わせるとディスク共有用のSCSIコントローラ 1に接続したディスクのハードウェア・パスは”/dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:x:0”で x がディスク番号になっていることがわかります。

対象をSCSIコントローラ 1に接続したディスクに絞ってディスク番号順に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 ~]#
設定セクション/項目設定内容説明
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:
一意のパス識別子を取得するためにコールアウトするデフォルトのプログラムと引数を指定(絶対パスでの指定が必要)

multipath.confの内容をチェックしてエラーがなければ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環境用デバイス設定が完了したら次はOracle製品インストール環境設定です。

コメント

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