前書き
このチュートリアルでは、マスターDNSサーバーからスレーブへの自動レプリケーションを使用して、マスター/スレーブ構成でPowerDNSをセットアップする方法を学習します。 このチュートリアルは、https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-powerdns-with-a-mariadb-backend-on-ubuntu-14-04 [ Ubuntu用のPowerDNS]シリーズ。
マスター/スレーブ構成により、信頼性が向上します。 PowerDNSサーバーの1つがダウンした場合、リクエストを処理するセカンダリサーバーがあります。
これらのサーバーを個別のデータセンターにプロビジョニングすることをお勧めします。 それらが2つの物理的な場所にある場合、データセンターが停止してもDNSサービスには影響しません。
このチュートリアルの終わりまでに、マスター/スレーブレプリケーションを使用する2つの機能的なPowerDNSサーバーが完成します。
前提条件
次の要件を完了してください。
-
Ubuntu 14.04 64ビットで2つの512 MBドロップレット以上。 中程度の数のゾーン/レコードでPowerDNSサーバーを実行するには、512 MBで十分です。
-
レジストラで構成されたドメインのグルーレコードとネームサーバー設定
前のチュートリアルでは、3つのサブドメインが単一のPowerDNSサーバーを指すようにしました。 これらのサブドメインのいずれかを使用して、スレーブサーバーを指すようになります。 この例では、* master server IP *は ``になり、* slave server IP *は ``になります。
それに応じて、プロバイダーでグルーレコードを更新する必要があります。 以下の情報をガイドとして使用してください。 DNSレコードの構成の詳細については、前のPowerDNSチュートリアルを参照してください。
-
* hostmaster.example-dns.com *
++
(マスターサーバー) -
* ns1.example-dns.com *
++
(マスターサーバー) -
* ns2.example-dns.com *
++
(スレーブサーバー)
ネームサーバー自体に使用されるドメインのレジストラで、グルーレコードとSOAレコードの両方を設定する必要があることに注意してください。 一方、ゾーンファイルをカスタムネームサーバーでホストする他のドメインのSOAレコードのみが必要です。
ステップ1-両方のサーバーにPowerDNSをインストールします
まず、機能する2つのPowerDNSサーバーが必要です。 1台のサーバーがマスターサーバーになり、2台目のサーバーがスレーブサーバーになります。
まだ行っていない場合は、前のチュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-and-configure-powerdns-with-a-mariadb-backend-onに従ってください。 -ubuntu-14-04 [Ubuntu 14.04でMariaDBバックエンドを使用してPowerDNSをインストールおよび構成する方法]。
*マスターサーバー*で完全なチュートリアルに従う必要があります。
セカンダリサーバーでPoweradminは必要ないため、*スレーブサーバー*で手順1〜7のみを実行できます。
2台の機能的なPowerDNSサーバーがあり、少なくとも1台がPoweradminを実行している場合、次の手順に進むことができます。
手順2-マスターサーバーの構成(ns1.example-dns.com)
これで、マスターPowerDNSサーバーを構成する準備ができました。
これは、Poweradminがインストールされているサーバーである必要があり、プライマリDNSサーバー*と見なされます。 両方のサーバーにPoweradminがインストールされている場合は、どちらかを使用できます。 この例に従う場合、これは ns1.example-dns.com *になります。
元の構成ファイルをバックアップします。
cd /etc/powerdns
sudo mv pdns.conf pdns.conf.orig
新しい構成ファイルを作成します。
sudo nano pdns.conf
以下の詳細は、単一のスレーブサーバーを使用した標準のマスターサーバー構成です。 スレーブサーバーのIPアドレスを入力して、このマスターサーバーと通信できるようにします。 以下の独自の*スレーブサーバーIPアドレス*を忘れずに置き換えてください。
注意:/ 32は単一のIPサブネットであり、この構成に必要です。
/etc/powerdns/pdns.conf
allow-recursion=0.0.0.0/0
allow-axfr-ips=/32
config-dir=/etc/powerdns
daemon=yes
disable-axfr=no
guardian=yes
local-address=0.0.0.0
local-port=53
log-dns-details=on
log-failed-updates=on
loglevel=3
module-dir=/usr/lib/powerdns
master=yes
slave=no
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
include-dir=/etc/powerdns/pdns.d
PowerDNSサービスを再起動して、変更を有効にします。
sudo service pdns restart
手順3-スレーブサーバーの構成(ns2.example-dns.com)
これで、スレーブサーバー*を設定する準備ができました。 このサーバーは、設定したマスターサーバーからDNSゾーンを複製します。 例に沿ってフォローしている場合、これは ns2.example-dns.com *になります。
元の構成ファイルをバックアップします。
cd /etc/powerdns
sudo mv pdns.conf pdns.conf.orig
新しい構成ファイルを作成します。
sudo nano pdns.conf
以下の詳細は、60秒の更新間隔での標準スレーブサーバー構成のものです。 構成を正確にコピーできます。
/etc/powerdns/pdns.conf
allow-recursion=0.0.0.0/0
config-dir=/etc/powerdns
daemon=yes
disable-axfr=yes
guardian=yes
local-address=0.0.0.0
local-port=53
log-dns-details=on
log-failed-updates=on
loglevel=3
module-dir=/usr/lib/powerdns
master=no
slave=yes
slave-cycle-interval=60
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
include-dir=/etc/powerdns/pdns.d
60秒ごとに、スレーブサーバーはマスターサーバーにゾーンの更新を照会します。 通常、ゾーンが更新されると、マスターサーバーはそのゾーンに割り当てられたスレーブサーバーに通知を送信します。 ただし、ゾーンの更新中に接続の問題が発生した場合、これにより、スレーブサーバーが再びオンラインになったときに最終的に更新がスレーブサーバーに伝播することが保証されます。
次に、マスターサーバーとの通信方法をPowerDNSに指示する必要があります。
前のチュートリアルで作成したPowerDNSユーザー名とパスワードを使用してMariaDBにログインします。 この例では、「+ powerdns_user +」を使用しました。
mysql -u -p
プロンプトでパスワードを入力します。
OutputEnter password:
前のチュートリアルで構成したPowerDNSデータベースに変更します。 推奨は「+ powerdns +」でした。
USE powerdns;
次に、 `+ super master`テーブルに新しい行を作成します。 この行は、マスターサーバーのIP *アドレスと、現在構成しているスレーブサーバーの完全修飾ドメイン名(FQDN)*を指定します。
insert into supermasters values ('', '', 'admin');
MariaDBシェルを終了できます。
exit;
PowerDNSサービスを再起動して、変更を有効にします。
sudo service pdns restart
ステップ4-マスター/スレーブ接続のテスト
この手順では、* ns1.example-dns.com がマスターサーバーを指し、 ns2.example-dns.com *がスレーブサーバーを指している必要があります。
グルーレコード、SOAレコード、およびAレコードがまだ伝達されていない場合は、 `+ / etc / hosts +`ファイルにオーバーライドを追加できます。 これは*両方のサーバー*で行いたいでしょう。
nanoを使用して `+ / etc / hosts +`を開きます。
sudo nano /etc/hosts
`+ / etc / hosts +`ファイルにエントリを追加します。
/ etc / hosts
2つのサーバーがすぐに通信できることを確認しましょう。
*マスターサーバー*から、両方のホスト名をpingします。
ping ns1.example-dns.com
結果は次のようになります。
Output64 bytes from ns1.example-dns.com (111.111.111.111): icmp_seq=1 ttl=64 time=0.061 ms
スレーブサーバーにpingを実行します。
ping ns2.example-dns.com
期待される結果:
Output64 bytes from ns2.example-dns.com (222.222.222.222): icmp_seq=1 ttl=64 time=48.8 ms
次に、同じコマンドを使用して、*スレーブサーバー*から両方のホスト名をpingします。 両方のサーバーから両方のサーバーにpingできるようになったら、続行します。
手順5-レプリケーションでDNSゾーンを構成する
両方のサーバーが適切に通信している場合、マスター/スレーブ複製を使用して最初のDNSゾーンを作成する準備ができています。
ブラウザで `+ http:/// poweradmin / +`にアクセスして、マスターサーバーのPoweradminにログインします。
image:https://assets.digitalocean.com/articles/poweradmin-slave/SMepFsRh.png [Poweradminログイン画面]
前に設定した管理者資格情報でログインします。
[マスターゾーンの追加]リンクをクリックして、新しいゾーンファイルを作成します。 これは、元の名前または新しいドメイン* test.com *でテストできます。
image:https://assets.digitalocean.com/articles/poweradmin-slave/AVTowJ0h.png [マスターゾーンの追加リンクをクリック]
トップレベルドメイン名を入力し、[ゾーンの追加]ボタンをクリックしてゾーンを作成します。
image:https://assets.digitalocean.com/articles/poweradmin-slave/DLbU5kMh.png [ゾーン名フィールドにドメイン名を入力]
ネームサーバーの* NS *エントリを作成します。
-
* hostmaster.example-dns.com *
-
* ns1.example-dns.com *
-
* ns2.example-dns.com *
レプリケーションをテストするには、少なくとも1つの* A *レコードを作成します。
image:https://assets.digitalocean.com/articles/poweradmin-slave/ftZDoc7h.png [NSおよびAレコードを追加]
注意:スレーブサーバーがゾーンのネームサーバーとしてリストされていない場合、ゾーンは複製されません。
数秒後、新しいエントリがスレーブサーバーに伝達されます。
`+ dig +`を使用して* ns1.example-dns.com *に保存されたDNSレコードをテストします。
dig A @
次のような結果で応答するはずです。
Outputroot@ns1:/etc/powerdns# dig test.com A @ns1.example-dns.com
; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns1.example-dns.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44833
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;test.com. IN A
;; ANSWER SECTION:
;; Query time: 2 msec
;; SERVER: 45.55.217.94#53(45.55.217.94)
;; WHEN: Tue Apr 28 18:06:54 EDT 2015
;; MSG SIZE rcvd: 53
`+ dig +`を使用して、* ns2.example-dns.com *に保存されたDNSレコードをテストします。
dig A @
次のような結果で応答するはずです。
Outputroot@ns1:/etc/powerdns# dig test.com A @ns2.example-dns.com
; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns2.example-dns.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11530
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;test.com. IN A
;; ANSWER SECTION:
;; Query time: 3 msec
;; SERVER: 45.55.217.132#53(45.55.217.132)
;; WHEN: Tue Apr 28 18:08:06 EDT 2015
;; MSG SIZE rcvd: 53
-
test.com の設定は、レジストラでネームサーバーを ns1.example-dns.com および ns2.example-dns.com *に設定した後にのみアクティブになることに注意してください。
結論
これで、マスター/スレーブ構成でMariaDBバックエンドを使用する2つの機能的なPowerDNSサーバーができました。
マスターサーバー上のマスターゾーンに変更が加えられるたびに、独自の* NS *レコードでリストされたスレーブサーバーに通知します。
スレーブサーバーは、最近更新されていないレコードについてマスターサーバーに自動的にクエリを実行し、PowerDNSノード間でDNSレコードの同期を維持します。