[Shared] Powerdns Master Master Repliction


Status
Not open for further replies.

pluto01

Hosting Guru
The Warrior
Verified Provider
Selamat sore teman-teman
Sebelumnya saya izin shared dikit,
Sekitar 1 minggu kemarin ada teman minta bantu yang mana ybs punya 5 VPS dan minta di setting seperti gambar di bawah :
dnscluster.jpg

Nah sapa tahu ada teman2 yg butuh info yg sama jadi coba share kebetulan kemarin ada buat mini how tonya untuk dia baca2,
Untuk config default/basic yg penting goalnya tercapai dan seiring berjalan waktu/kebutuhan bisa dicoba sesuaikan
1. Semua OS pakai centOS 6.7 64 bit,
2. NS1 dan NS2 beda benua,
3. Web server, Mail dan DB server 1 DC hanya beda node
4. DNS server pakai powerdns, web server apache, php 5.6 database
Q : Ini kan untuk DNS server kenapa install webserver dan apache lagi ?
A : Untuk mempermudah managed A recordnya jadi install poweadmin, jadi agar poweradminnya bs akses jd install itu, karena ini kebutuhannya khusus jadi bagusnya power httpnya di kostum saja,

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 :
Code:
[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
Code:
[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
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 Repliction:
Pada DNS-1 untuk database master lakukan perubahan pada my.cnf seperti berikut ini :
[root@clt2 ~]# nano /etc/my.cnf
Code:
[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)]>

Sambung bawah post#2 kepanjangan :77:
 

pluto01

Hosting Guru
The Warrior
Verified Provider
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
Code:
[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 :
Code:
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 :
Code:
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 :
Master1.png

Master-2 :

MariaDB [(none)]> SHOW SLAVE STATUS\G
Master2.png

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
Code:
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;

Sambung bawah post#3 kepanjangan :77:
 

pluto01

Hosting Guru
The Warrior
Verified Provider
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 :
Code:
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 ~]# 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

Create Zone Powerdns
Create Zone Templates Powerdns

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.
#Jika ada yg coba diperhatikan kurangnya yach

Note : Maaf yach jika post ini kepanjangan :77:
 

GPLHosting

Hosting Guru
Maaf setelah baca lg banyak typo, misalnya di post #1 aturannya port malah keketik power, aturannya php malah keketik apache
#tak bs edit lg

Hayo loooo om :D
Jangan terburu-buru om..

Saran aja om .. Biasakan setiap mau posting, dibaca dulu berulang kali, minimal 3x :D

Anyway, like it and very appreciate it. Good job om Andre !
 

GPLHosting

Hosting Guru
Mungkin bisa re-posting di post-1 dengan meminta bantuan CG. Atau mungkin bisa di buatkan artikelnya di web/blog, lalu URL nya di posting disini om...

*sekedar tambahan masukan lagi.
 

el_makong

Hosting Guru
mantap TS sharenya!
saya suka powerdns karena statusnya authoritative non cached tidak seperti bind9.dan database ke base sql(mysql/mariadb sama saja) jadi buat scripting php lebih mudah..haha
 

pluto01

Hosting Guru
The Warrior
Verified Provider
Sip, sama2 mas @khairilgunawan kurang/lebih ditambah yach mas
Selama pakai sich emang terasa sedikit baik jika dibanding dgn bind mungkin bisa jd karena efek bind lebih "komplit" dan sedikit banyak pakai resource atau bs jd juga saya yg kurang bisa confignya jadi berkurang "rasanya" :D
#sayabelumbenchmarkpastikeduanyahanyadirasakan

Yupz, tepat bang el_makong
 
Status
Not open for further replies.

Top