Hi. Initially I created a Typesense cluster using docker compose with a leader and 2 followers. When one of the nodes goes down irrespective of it being a leader or follower, the cluster halts functioning. No new leaader node is elected. At times, one of the nodes is showing "Not ready" state.
Please find below my docker compose file.
version: "3.3"
services:
backend:
image: search-backend:latest
privileged: true
restart: always
env_file:
- .env
ports:
- "${BACKEND_PORT}:${BACKEND_PORT}"
environment:
- SERVER_NAME=${DOMAIN}
- SERVER_HOST=https://${DOMAIN}
build:
context: .
dockerfile: backend.dockerfile
networks:
- typesense_network_cluster
typesense1:
image: typesense/typesense:0.25.1
hostname: typesense1
privileged: true
restart: always
env_file:
- .env
entrypoint: sh -c "/opt/typesense-server --data-dir /data/typesense1 --api-key=${TYPESENSE_API_KEY} --enable-cors --listen-port 8108 --advertised-port 8108 --no-health-check --nodes /data/nodes --peering-subnet
192.168.224.0/24 --peering-port 8107 --api-port 8108 --cluster-name my-cluster"
ports:
- 7108:8108
volumes:
- typesense-data-1:/data/typesense1
- ./nodes:/data/nodes
networks:
- typesense_network_cluster
typesense2:
image: typesense/typesense:0.25.1
hostname: typesense2
privileged: true
restart: always
env_file:
- .env
entrypoint: sh -c "/opt/typesense-server --data-dir /data/typesense2 --api-key=${TYPESENSE_API_KEY} --enable-cors --listen-port 8108 --advertised-port 8108 --no-health-check --nodes /data/nodes --peering-subnet
192.168.224.0/24 --peering-port 8107 --api-port 8108 --cluster-name my-cluster"
ports:
- 9108:8108
volumes:
- typesense-data-2:/data/typesense2
- ./nodes:/data/nodes
networks:
- typesense_network_cluster
typesense3:
image: typesense/typesense:0.25.1
hostname: typesense3
privileged: true
restart: always
env_file:
- .env
entrypoint: sh -c "/opt/typesense-server --data-dir /data/typesense3 --api-key=${TYPESENSE_API_KEY} --enable-cors --listen-port 8108 --advertised-port 8108 --no-health-check --nodes /data/nodes --peering-subnet
192.168.224.0/24 --peering-port 8107 --api-port 8108 --cluster-name my-cluster"
ports:
- 10108:8108
volumes:
- typesense-data-3:/data/typesense3
- ./nodes:/data/nodes
networks:
- typesense_network_cluster
volumes:
typesense-data-1:
driver: local
typesense-data-2:
driver: local
typesense-data-3:
driver: local
networks:
typesense_network_cluster:
driver: bridge
ipam:
config:
- subnet: "
192.168.224.0/24"
Please find below my node configuration file.
typesense1
81078108,typesense2
81078108,typesense3
81078108
Function to create Typesense client.
function getTypesenseClient(module) {
try {
const nodes = [
{ host: "typesense1", port: 8108, protocol: "http" },
{ host: "typesense2", port: 8108, protocol: "http" },
{ host: "typesense3", port: 8108, protocol: "http" },
];
return new Typesense.Client({
nodes,
apiKey: config.typesense[module].apiKey,
connectionTimeoutSeconds: 30,
});
} catch (err) {
console.log("connection error", err);
throw err;
}
}