Pada artikel ini, saya ingin membagi langkah langkah cara konfigurasi persistent volume yang digunakan di cluster Docker Swarm
Persistent volume dapat digunakan terutama jika kita memerlukan storage tetap di cluster Docker Swarm. Misalnya, pada cluster Docker Swarm kita terdapat container aplikasi database. Jika sewaktu-waktu terjadi masalah pada salah 1 node dan container tidak berjalan di node tersebut, kemudian container aplikasi database tersebut dijalankan kembali di node lain, data data yang sebelumnya sudah tersimpan tidak hilang, meskipun container dijalankan di node yang berbeda ketika container dijalankan sebelumnya.
Pada artikel ini, saya menggunakan lingkungan sistem Cluster Docker Swarm yang terdiri atas 1 node master dan 2 node worker. Node dijalankan di atas Ubuntu Linux 20.04 yang berjalan di AWS EC2. Namun konfigurasi ini juga sudah pernah saya coba jalankan di On Premise dan dapat berjalan.
Untuk persistent volume menggunakan GlusterFS. Nantinya 3 node tersebut akan terhubung ke 1 logical volume yang dikonfigurasi via Gluster
Skenario yang digunakan pada artikel ini adalah membuat service/stack aplikasi database via container. Database yang digunakan adalah MariaDB. Nantinya saya akan mensimulasikan ketika container berjalan di node yang berbeda namun data dalam database tetap sama atau tidak berubah.
Topologinya jika digambarkan sebagai berikut:
Sebelum memulai konfigurasi, ada baiknya juga untuk memastikan port port yang digunakan oleh GlusterFS sudah dibuka di firewall. Untuk dokumentasi port yang digunakan, silahkan cek dari dokumentasi di web GlusterFS berikut:
Berikut langkah-langkah yang dilakukan untuk konfigurasi persistent volume Docker Swarm menggunakan GlusterFS:
-
Mapping IP setiap host yang akan terhubung ke dalam Cluster Gluster. Masukkan informasi IP di /etc/hosts. Lakukan ini di setiap node.
-
Install dependancy dan tambahkan repository gluster. Lakukan ini di setiap node.
sudo apt-get install software-properties-common -y sudo add-apt-repository ppa:gluster/glusterfs-3.12
-
Update apt dan install GlusterFS server. Lakukan ini di setiap node.
sudo apt-get update sudo apt install glusterfs-server -y
-
Start service glusterd dan enable service glusterd agar berjalan sewaktu startup. Lakukan ini di di setiap node.
sudo systemctl start glusterd sudo systemctl enable glusterd
-
Generate SSH keygen di setiap node.
ssh-keygen -t rsa
-
Peer probe node yang join di cluster Gluster. Lakukan command ini di master node dan jalankan command sebagai root. Pastikan probe success di setiap node.
su - gluster peer probe [node_1]; gluster peer probe [node_2]; gluster peer probe [node_3]
-
Cek setiap node sudah terhubung di dalam cluster Gluster.
gluster pool list
-
Buat directory Gluster di tiap node.
-
Buat Gluster Volume yang nantinya akan digunakan sebagai logical volume di cluster. Kemudian jalankan volume-nya. Jalankan ini di master node.
sudo gluster volume create [volume_name] replica [number_of_replicas] [volume_path] sudo gluster volume start [volume_name]
-
Mount Gluster di setiap node dan konfigurasi agar path tidak lepas ketika server mengalami restart atau boot ulang. Pada contoh ini saya mount ke folder /mnt di setiap node. Lakukan ini di setiap node.
echo 'localhost:/volume-1 /mnt glusterfs defaults,_netdev,backupvolfile-server=localhost 0 0' >> /etc/fstab mount.glusterfs localhost:[logical_volume_name] [local_path] chown -R root:docker /mnt
-
Check disk di setiap node. Output yang diharapkan adalah setiap node sudah berhasil menampilkan logical volume Gluster.
-
Simulasi membuat folder baru di node-1.
-
Ekspektasi output yang diharapkan adalah di node-2 dan node-3 secara otomatis akan terbentuk 1 folder baru dengan nama folder yang sama dengan yang telah dibuat di node-1.
-
Simulasi membuat docker stack yang menjalankan service container database MariaDB dan adminer untuk web interface DB dan dijalankan di node-2.
-
Simulasi membuat database dummy dan buat 1 table dummy.
-
Kemudian matikan stack service yang dijalankan di poin 14.
-
Simulasikan kembali menjalankan docker stack yang menjalankan servcie container database MariaDB dan adminer namun kali ini dijalankan di node-3.
-
Ekspektasi output yang diharapkan adalah ketika akses database, data yang sudah dibuat di node-2 sebelumnya, kali ini sudah terbentuk tanpa harus dibuat terlebih dahulu. Karena data sudah tersimpan di logical persistent volume Gluster.
Sekian informasi terkait konfigurasi persistent volume Docker Swarm menggunakan Gluster.
Semoga bermanfaat.
Tinggalkan Balasan