Tutorial DNS Cluster Master Master

Tutorial DNS Cluster Master Master

Tutorial DNS Cluster Master Master – Kemarin ada teman minta bantu setupkan seperti topologi di atas jadi sebagai catatan dokumentasi dan juga siapa tahu ada teman-teman yang punya kebutuhan sama mungkin bisa jadi referensi untuk dikembangkan.

Tutorial DNS Cluster Master Master

Apa itu DNS Cluster ?

DNS Cluster adalah dua atau lebih DNS server yang A recordnya saling auto sync sehingga jika ada salah satu DNS server yang down DNS server yang ON akan menghendle atau akan memproses request A record terhadap domain yang ada. Master Master di sini yaitu tujuannya agar tidak ada data yang lost, sehingga ketika DNS master down, DNS slave akan bertindak sebagai master dengan data A record yang sama.

Dalam tutorial ini kita akan mencoba menggunakan PowerDns sebagai DNS servernya dan MariaDB untuk databasenya dan untuk php dan web server tetap kita install karena untuk kebutuhan akses poweradmin sebagai panel untuk mempermudah managed nantinya.

Kebutuhan minimal build DNS Cluster Pada Tutorial ini :

1. 2 unit VPS/DS dengan os Linux, di sini penulis menggunakan distro centos dan menggunakan IP Public dengan lokasi yang berbeda (USA dan SG),
2. Powerdns sebagai dns server dan poweradmin untuk panel control,
3. MariaDB sebagai database server,
4. Web server ( di sini saya menggunakan httpd) dan module PHP pendukung agar poweradminya bisa berjalan

Config IP dan NS:

  1. DNS-1 dengan IP 11.22.33.44 ns1.domainsaya.com,
  2. DNS-2 dengan IP 55.66.77.88 ns2.domainsaya.com

Note : Pastikan kedua NS di atas sudah dibuat childnamenya dari panel domain dan di arahkan ke IPnya masing-masing, jika belum silahkan dibuat terlebih dahulu.

Konfigurasi DNS Cluster Master Master Powerdns

1. Install web server dan Database Server

Pertama kita tambah/install repo untuk menginstall MariaDB di centos 6, caranya yaitu sebagai berikut ini :
[root@clt2 ~]# yum update && sudo yum install epel-release
[root@clt2 ~]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
[root@clt2 ~]# nano /etc/yum.repos.d/mariadb.repo
Ini kita membuat file repo untuk mariadb kemudian isi dengan baris berikut ini :
==================================================
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2.7/centos6-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
==================================================
Kemudian simpan dengan menekan tombol kombinasi ctrl+x lalu tekan huruf Y kemudian tekan tombol enter,

Selanjutnya kita meng-Enable Remi Repository dengan cara sebagai berikut :
Secara default Remi repositori akan menginstall PHP versi5.4, jika Anda ingin menginstal PHP 5.5 atau 5.6, Anda harus mengaktifkan dengan baris enabled=0 ke enabled=1:
Silahkan edit file /etc/yum.repos.d/remi.repo dan sesuaikan dengan baris-baris berikut ini :
Di sini penulis menggunakan php 5.6
[root@clt2 ~]# nano /etc/yum.repos.d/remi.repo
=========================php5.6=========================
[remi-php56]
name=Remi’s PHP 5.6 RPM repository for Enterprise Linux 6 – $basearch
#baseurl=http://rpms.remirepo.net/enterprise/6/php56/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/6/php56/httpsmirror
mirrorlist=http://rpms.remirepo.net/enterprise/6/php56/mirror
# NOTICE: common dependencies are in “remi-safe”
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
=========================php5.6=========================

Kemudian simpan dengan menekan tombol kombinasi ctrl+x lalu tekan huruf Y kemudian tekan tombol enter,

Selanjutnya yaitu Meng-Install MariaDB, HTTPD dan PHP
Setelah step-step di atas selesai kita lakukan tanpa mengalami error selanjutnya kita mulai untuk install MariaDB, HTTPD dan PHP dengan cara sebagai berikut ini :
[root@clt2 ~]# yum –enablerepo=remi install MariaDB-client MariaDB-server
Kemudian kita install PHP Modules dan HTTPD yang akan dibutuhkan dengan cara sebagai berikut ini :
[root@clt2 ~]# yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

Selanjutnya kita start service httpd dan MariaDB dengan cara sebagai berikut ini :

[root@clt2 ~]# chkconfig –level 345 mysql on
[root@clt2 ~]# chkconfig –level 345 httpd on
[root@clt2 ~]# /etc/init.d/httpd start
Starting httpd: httpd: [ OK ]
[root@clt2 ~]# /etc/init.d/mysql start
Starting MySQL.170714 05:27:43 mysqld_safe Logging to ‘/var/lib/mysql/clt2.testing.com.err’.
170714 05:27:43 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
SUCCESS!
[root@clt2 ~]#

Selanjutnya set password untuk MySQL
[root@clt2 ~]# /usr/bin/mysql_secure_installation
Dan silahkan ikutin petunjuk yang muncul hingga selesai.

2. Membuat database Powerdns

Configurasi database master master Replication:
Pada DNS-1 untuk database master lakukan perubahan pada my.cnf seperti berikut ini :
[root@clt2 ~]# nano /etc/my.cnf
==================================================
[mysqld]
server-id = 141
report_host = master1
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
replicate-do-db = PowerDNSdb
auto_increment_increment = 5
auto_increment_offset = 1
==================================================

Kemudian simpan dengan menekan tombol kombinasi ctrl+x lalu tekan huruf Y kemudian tekan tombol enter,

Selanjutnya buat sebuah user replikasi :
[root@clt2 ~]# mysql -u root -pPASSWORDDATABASE
MariaDB [(none)]> create user ‘replicationuser’@’%’ identified by ‘replicationpassword’;
MariaDB [(none)]> grant replication slave on *.* to ‘replicationuser’@’%’;
MariaDB [(none)]> quit

[root@clt2 ~]# /etc/init.d/mysql restart

Untuk melihat statusnya bisa dengan perintah :

MariaDB [(none)]> show master status;
+——————–+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————–+———-+————–+——————+
| mariadb-bin.000006 | 699 | | |
+——————–+———-+————–+——————+
1 row in set (0.00 sec)

MariaDB [(none)]>

1.a Configurasi DNS-2 Slave1/Master2
Note : Khusus untuk install web server dan database server sama prosesnya dengan step di atas di sini yang membedakan hanya settingan database master/slave saja.
[root@clt1 ~]# nano /etc/my.cnf
==================================================
[mysqld]
server-id = 178
report_host = master2
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
# replicate-do-db = PowerDNSdb
auto_increment_increment = 5
auto_increment_offset = 2
==================================================

Kemudian simpan dengan menekan tombol kombinasi ctrl+x lalu tekan huruf Y kemudian tekan tombol enter,

Selanjutnya buat sebuah user replikasi :
[root@clt1 ~]# mysql -u root -pPASSWORDDATABASE
MariaDB [(none)]> create user ‘replicationuser’@’%’ identified by ‘replicationpassword’;
MariaDB [(none)]> grant replication slave on *.* to ‘replicationuser’@’%’;
MariaDB [(none)]> quit

[root@clt1 ~]# /etc/init.d/mysql restart

Untuk melihat statusnya bisa dengan perintah :

MariaDB [(none)]> show master status;
+——————–+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————–+———-+————–+——————+
| mariadb-bin.000006 | 344 | | |
+——————–+———-+————–+——————+
1 row in set (0.00 sec)

MariaDB [(none)]>

Kemudian di sisi Master-1 jalankan perintah berikut ini :

MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST=’Master2-IP’,
-> MASTER_USER=’replicationuser’,
-> MASTER_PASSWORD=’replicationpassword’,
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE=’mariadb-bin.000006′,
-> MASTER_LOG_POS=344,
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.04 sec)

MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>quit

[root@clt2 ~]# /etc/init.d/mysql restart

Kemudian di sisi Master-2 jalankan perintah berikut ini :

MariaDB [(none)]> CHANGE MASTER TO
-> MASTER_HOST=’Master1-IP’,
-> MASTER_USER=’replicationuser’,
-> MASTER_PASSWORD=’replicationpassword’,
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE=’mariadb-bin.000006′,
-> MASTER_LOG_POS=699,
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>quit

[root@clt1 ~]# /etc/init.d/mysql restart

Kemudian periksa status dari slave threads,

MariaDB [(none)]> SHOW SLAVE STATUS\G
Master-1 :
Tutorial DNS Cluster Master Master

Master-2 :

MariaDB [(none)]> SHOW SLAVE STATUS\G
Tutorial DNS Cluster Master Master

Membuat database Powerdns

Selanjutnya kita buat database yang nantinya akan digunakan oleh PowerDns dengan cara sebagai berikut ini :
Master-1 dan Master-2 sama proses pembuatan databasenya seperti di bawah, jadi silahkan anda lakukan hal yang sama untuk kedua mesin DNS servernya :
[root@clt2 ~]# mysql -u root -pPASSWORDMYSQL

MariaDB [(none)]> CREATE DATABASE NamaDatabase;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use NamaDatabase;
Database changed

MariaDB [PowerDNSdb]> CREATE TABLE domains (
-> id INT AUTO_INCREMENT,
-> name VARCHAR(255) NOT NULL,
-> master VARCHAR(128) DEFAULT NULL,
-> last_check INT DEFAULT NULL,
-> type VARCHAR(6) NOT NULL,
-> notified_serial INT DEFAULT NULL,
-> account VARCHAR(40) DEFAULT NULL,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.02 sec)

MariaDB [PowerDNSdb]> CREATE UNIQUE INDEX name_index ON domains(name);
MariaDB [PowerDNSdb]> CREATE TABLE records (
-> id BIGINT AUTO_INCREMENT,
-> domain_id INT DEFAULT NULL,
-> name VARCHAR(255) DEFAULT NULL,
-> type VARCHAR(10) DEFAULT NULL,
-> content VARCHAR(64000) DEFAULT NULL,
-> ttl INT DEFAULT NULL,
-> prio INT DEFAULT NULL,
-> change_date INT DEFAULT NULL,
-> disabled TINYINT(1) DEFAULT 0,
-> ordername VARCHAR(255) BINARY DEFAULT NULL,
-> auth TINYINT(1) DEFAULT 1,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.03 sec)

MariaDB [PowerDNSdb]> CREATE INDEX nametype_index ON records(name,type);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE INDEX domain_id ON records(domain_id);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE INDEX recordorder ON records (domain_id, ordername);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE TABLE supermasters (
-> ip VARCHAR(64) NOT NULL,
-> nameserver VARCHAR(255) NOT NULL,
-> account VARCHAR(40) NOT NULL,
-> PRIMARY KEY (ip, nameserver)
-> ) ;
Query OK, 0 rows affected (0.02 sec)

MariaDB [PowerDNSdb]> CREATE TABLE comments (
-> id INT AUTO_INCREMENT,
-> domain_id INT NOT NULL,
-> name VARCHAR(255) NOT NULL,
-> type VARCHAR(10) NOT NULL,
-> modified_at INT NOT NULL,
-> account VARCHAR(40) NOT NULL,
-> comment VARCHAR(64000) NOT NULL,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.02 sec)

MariaDB [PowerDNSdb]> CREATE INDEX comments_domain_id_idx ON comments (domain_id);
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE INDEX comments_name_type_idx ON comments (name, type);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE TABLE domainmetadata (
-> id INT AUTO_INCREMENT,
-> domain_id INT NOT NULL,
-> kind VARCHAR(32),
-> content TEXT,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.01 sec)

MariaDB [PowerDNSdb]> CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE TABLE cryptokeys (
-> id INT AUTO_INCREMENT,
-> domain_id INT NOT NULL,
-> flags INT NOT NULL,
-> active BOOL,
-> content TEXT,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.01 sec)

MariaDB [PowerDNSdb]> CREATE INDEX domainidindex ON cryptokeys(domain_id);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]> CREATE TABLE tsigkeys (
-> id INT AUTO_INCREMENT,
-> name VARCHAR(255),
-> algorithm VARCHAR(50),
-> secret VARCHAR(255),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.01 sec)
MariaDB [PowerDNSdb]> CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [PowerDNSdb]>quit;

3. Install PowerDns

Master-1 dan Master-2 sama proses installasi Powerdns seperti di bawah, jadi silahkan anda lakukan hal yang sama untuk kedua mesin DNS servernya :
[root@clt2 ~]# yum -y install pdns pdns-backend-mysql
[root@clt2 ~]# nano /etc/pdns/pdns.conf
Dan tambahakan baris berikut ini :
========================
launch=gmysql
gmysql-host=localhost
gmysql-user=root
gmysql-password=PASSWORDMYSQL
gmysql-dbname=NamaDatabase
gmysql-dnssec=yes
========================

[root@clt2 ~]# chkconfig –levels 235 pdns on
[root@clt2 ~]# service pdns start
Starting PowerDNS authoritative nameserver: started
[root@clt2 ~]#

[root@clt2 ~]# yum -y install php-pear-DB php-pear-MDB2-Driver-mysql
[root@clt2 ~]# pear install DB
[root@clt2 ~]# pear install pear/MDB2#mysql
Download package PowerAdmin dari link berikut ini : https://sourceforge.net/projects/poweradmin/files/latest/download?source=directory dan atau https://www.poweradmin.org/, jika sudah didownload package kemudian upload ke dalam server anda, selanjutnya silahkna extract dan install
[root@clt2 ~]# mkdir -p /var/www/dns/public_html
[root@clt2 ~]# tar zxvf poweradmin-2.1.7.tgz -C /var/www/dns/public_html/
[root@clt2 ~]# cd /var/www/dns/public_html/
[root@clt2 public_html]# mv poweradmin-2.1.7 dnspanel
[root@clt2 public_html]# chown -R apache:apache dnspanel/
Note: Jangan lupa penyesuaian root direktory htmlnya atau root httpnya yang mana tempat peletakan file-file webnya sesuai yang berjalan di tempat anda (misalnya saya root directory htmlnya yaitu di  /var/www/dns/public_html/)
Kemudian silahkan akses dari web browser anda IP atau domain server yang anda install PowerDNS, contoh : http://IP-Powerdns/dnspanel/install atau http://domainanda.com/dnspanel/install

Selanjutnya silahkan ikutin wizard installasi yang ada dan ikutin sesuai step yang diinformasikan dan jika sudah selesai proses install jangan lupa hapus atau rename folder install.
Jika ada kendala dengan proses install powerdns bisa merujuk ke link ini yang lebih details perihal install powerdns Install PowerDNS dan PowerAdmin dengan MySQL di CentOS.

Selanjutnya silahkan anda menambahkan Template Zone dan A record di Master-1, jika sudah silahkan login ke poweradmin Master-2, seharusnya jika semua berjalan normal Template Zone dan A record yang tadi kita tambahkan di Master-1 akan secara auto ada di Master-2 juga. Begitu sebaliknya apa yang kita lakukan perubahan di Master-2 maka yang di Master-1 juga akan terupdate, sehingga goal sebagai berikut akan tercapai :

—–>>Master-1 UP
—–>>Master-2 UP
—–>>Master-1 Down maka layanan record DNS akan diambil alih oleh Master-2,
—–>>User melakukan update A record dan yang terupdate yaitu Master-2,
—–>>Master-1 UP secara otomatis akan update A record sesuai perubahan yang ada di Master-2 tadi sehingga tidak akan ada lost data dan saling membackup. Seperti itu juga jika yang Master-2 down.

Langkah selanjutnya yaitu :
——>>Disarankan di webserver service DNS servernya tidak perlu diaktifkan untuk “mengurangi”
——>>Setiap domain user NSnya arahkan di kedua NS tadi yaitu yang Master-1 dan Master-2,
——>>Sehingga semua management DNS berada di powerdns (tinggal mengarah-ngarahkan A record nya saja lagi menuju kemananya),
——>>Silahkan buat user untuk client anda (jika ini merupakan DNS shared dan anda ingin memberikan akses ke user agar mereka bisa managed A record mereka sendiri), jadi ketika anda menambahkan “Master Zone” jangan lupa untuk “Owner of zone” pilih administrator dan juga user yang mempunyai Zone tersebut agar nantinya user tersebut punya akses untuk managed record zonenya.
——>>Tested Plesk Panel dan non-panel Work

Source : https://doc.powerdns.com/

Sekian tutorial sederhana ini selama mencoba dan semoga berhasil dan semoga bermanfaat bagi yang membutuhkan. Silahkan dikembangkan dan dimaksimalkan beberapa yang kurang untuk lebih optimal.

Add a Comment