Salah satu fitur utama Consul adalah support untuk Multi-Datacenter. Anda dapat membuat 2 atau lebih datacenter lalu dihubungkan dengan menambah hostname
server pada konfig retry_join_wan
.
Hal ini dapat memudahkan Anda untuk monitoring health dan service serta memberikan ketersediaan yang tinggi dibandingkan harus menghubungkan setiap node menggunakan peering lalu mengekspor servicenya ke Consul server.
Setup two datacenters #
Untuk simulasi akan mencoba buat 2 datacenter.
Buat file konfig untuk consul-server1 dengan nama server1.json
lalu edit 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"
}
}
Selanjutnya buat file konfig untuk consul-server2 dengan nama server2.json
{
"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"
}
}
Buat container consul
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
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
Jika menggunakan docker-compose
akan menjadi
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 #
Jika kedua container sudah running. Selanjutnya dapat Anda cek dengan perintah
docker exec consul-server1 consul members -wan
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>
Cek dengan WebUI 