Jasa Seting VPS dan Dedicated Server Linux (Instal, Migrasi, Backup, Troubleshooting, etc) - 081 22 999 4257

Cara Gabut Switch ke IP Cadangan (Failover IP) di A Record pada Nameserver

Beberapa waktu yg lalu saya udah sharing mengenai cara hosting nameserver sendiri (bisa dibaca di sini) yaitu menggunakan aplikasi Nameserver Daemon atau NSD. Di situ pada tiap zone file domain yg diarahkan akan mempunyai sebuah A record, yaitu entry yg mengatur dia akan mengarah ke ip mana saat domain itu diakses browser. A record ini umumnya ya mengarah ke ip server hosting baik itu VPS, dedicated server maupun lainnya.

;
; NSD data file for eudns.ch
;
$TTL 3h
@ IN SOA ns1.eudns.ch. admin.eudns.ch. (
1 ; Serial
3h ; Refresh after 3 hours
1h ; Retry after 1 hour
1w ; Expire after 1 week
1h ) ; Negative caching TTL of 1 day
;
@ IN NS ns1.eudns.ch.
@ IN NS ns2.eudns.ch.

eudns.ch. IN A 198.46.131.177
ns1       IN A 163.169.131.125
ns2       IN A 163.169.131.125
www       IN CNAME eudns.ch.

Contoh zone file di atas, domain eudns ini kalo diakses akan resolve ke hosting dengan ip 198.46.131.177.

Sekarang, bayangkan sebuah kasus di mana ternyata ip hosting tsb down, kena DDoS kiriman tetangga, atau mati alias offline. Mungkin karena ada semacam teknikal error, atau mungkin karena anda kebanyakan foya-foya sehingga tagihan servernya lupa dibayar. Apa yg terjadi saat web diakses? Tentu pengunjung akan ngambek karena browser mereka menampilkan error bahwa web ga dapat dibuka/diakses. Ini juga jadi sebuah kerugian bagi owner web karena berpotensi menurunkan omzet!

Untuk mengatasi hal tsb, ada baiknya ada ip server atau hosting cadangan. Yang mana ketika ip utama offline maka dia akan otomatis berganti ke ip backup (atau istilahnya disebut failover ip).

IP backup ini bisa berupa hosting cadangan yg udah di-mirror dari server utama (bisa tuh misal pake rsync untuk mirror konten). Atau cuma sekedar static page yg berisi info kepada visitor bahwa web sedang ada kendala dan dalam perbaikan secepatnya (setidaknya visitor ga kesal dibanding cuma liat error yg disampaikan oleh browser). Supaya ip dapat berganti otomatis ke ip cadangan saat terjadi insiden di ip utama, bisa menggunakan sebuah script seperti contoh di bawah ini:

#!/bin/bash

ZONE_FILE="/etc/nsd/master/eudns.ch.zone"
PRIMARY_IP="198.46.131.177"
FAILOVER_IP="81.128.180.159"
CURRENT_IP="$PRIMARY_IP"

function update_ip_in_zone_file() {
    sed -i "s/$PRIMARY_IP/$FAILOVER_IP/g" "$ZONE_FILE"
}

function revert_ip_in_zone_file() {
    sed -i "s/$FAILOVER_IP/$PRIMARY_IP/g" "$ZONE_FILE"
}

function restart_nsd() {
    systemctl restart nsd
}

function ping_host() {
    ping -c 3 -W 3 "$1" > /dev/null 2>&1
}

while true; do
    if [ "$CURRENT_IP" == "$PRIMARY_IP" ]; then
        if ! ping_host "$PRIMARY_IP"; then
            echo "Primary IP is unreachable. Switching to Failover IP."
            update_ip_in_zone_file
            restart_nsd
            CURRENT_IP="$FAILOVER_IP"
        fi
    else
        if ping_host "$PRIMARY_IP"; then
            echo "Primary IP is reachable again. Reverting to Primary IP."
            revert_ip_in_zone_file
            restart_nsd
            CURRENT_IP="$PRIMARY_IP"
        fi
    fi

    sleep 30
done

Ip cadangan yg digunakan pada contoh ini yaitu 81.128.180.159, yg bertugas menggantikan 198.46.131.177 jika 198.46.131.177 tidak merespon saat dilakukan ping. Jika ip 198.46.131.177 hidup kembali maka script ini akan mengembalikan A record di zone file ke ip tsb.

Save scriptnya dalam sebuah file, jangan lupa chmod +x dan selanjutnya jalankan dalam command screen.

Leave a Reply