構成概要
管理サーバを構築してNTPサーバ、DNSサーバ、NFSサーバ、監視サーバの各機能をシステムに提供します。管理サーバは2台(prsmg01、prsmg02)でNTPサーバ、DNSサーバを冗長化します。またPacemakerでH/Aクラスタを構成してNFSサーバ及び監視サーバとしての可用性を確保します。

事前準備
ポートグループの作成
管理サーバのクラスタ・ノード間の通信通信(ハードビート等)に使用するプライベート・ネットワークをポートグループとして定義(作成)します。
【管理サーバ・クラスタ用ポートグループ】
設定項目 | 設定値 |
名前 | Production MG Prv Network |
VLAN ID | 10 |
仮想スイッチ | vSwitchp3 |
【ポートグループ作成手順】
No. | 操作 |
1 | ESXiコンソールの画面左の「ネットワーク」をクリック → ネットワーク管理画面表示 |
2 | 「ポートグループ」タブ – 「ポートグループの追加」をクリック → ポートグループ作成画面表示 |
3 | 以下の通り設定 名前:Production MG Prv Network VLAN ID:10 仮想スイッチ:vSwitchp3 |
4 | 「追加」をクリック → ポートグループ作成画面終了 |
5 | ネットワーク管理画面・ポートグループ一覧に作成したポートグループが追加されていることを確認 |
OSインストール・メディアの入手
Red Hatのダウンロード・ページからRed Hat Enterprise Linux 9.5インストール・メディアを入手してESXiにアップロードします。
管理サーバ構築(初期構築)
サーバ初期構築
管理サーバとして使用する2台の仮想マシンを作成してOSインストールとサーバ初期構築を行います。
仮想マシン作成
【管理サーバ・仮想マシン設定値】
設定項目 | 管理サーバ#1 | 管理サーバ#2 |
仮想マシン名 | prsmg01 | prsmg02 |
CPU | 2 | 2 |
メモリ | 4 GB | 4 GB |
ハードディスク 1(内蔵HDD) | 100 GB(Thin Provisioning) | 100 GB(Thin Provisioning) |
ネットワーク アダプタ 1 | Production MG Pub Metwork | |
CD/DVD メディア | [Upload Directory]/rhel-9.5-x86_64-dvd.iso | r[Upload Directory]/rhel-9.5-x86_64-dvd.iso |
OSインストール
【管理サーバ・ネットワーク設定】
設定項目 | 管理サーバ#1 | 管理サーバ#2 |
ホスト名 | prsmg01.exsample.lan | prsmg02.exsample.lan |
IPアドレス | 172.16.10.11 | 172.16.10.12 |
サーバ初期構築
chrony設定
/etc/chrony.confを編集してNTPサーバにESXiゲートウェイ#1、ESXiゲートウェイ#2を指定、ESXiゲートウェイ#2に優先して同期するように設定します。NTPクライアントは本番サイト、DRサイトの全サーバ、local stratum(NTPサーバと同期できないときに自身に設定するstratum)は通常時のstratumとおなじ3を設定します。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
vi /etc/chrony.conf
【設定箇所】
(3行目)
#pool 2.rhel.pool.ntp.org iburst
server 172.16.1.11 iburst
server 172.16.1.12 iburst prefer
(28行目付近)
#allow 192.168.0.0/16
allow 172.16.10.0/24
allow 172.16.20.0/24
(33行目付近)
#local stratum 10
local stratum 3
chronydを再起動して時刻同期ができていることを確認します。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# chronyd.service再起動
systemctl restart chronyd.service
# 時刻同期確認
chronyc sources
→ 「Name/IP address」に172.16.1.11、172.16.1.12が表示され172.16.1.12のMSが"^*"となっていることを確認
-----------------------------------------------------------------------------
【実行例】
-----------------------------------------------------------------------------
[root@prsmg01 ~]# systemctl restart chronyd.service
[root@prsmg01 ~]# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 172.16.1.11 2 6 17 17 +696us[ +696us] +/- 4080us
^* 172.16.1.12 2 6 17 17 -4056ns[-7291ns] +/- 3872us
[root@prsmg01 ~]#
NTPサービス許可
クライアントからのNTPリクエストに応答できるよう管理サーバ#1、管理サーバ#2のfirewalldサービス許可リストにntpサービスを追加します。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# デフォルトゾーンに関連する情報をすべて表示
firewall-cmd --list-all
→ servicesにntpが含まれていないことを確認
# firewalldのサービス許可リストにntpサービスを(永続的に)追加
firewall-cmd --add-service=ntp --permanent
# 設定を再ロード
firewall-cmd --reload
firewall-cmd --list-all
→ servicesにntpが追加されたことを確認
ローカル・リポジトリ追加
インターネットへのゲートウェイとなっている物理ルータにはESXi内部への経路情報を設定していないため、システム内のサーバは基本的にインターネットに接続できません。つまりdnf(yum)を使用してパッケージをインストールすることもできないわけですが、これでは構築に支障をきたします。そこでインストールメディアを使用したローカルリポジトリを追加します。
repoファイル作成
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
cat > /etc/yum.repos.d/RHEL-DVD.repo <<EOF
[ISO-Base]
name=RHEL-DVD-Base
baseurl=file:///mnt/cdrom/BaseOS
gpgcheck=0
enabled=1
[ISO-Appstrem]
name=RHEL-DVD-AppStream
baseurl=file:///mnt/cdrom/AppStream
gpgcheck=0
enabled=1
EOF
DVDマウント用シェル作成
RHEL-DVD.repo作成後は/mnt/cdromディレクトリを作成してインストール・メディア(DVD)をマウントすればdnfでパッケージをインストールすることが可能になります。
DVDのマウントコマンドを毎回打つのは少し手間なので(正しくは毎回ファイルシステム・タイプのiso9660を度忘れするので)ついでにDVDマウント専用のシェルも作成します。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
vi /usr/local/bin/dvdmount
-----------------------------------------------------------------------------
【/usr/local/bin/dvdmountの内容】
-----------------------------------------------------------------------------
#!/bin/bash
if [ ! -d /mnt/cdrom ] ; then
mkdir /mnt/cdrom
fi
if [ `mount | grep -c "/mnt/cdrom"` -ne 0 ] ; then
echo "The DVD is already mounted."
exit
fi
mount -t iso9660 /dev/cdrom /mnt/cdrom
exit
作成したシェルを実行してDVDがマウントできていることを確認します。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# dvdmountに実行権限を追加
chmod u+x /usr/local/bin/dvdmount
# DVDマウント実行
dvdmount
→ "mount: /mnt/cdrom: 警告: ソースは書き込み禁止です、読み込み専用でマウントします."
or"The DVD is already mounted."と表示されればOK
# DVDの最上位ディレクトリが表示されればOK
ls /usr/local
リポジトリ確認
DVDをマウントした状態でリポジトリ・リストを出力します。DVDのリポジトリ・リストが表示されればOKです。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
dnf repolist
-----------------------------------------------------------------------------
【実行結果】
-----------------------------------------------------------------------------
[root@prsmg01 ~]# dnf repolist
サブスクリプション管理リポジトリーを更新しています。
コンシューマー識別子を読み込めません
This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.
repo id repo の名前
ISO-Appstrem RHEL-DVD-AppStream
ISO-Base RHEL-DVD-Base
[root@prsmg01 ~]
hostsファイルの設定
管理サーバ#1の/etc/hostsファイルを編集して管理サーバ#2に転送します。
【prsmg01で実行】
-----------------------------------------------------------------------------
# /etc/hosts編集
vi /etc/hosts
# 管理サーバ#2に転送
scp /etc/hosts prsmg02:/etc/
-----------------------------------------------------------------------------
【編集した/etc/hostsの内容】
-----------------------------------------------------------------------------
127.0.0.1 localhost localhost.landomain localhost4 localhost4.landomain4
::1 localhost localhost.landomain localhost6 localhost6.landomain6
172.16.10.10 prsmg00.exsample.lan prsmg00
172.16.10.11 prsmg01.exsample.lan prsmg01
172.16.10.12 prsmg02.exsample.lan prsmg02
named(BIND9)構築
bind-chrootインストール
BIND9で管理サーバの本番サイトの権威DNSサーバを構築します。なお、BIND インストールの保護としてchange-root 環境を構成します。
システム内の名前解決の対象(いわゆるAレコードに登録するサーバ)は管理サーバ、DBサーバ、RACのSCANだけなので正直なところ、DNSサーバを建てることは必須でもなくメリットはほとんどありません。構築とか管理の手間とか考えればデメリットの方が大きいんじゃないかな、と思ったりもします。
それでなぜわざわざDNSサーバを構築するかというとGrid Infrastructureインストール&構築時にDNS関連の警告が出てくるのがうっとおしい、回避したいというそれだけです。あとはまあ、長いことDNSサーバ関連の設定をやっていないので復習とお勉強を兼ねて。
ともかくまずは管理サーバ#1、管理サーバ#2にbind、bind-chrootをインストールします。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
dnf -y install bind bind-chroot
【補足:bind-chrootについて】
(Red Hat Enterprise Linux 9 でネットワークインフラストラクチャーサービスを管理するためのガイドより)
管理者は、change-root 機能を使用して、プロセスとそのサブプロセスのルートディレクトリーが / ディレクトリーとは異なるものであることを定義できます。named-chroot サービスを開始すると、BIND はそのルートディレクトリーを /var/named/chroot/ に切り替えます。その結果、サービスは mount --bind コマンドを使用して、/etc/named-chroot.files にリストされているファイルおよびディレクトリーを /var/named/chroot/ で使用できるようにし、プロセスは /var/named/chroot/ 以外のファイルにアクセスできません。
プライマリDNSサーバ(管理サーバ#1)構成
定義ファイルの編集
管理サーバ#1の /etc/named.confを編集してBINDの全体的な設定、BINDが管理するゾーンの大枠の情報を記述します。
【prsmg01で実行】
-----------------------------------------------------------------------------
vi /etc/named.conf
-----------------------------------------------------------------------------
【/etc/named.confの内容】
-----------------------------------------------------------------------------
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
acl "internalnet" {
172.16.10.0/24;
};
options {
listen-on port 53 { 172.16.10.11; };
//listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { internalnet; localhost; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
forwarders {
172.16.10.254;
};
forward only;
allow-recursion {
172.16.10.0/24;
};
dnssec-validation no;
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
allow-transfer {
172.16.10.12;
};
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
// Production site Zone
zone "exsample.lan" IN {
type master;
file "exsample.foward.db";
};
zone "10.16.172.in-addr.arpa" IN {
type master;
file "10.16.172.in-addr.arpa.rev";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
【named.conf設定項目の補足】
設定項目 | 説明 |
acl | アクセス制御に使用する、IP アドレスの一致リストを名前を付けて定義 |
listen-on port | BINDがクライアントからのクエリを受け取るネットワークインタフェースとポートを指定 |
allow-query | 問合せを許可する対象 |
recursion | リゾルバとしての動作を定義(yes:リゾルバとして動作、no:リゾルバとして動作しない) 一部のサーバの構築でRed Hatのリポジトリへの接続が必要となるためyesを設定 |
forwarders | 自身で解決できないリクエストの転送先を指定 |
allow-recursion | どのクライアントに対して再帰的クエリを許可するか |
allow-transfer | ゾーン転送を許可する対象(slave(セカンダリ)側サーバを指定) |
zone “bkmsite.lan” | bkmsite.lanゾーンの定義 type master:master(プライマリ)/slave(セカンダリ)のプライマリDNSサーバ file:exsample.lanのゾーンファイル名 |
zone “10.16.172.in-addr.arpa” | in-addr.arpa は逆引きに使用すると特殊ドメイン。 目的のIPアドレスの各数字を逆順にし、その後ろにin-addr.arpaを付加 |
named.confに定義したゾーンexsample.lanの正引き、逆引きゾーンファイルをそれぞれ作成します。ゾーンファイルの作成場所はnamed.confのoption directoryに書かれている /var/namedの下になります。
本来、DNSサーバを構築する理由はOracle RACのSCANとDBサーバの名前解決が目的ですが、肝心のDBサーバ構築がこれからなので現時点ではとりあえず管理サーバ関連情報だけ登録してDNSサーバとしての機能確認までやっておきます。
【prsmg01で実行】
-----------------------------------------------------------------------------
vi /var/named/exsample.foward.db
-----------------------------------------------------------------------------
【/var/named/exsample.foward.dbの内容】
-----------------------------------------------------------------------------
$TTL 86400
@ IN SOA prsmg01.exsample.lan.zone. root.exsample.lan.zone.(
2025043000 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ; MinimumA TTL
)
IN NS prsmg01.exsample.lan.
IN NS prsmg02.exsample.lan.
prsmg00 IN A 172.16.10.10
prsmg01 IN A 172.16.10.11
prsmg02 IN A 172.16.10.12
【prsmg01で実行】
-----------------------------------------------------------------------------
vi /var/named/10.16.172.in-addr.arpa.rev
-----------------------------------------------------------------------------
【/var/named/10.16.172.in-addr.arpa.revの内容】
-----------------------------------------------------------------------------
$TTL 86400
@ IN SOA prsmg01.exsample.lan.zone. root.exsample.lan.zone.(
2025043000 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ; MinimumA TTL
)
IN NS prsmg01.exsample.lan.
IN NS prsmg02.exsample.lan.
10 IN PTR prsmg00.exsample.lan.
11 IN PTR prsmg01.exsample.lan.
12 IN PTR prsmg02.exsample.lan.
【ゾーンファイル編集内容の補足】
設定項目 | 説明 |
TTL | リソースレコードのデフォルトの有効期限 |
SOAレコード | ゾーンの基本情報を提供するレコード(プライマリ・ホスト名 責任者メールアドレス) Serial:ゾーンファイルのバージョン番号 Refresh:セカンダリ→プライマリへのゾーン情報更新確認間隔 Retry:セカンダリの更新失敗後、サーバーが再度確認するまでの待機時間 Expire:セカンダリによるゾーン転送完了時間(秒)のリミット MinimumA TTL:ネガティブキャッシュ(存在しないドメイン)を維持する時間 |
NSレコード | ドメインのネームサーバを指定(末尾にピリオド.必須) |
Aレコード | ドメイン名をIPv4アドレスにマッピング |
PTRレコード | IPアドレスに対応するホスト名(末尾にピリオド.必須)をマッピング |
DNSサーバ起動
named-chrootサービスを起動してBINDを開始します。
【prsmg01で実行】
-----------------------------------------------------------------------------
# named.confの内容をチェック
named-checkconf
→ エラーが出力されなければOK
# named-chrootを起動
systemctl start named-chroot.service
→ named-checkconfがOKでもサービス起動時にエラーとなる場合も。
その時は画面に表示されたメッセージに従って原因調査
名前解決確認
nslookupによる管理サーバのIPアドレス、クラスタ仮想IPアドレスの名前解決要求が正引き、逆引きとも正常に結果を返すことを確認します。
【prsmg01で実行】
-----------------------------------------------------------------------------
# 名前解決の確認
nslookup prsmg00
nslookup prsmg01
nslookup prsmg02
nslookup 172.16.10.10
nslookup 172.16.10.11
nslookup 172.16.10.12
→ nslookupコマンドが正引き、逆引きとも正常に結果を返すことを確認
# named-chrootの自動起動を有効化
systemctl enable named-chroot.service
セカンダリDNSサーバ(管理サーバ#2)設定
定義ファイルの編集
セカンダリDNSサーバである管理サーバ#2のnamed.confはプライマリ側(管理サーバ#1)と一部違うところがありますが内容的にはかなり近いものとなっています。
そこで管理サーバ#2に管理サーバ#1のnamed.confをscpでコピーしてこれを編集します。なお、ゾーンファイルはプライマリ(管理サーバ#1)側から転送されるので作成不要です。
【prsmg02で実行】
-----------------------------------------------------------------------------
# prsdb01のnamed.confを転送して編集
scp prsmg01:/etc/named.conf /etc/
vi /etc/named.conf
-----------------------------------------------------------------------------
【/etc/named.confの内容】
-----------------------------------------------------------------------------
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
acl "internalnet" {
172.16.10.0/24;
};
options {
listen-on port 53 { 172.16.10.12; };
//listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { internalnet; localhost; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
forwarders {
172.16.10.254;
};
forward only;
allow-recursion {
172.16.10.0/24;
};
dnssec-validation no;
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
// Production site Zone
zone "exsample.lan" IN {
type slave;
file "exsample.foward.slv.db";
masters {
172.16.10.11;
};
};
zone "10.16.172.in-addr.arpa" IN {
type slave;
file "10.16.172.in-addr.arpa.slv.rev";
masters {
172.16.10.11;
};
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
DNSサーバ起動
named.confのチェックをして問題がなければnamed-chrootサービスを起動します。
【prsmg02で実行】
-----------------------------------------------------------------------------
# named.confの内容をチェック
named-checkconf
→ エラーが出力されなければOK
# exsample.lanのゾーンファイルが存在しないことを確認
ls -l /var/named/*slv*
# named-chrootを起動
systemctl start named-chroot
# exsample.lanの静引き、逆引きゾーンファイルが転送されたこと確認
ls -l /var/named/*slv*
# バイナリの正引き(exsample.foward.slv.db)ゾーンファイルの内容をテキスト形式で出力
named-compilezone -f raw -F text -o - exsample.lan /var/named/exsample.foward.slv.db
# バイナリの逆引き(10.16.172.in-addr.arpa.slv.rev)ゾーンファイルの内容をテキスト形式で出力
named-compilezone -f raw -F text -o - 10.16.172.in-addr.arpa /var/named/10.16.172.in-addr.arpa.slv.rev
名前解決確認
管理サーバ#1のDNSサーバを停止して管理サーバ#2のみ起動した状態にします。この状態でnslookupによる名前解決要求が正常に結果を返すことを確認します。
【prsmg01で実行】
-----------------------------------------------------------------------------
# named-chrootを停止
systemctl stop named-chroot
-----------------------------------------------------------------------------
【prsmg02で実行】
-----------------------------------------------------------------------------
# 名前解決の確認
nslookup prsmg00
nslookup prsmg01
nslookup prsmg02
nslookup 172.16.10.10
nslookup 172.16.10.11
nslookup 172.16.10.12
→ nslookupコマンドが正引き、逆引きとも正常に結果を返すことを確認
# named-chrootの自動起動を有効化
systemctl enable named-chroot.service
-----------------------------------------------------------------------------
【prsmg01で実行】
-----------------------------------------------------------------------------
# named-chrootを起動
systemctl start named-chroot
FirewalldへのDNSサービス許可設定
管理サーバ#1、管理サーバ#2のfirewalldのサービス許可リストにDNSサービスを追加します。
【prsmg01、prsmg02で実行】
-----------------------------------------------------------------------------
# デフォルトゾーンのサービス許可リストを表示
firewall-cmd --list-services
→ dnsが含まれていないことを確認
# firewalldのサービス許可リストにdnsサービスを(永続的に)追加
firewall-cmd --add-service=dns --permanent
# ランタイムモードで設定を再ロード
firewall-cmd --reload
# デフォルトゾーンのサービス許可リストを表示
firewall-cmd --list-services
→ dnsが追加されたことを確認
namedの設定が終わったら次は管理サーバのクラスタを構築です。
参考情報
「管理サーバ構築」を書くにあたり、以下のサイトを参考にさせていただきました。
【chrony】
基本的なシステム設定 | Red Hat Product Documentation
18.3. chrony の使用 | Red Hat Product Documentation
【BIND】
ネットワークインフラストラクチャーサービスの管理 | Red Hat Product Documentation
DNS-as-a-Service ガイド | Red Hat Product Documentation
RHEL8 上に BIND を構築する #bind – Qiita
BIND DNSサーバをマスタ、スレイブ構成でLinux上に構築する手順をメモ | KITA-SAN.BLOG
BINDのViewを使って複数のネットワークごとに見せる情報を変える – YGG Tech
【Pacemaker】
高可用性クラスターの設定および管理 | Red Hat Product Documentation
CentOS Stream 8 : Pacemaker : インストール : Server World
厚くお礼申し上げます。
コメント