Docker Swarm Cluster – High Availability

Apa itu Docker?

Docker merupakan sebuah alat kontainerization yang bersifat open source. Karena sifatnya yg open source, sehingga memungkinkan developer untuk packing suatu aplikasi menjadi bentuk kontainer. Kontainer menjadi komponen standar yang dapat dieksekusi dengan menggabungkan source code aplikasi dengan library dari sistem operasi dan dependensi yang diperlukan untuk menjalankan aplikasi di sistem operasi apapun.

Apa itu Docker Swarm?

Docker swarm adalah alat orkestrasi kontainer yang berarti ia memungkinkan pengguna untuk mengelola beberapa kontainer sekaligus yang berada dalam cluster. Manfaat utama dari Docker swarm ini terkait dengan sifatnya yang HA(High Availability) untuk kontainer yang berjalan di dalam clusternya. Biasanya di dalam Docker swarm akan terdiri dari beberapa node worker dan setidaknya satu sebagai node manager, dimana node manager yang bertanggung jawab untuk menangani resource dari cluster dan memastikan bahwa cluster beroperasi secara efisien.

Apa itu Load Balancing?

Load balancing biasanya digunakan pada saat sebuah server jika user yang melakukan akses server tersebut telah melebihi jumlah maksimal. Ketika user yang mengakses melebihi kapasitas maka dengan menggunakan teknik load balancing, beban trafik tersebut akan dialihkan ke server yang lain.

Apa itu HAProxy?

HAProxy adalah penyeimbang beban sumber terbuka berkinerja tinggi dan proxy terbalik untuk aplikasi TCP dan HTTP. Pengguna dapat menggunakan HAProxy untuk meningkatkan kinerja situs web dan aplikasi dengan mendistribusikan beban kerja mereka. Peningkatan kinerja mencakup waktu respons yang diminimalkan dan peningkatan throughput.

Integrasi HAProxy sebagai High Availability Service

Untuk menjalankan High Availability pada cluster Docker swarm, kita bisa menggunakan HAProxy. Secara default cluster Docker swarm memang tidak support secara default untuk service High Availability-nya, Namun secara akses memang sudah support. Oke karena menambahkan HAProxy sebagai aksesnya maka topologi yang kita buat di awal akan berubah menjadi seperti dibawah:

Seperti topologi diatas client akan mengakses aplikasi melewati HAProxy terlebih dahulu lalu haproxy akan mengarahkan ke Docker swarm cluster yang ada di dalamnya. Untuk Sistem operasi yang digunakan kurang lebih sama seperti node pada Docker swarm. Oke, tanpa panjang lebar kita mulai dengan menginstall dependensi HAProxynya, untuk perintahnya sendiri ikuti seperti dibawah:

sudo apt install haproxy

Langkah selanjutnya yaitu mengkonfigurasi HAProxy. Oiya sedikit mengenai Load Balance, Load Balance merupakan teknik untuk membagi beban pada server. Untuk pembagiannya sendiri memakai beberapa algoritma seperti round robin, least connection, source ip dan masih banyak lagi. Namun, pada kasus kali ini kita memakai round robin. Selain itu haproxy juga bisa bertindak sebagai port forwarding, yaitu mengubah port aplikasi menjadi port lain. Port forwarding menjadi penting sebagai langkah untuk menyamarkan aplikasi. Oiya aplikasi yang akan setup agar menjadi High Availability adalah aplikasi simple-app yang kita buat tadi menggunakan stack. Aplikasi tersebut listen pada port 5000, Nah kita akan mengubahnya menjadi port 8080.

Oke itu mungkin sedikit penjelasanya, kita lanjut ke konfigurasi. Untuk file kondigurasi dari haproxy berada pada /etc/haproxy/haproxy.cfg. Konfigurasi dibawah ini ditambahkan pada bagian paling bawah pada file /etc/haproxy/haproxy.cfg berikut konfigurasinya:



frontend docker-front
  bind *:8080
  mode http
  default_backend docker-back
backend docker-back
  server docker-manager-1 172.23.0.250:5000 check rise 8 downinter 30000ms observe layer7 on-error mark-down
  server docker-manager-2 172.23.0.248:5000 check rise 8 downinter 30000ms observe layer7 on-error mark-down

Simpan lalu restart haproxy menggunakan perintah sudo systemctl restart haproxy

Jangan lupa scale up service pada swarm agar berjalan di setiap node manager.

Testing High Availability

Untuk menjalankan tesnya silahkan masuk ke browser dan ketikan alamat IP dari node HAProxy nya. Disini alamat IP node nya adalah 172.23.0.247:8080

Lalu kita coba akses IP salah satu manager, kita coba dengan manager1 yang memiliki alamat 172.23.0.250:5000 

Hasilnya sama bukan? Karena haproxy mengarahkan ke semua IP dari cluster Docker swarm manager nya. 

Sekarang kita coba mematikan node swarm-manager1, lalu kita coba test ping IP 172.23.0.250 karena itu merupakan IP dari swarm manager1

Oke node manager1 sudah mati, saatnya kita kembali akses IP dari HAProxy nya apakah masih bisa?

Hasilnya aplikasi masih tetap bisa diakses. Memang sedikit ada downtime namun cukup di refresh aplikasi sudah berjalan kembali.

Write a comment