Masalah Saat Ingin Connect ke Replica Set dengan IP Public
Masalah ini diakibatkan config Replica Set dengan menggunakan private IP.
Tapi ada case tertentu yang mengharuskan, kita bisa mengkoneksikan Replica Set lewat public IP, misal lagi debug masalah, atau konek beda VPS cloud provider.
Kalau kamu ingin mengkoneksikan menggunakan domain (FQDN), jangan lupa point domain ke server dan beri nama host sesuai dengan domain yang diberikan
Solusi
Setup koneksi menggunakan hostname
Misal,
- Replica Set 1, dengan hostname “rs-1” dengan private IP 192.168.1.11 dan public IP 172.16.1.11
- Replica Set 2, hostname “rs-2” dengan private IP 192.168.1.12 dan public IP 172.16.1.12
- Replica Set 3, hostname “rs-3” dengan private IP 192.168.1.13 dan public IP 172.16.1.13
- Replica Set dengan nama “replica-dong”
Selanjutnya
- Tambahkan di file /etc/hosts masing-masing server
192.168.1.11 rs-1
192.168.1.12 rs-2
192.168.1.13 rs-3
- Re-config replica set, masuk ke primary dengan
mongosh
rs.reconfig({
_id: "replica-dong",
members: [
{_id: 0, host: "rs-3:27017", priority: 2}, // Internal IP for primary
{_id: 1, host: "rs-1:27017", priority: 1}, // Internal IP for secondary
{_id: 2, host: "rs-2:27017", priority: 1} // Internal IP for secondary
]
}, {force: true})
-
Cek kembali dengan
rs.status()
harusnya di bagian name sudah menjadiname: 'rs-1:27017'
, dst -
Agar bisa terkoneksi dengan Replica Set menggunakan public IP, update juga file
/etc/hosts
di laptop kamu
172.16.1.11 rs-1
172.16.1.12 rs-2
172.16.1.13 rs-3
- Untuk app kamu yang menggunakan docker-compose
services:
app:
image: my-app:latest
ports:
- "8080:80"
extra_hosts:
- "rs-1:192.168.1.11"
- "rs-2:192.168.1.12"
- "rs-3:192.168.1.13"
- Untuk file yaml Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: my-app:latest
hostAliases:
- ip: "192.168.1.11"
hostnames:
- "rs-1"
- ip: "192.168.1.12"
hostnames:
- "rs-2"
- ip: "192.168.1.13"
hostnames:
- "rs-3"