Masih ingat tutorial saya tentang Patroni dahulu? Saya akan membuat tulisan lengkap dari nol sampai berjalan. Di akhir tutorial ini Anda bisa membuat kluster Patroni secara manual. Kalau Anda devops dan tertarik menulis resep untuk Ansible, Puppet, dan sejenisnya, saya harap artikel ini bisa menjadi acuan untuk mengerti Patroni.

Mesin-mesin yang Ada

Saya membagi setiap mesin yang digunakan dengan dua IP. Satu subnet IP internal yang digunakan untuk setiap mesin dalam kluster berkomunikasi dan satu subnet IP yang digunakan untuk akses luar. Implementasi fisik dengan menggunakan dua kartu jaringan (atau dua bonding fisik)  yang berbeda. Perbedaan jaringan untuk komunikasi internal dan komunikasi dengan klien ini selain menyediakan keamanan dalam isolasi, juga membuat koneksi internal atau pun eksternal tidak saling mengganggu.

Untuk mengurangi kompleksitas tutorial ini, saya hanya menyediakan satu mesin HAProxy dan satu mesin etcd. Fokus tulisan ini adalah untuk ketersediaan PostgreSQL. Untuk membuat ketersediaan HAProxy dan etcd akan dibahas lain kali bila ada waktu [baca: kalau tidak malas].

Agar tidak membingungkan, saya selalu mempraktikkan penamaan kluster ditambah dengan prefiks nama aplikasi. Hal ini penting karena di perawanan yang sudah semakin terotomatisasi, kadang kita suka bingung kalau konfigurasi sudah tidak ada lagi.

konfigurasi

Konfigurasi server yang dipakai

Yak, intinya ada 5 mesin untuk tutorial kali ini. Saya menggunakan GNU/Linux Debian 9 karena itu standar sistem operasi UI. Untuk sistem operasi lain saya rasa tidak ada yang berbeda karena kali ini saya tidak menggunakan paket repositori.

Untuk memudahkan, pastikan kelima mesin ini memiliki berkas /etc/hosts yang berisi kelima host.

Selanjutnya, akan dibuatkan etcd terlebih dahulu sebagai inti yang mengatur kluster.

ETCD

Aplikasi etcd adalah sebuah basisdata konfigurasi yang digunakan status. Aplikasi etcd tidak ada di repositori Debian 9. Saya mengunduh versi terbaru dari CoreOS dan memasang manual.

Konfigurasi

Aplikasi etcd berisi satu binari. Untuk konfigurasi, buat manual.

Layanan

Agar dapat dijalankan secara sistem, perlu dibuatkan layanan systemd secara manual.

Pengaktifan Layanan etcd

Perhatikan bahwa untuk contoh kali ini saya menggunakan akun etcd dan grup etcd. Praktik aman selalu jalankan layanan sebagai pengguna biasa, bukan root. Buat pengguna baru ini.

Bagian terakhir dari etcd adalah mengaktifkan dan menjalankan layanan etcd.

Baris daemon-reload adalah agar systemd membaca konfigurasi yang baru saja dibuat. Baris enable untuk mendaftarkan etcd sebagai layanan yang dijalankan otomatis saat mesin baru mulai. Baris terakhir untuk menjalankan layanan etcd.

PostgreSQL

Berbeda dengan tutorial yang lalu, saya akan membuat konfigurasi per mesin agar lebih menggambarkan apa yang terjadi. Sebelum memulai, saya asumsikan bahwa setiap mesin PostgreSQL pengguna root memiliki kunci SSH sehingga antar mesin bisa masuk tanpa kunci.

Cara paling gampang, di salah satu mesin buat kunci.

Lalu, taruh kunci publik dan privat ke root. Saya asumsikan bahwa kita bekerja di mesin pg1-nyata.

Ini saya pasang secara manual. Biasanya untuk Vagrant, Proxmox, dan sejenisnya sudah menyediakan opsi pemasangan kunci SSH di konfigurasi/plugin mereka. Namun, untuk kelengkapan tutorial ini saya tuliskan saja manual. Saya sendiri sebenarnya hanya memasang satu mesin; memasang PostgreSQL; dan baru diklon menjadi dua mesin lainnya.

Pemasangan PostgreSQL

Saya kali ini menggunakan PostgreSQL yang saya kompilasi sendiri. Mengapa? Karena hasil kompilasi lebih irit dan saya mau ada variasi tulisan. Di blog saya ada kok cara-caranya untuk memasang versi repo.

Pemasangan PostgreSQL setiap mesin sama. Untuk memasang paket ketergantungan di setiap mesin jalankan:

Unduh PostgreSQL. Saya memakai versi stabil terbaru, 10.2. Kebetulan juga, saya ada peladen cermin di samping ruangan:

Saya melakukan optimasi CFLAGS untuk kompilasi. Hal ini karena saya tahu bahwa peladen di tempat saya itu homogen. Tapi, kalau misalnya Anda memasang di penyedia awan, sebaiknya  CFLAGS jangan disertakan.

Selanjutnya pemasangan Patroni.

Patroni

Patroni merupakan skrip Python. Untuk memasang Patroni, pastikan Python PIP dipasang. Saya memilih Python3. Namun, biasanya yang digunakan Python2. Saya memakai Python3 karena saya keren.

Pasang Patroni dan plugin etcd-nya.

Buat pengguna postgres

Buatkan layanan sistem.

Selanjutnya, buat konfigurasi per mesin.

Konfigurasi Per Mesin

Buat konfigurasi per mesin /etc/patroni.yml

Contoh konfigurasi yang tertulis untuk mesin pg1-nyata. Untuk pg2-nyata dan pg3-nyata ubah baris ke-3 name dengan nama mesin, dan setiap baris listen dan connect_address dengan IP per mesin.

Contoh perbedaan pg1-nyata dan pg2-nyata.

Semoga dengan ini tidak ada salah ganti atau terlewat.

Pengaktifan Layanan Patroni

Setelah konfigurasi dan unit layanan Patroni terpasang, layanan Patroni sudah bisa dijalankan. Untuk setiap mesin, jalankan:

Satu langkah lagi.

HAProxy

Bagian yang paling mudah saya salin saja, ya, perintahnya.

Konfigurasi:

Lalu,

Selesai.

Bacaan Lebih Lanjut