Salah satu fitur utama Consul adalah dukungan untuk Multi-Datacenter. Anda dapat membuat dua atau lebih datacenter, lalu menghubungkannya dengan menambahkan hostname server pada konfigurasi retry_join_wan.
Fitur ini memudahkan Anda dalam melakukan monitoring health dan service, serta memberikan ketersediaan tinggi (high availability) tanpa perlu melakukan peering antar node secara manual dan mengekspor service ke server Consul.
Setup Dua Datacenter #
Pada simulasi ini, kita akan membuat dua datacenter.
Konfigurasi Consul Server 1 #
Buat file konfigurasi bernama server1.json, lalu isi seperti berikut:
{
"node_name": "consul-server1",
"datacenter": "dc1",
"primary_datacenter": "dc1",
"retry_join_wan": ["consul-server1", "consul-server2"],
"server": true,
"ui_config": {
"enabled": true
},
"data_dir": "/consul/data",
"addresses": {
"http": "0.0.0.0"
}
}
Konfigurasi Consul Server 2 #
Buat file konfigurasi bernama server2.json, lalu isi seperti berikut:
{
"node_name": "consul-server2",
"datacenter": "dc2",
"primary_datacenter": "dc1",
"retry_join_wan": ["consul-server1", "consul-server2"],
"server": true,
"ui_config": {
"enabled": true
},
"data_dir": "/consul/data",
"addresses": {
"http": "0.0.0.0"
}
}
Menjalankan Container Consul #
Menggunakan Docker CLI #
Consul Server 1:
docker run -dit --name consul-server1 --network consul \
-v ./server1.json:/consul/config/server1.json \
-p 8500:8500 -p 8600:8600/udp \
-e CONSUL_BIND_INTERFACE=eth0 \
consul agent -bootstrap-expect=1
Consul Server 2:
docker run -dit --name consul-server2 --network consul \
-v ./server2.json:/consul/config/server2.json \
-e CONSUL_BIND_INTERFACE=eth0 \
consul agent -bootstrap-expect=1
Menggunakan Docker Compose #
Jika Anda menggunakan docker-compose, konfigurasi akan menjadi seperti berikut:
version: '3.7'
services:
consul-server1:
image: hashicorp/consul:1.10.0
container_name: consul-server1
restart: always
volumes:
- ./server1.json:/consul/config/server1.json
networks:
- consul
ports:
- "8500:8500"
- "8600:8600/tcp"
- "8600:8600/udp"
command: "agent -bootstrap-expect=1"
consul-server2:
image: hashicorp/consul:1.10.0
container_name: consul-server2
restart: always
volumes:
- ./server2.json:/consul/config/server2.json
networks:
- consul
command: "agent -bootstrap-expect=1"
networks:
consul:
driver: bridge
Verify Datacenter Configuration #
Setelah kedua container berjalan, Anda dapat memverifikasi koneksi antar datacenter menggunakan perintah berikut:
docker exec consul-server1 consul members -wan
Contoh output yang menandakan bahwa kedua datacenter telah terhubung dengan benar:
Node Address Status Type Build Protocol DC Partition Segment
consul-server1.dc1 10.0.1.2:8302 alive server 1.15.2 2 dc1 default <all>
consul-server2.dc2 10.0.1.5:8302 alive server 1.15.2 2 dc2 default <all>
Output di atas menunjukkan bahwa:
- Kedua node alive
- Masing-masing berada dalam datacenter yang berbeda:
dc1dandc2 - Terhubung melalui WAN federation dengan status yang sehat
Verifikasi Melalui Web UI #
Anda juga dapat melakukan pengecekan melalui Consul Web UI.
Pada halaman UI, Anda akan melihat daftar datacenter (dc1 dan dc2) di sisi kiri, serta status node dan service di masing-masing datacenter.