CentOS7で開発環境用のDNSサーバを構築した話
はじめに
とあるサービスを作っている最中に負荷について調べていたところ、将来的にDBの負荷分散が必要になる可能性があった。
サービスはAWS上に構築するため、DBの負荷分散にはリードレプリカを利用し、DBのアクセスを振り分ける感じになる。
DBの負荷分散を想定してアプリを制作していなかったので、アプリの改造か必要かどうかの確認や改造後の動作確認が必要になり、DBアクセスをロードバランスする(またはそれっぽい)仕組みを開発環境に構築することにした。
マスターDBとリードレプリカなどのDBへのアクセスの振り分けについては、以下の方法があると思う。
- TCPのロードバランサ
- DNSを使ったなんちゃってロードバランサ(DNSラウンドロビン)
- Pgpool-Ⅱを使う(DBがPostgreSQLのとき)
Pgpool-Ⅱを使う場合、Pgpool-Ⅱの置き場所をドコにしたら良いのか?EC2を1台増やさないといけないのでは?っと思ったので、あまり調べもせずに除外
最初にNICを2つ持ったCentOS7仮想マシンを用意して、ロードバランサを構築しようとしたけれども、上手く行かなかったので断念
ということもあって、本番環境ではRoute53にマスターDBとリードレプリカのレコードセットを用意することにして、開発環境にはRoute53を同じ動作をしてもらうDNSサーバを構築することにした。
ちなみにDNSラウンドロビン方式だと、Webアプリケーション(SpringBoot)も接続先を切り替える改造が必要で、それについては別の記事を参照
目次
想定している本番環境
想定している本番環境は以下の感じ。
この中のRoute53の役割と同じような動作をするDNSサーバを構築するのが目的
バージョン・IPアドレス
bindのインストール
まずCentOS7にbindをインストールする。
sudo yum update -y sudo yum install -y bind bind-utils
bindの設定ファイルの修正
設定ファイル「/etc/named.conf」を修正する。
差分のみ記載
options { // ListenするIPを修正 listen-on port 53 { 127.0.0.1; 192.168.35.0/24; }; // 問い合わせを許可するIP・ホストを修正 allow-query { localhost; 192.168.35.0/24; }; // dnssecの機能を無効。(なんで無効にしたか覚えていない・・・) // 参考にしたサイトの設定をそのまま持ってきたかも // 有効のままでも問題ないかも dnssec-enable no; dnssec-validation no; // 追加。構築したDNSで名前解決できない場合は、本来使用しているDNSに転送 forwarders { 192.168.xxx.xxx; xxx.xxx.xxx.xxx; }; forward only; }; // 正引き zone "sample.internal" IN { type master; file "sample.internal.zone"; }; // 逆引き zone "35.168.192.in-addr.arpa" { type master; file "35.168.192.in-addr.arpa.rev"; };
正引き・逆引き設定ファイルの作成
正引き設定設定を「/var/named/sample.internal.zone」に記載する。
$TTL 3600 @ IN SOA sample.internal. root.sample.internal. ( 2018061001 3600 900 604800 86400 ) IN NS ns.sample.internal. ns IN A 192.168.35.20 read-only-db IN A 192.168.35.11 updatable-db IN A 192.168.35.10
逆引き設定を「/var/named/35.168.192.in-addr.arpa.rev」に記載する。
$TTL 3600 @ IN SOA sample.internal. root.sample.internal. ( 2018061001 ; serial 3600 ; refresh 1hr 900 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr ) IN NS ns.sample.internal. 20 IN PTR ns.sample.internal. 11 IN PTR read-only-db.sample.internal. 10 IN PTR updatable-db.sample.internal.
作成した設定ファイルの所有者を変更する。
sudo chown named:named /var/named/sample.internal.zone sudo chown named:named /var/named/35.168.192.in-addr.arpa.rev
NetworkManagerの設定の変更
リソルバを固定するため、「/etc/NetworkManager/NetworkManager.conf」の26行目あたりにあるDNSの設定を変更する。
[main] #plugins=ifcfg-rh,ibft dns=none
変更後は、NetworkManagerを再起動する。
sudo systemctl restart NetworkManager
「/etc/resolv.conf」の設定を変更する。
nameserver 192.168.35.20
おわりに
本番環境のRoute53と同じ動作をするための開発環境用のDNSサーバを構築できた。
初めてのDNSサーバの構築で、DNSの設定だけではなく、NetworkManagerやらresolv.confを修正しないといけなかったので意外と時間が掛かった気がする。
構築したDNSサーバを使用するときは、PCのDNSサーバの設定を変更する必要あり。