Files
deploy/docker-compose-infra-slave.yml

92 lines
2.9 KiB
YAML

# ============================================================
# 红动未来 - 从机集群(Host2)
# 主从/集群配置:Redis 从库、PostgreSQL 从库、K3s Agent
# ============================================================
# 前置条件:Host1 已启动 deploy/docker-compose-infra-main.yml
# ============================================================
# 启动:docker compose -f deploy/docker-compose-infra-slave.yml up -d
# 停止:docker compose -f deploy/docker-compose-infra-slave.yml down
# ============================================================
name: redfuture-slave
# ---- 共享变量(部署前修改 Host1 IP) ----
x-vars: &vars
MASTER_IP: 192.168.0.169
PG_USER: postgres
PG_PASSWORD: Bjang09@686^*^
PG_PRIMARY_PORT: 15432
services:
# ---- PostgreSQL 从库 (Streaming Replication) ----
postgres-standby:
image: docker.m.daocloud.io/pgvector/pgvector:pg16
container_name: postgres-standby
restart: unless-stopped
ports:
- "15432:5432"
environment:
<<: *vars
POSTGRES_USER: postgres
POSTGRES_PASSWORD: Q!P@z#M$1@686^*^..
POSTGRES_DB: postgres
volumes:
- ../data/postgres-standby:/var/lib/postgresql/data
entrypoint: ["/bin/sh", "-c"]
command:
- |
set -e
PGDATA="/var/lib/postgresql/data"
if [ ! -s "$${PGDATA}/PG_VERSION" ]; then
echo "[standby] Data empty, running pg_basebackup from $${MASTER_IP}:$${PG_PRIMARY_PORT}..."
PGPASSWORD="$${PG_PASSWORD}" pg_basebackup \
-h "$${MASTER_IP}" -p "$${PG_PRIMARY_PORT}" \
-U $${PG_USER} -D "$${PGDATA}" -P -R \
-S replication_slot_slave --checkpoint=fast --wal-method=stream
touch "$${PGDATA}/standby.signal"
echo "[standby] Bootstrap complete."
fi
exec docker-entrypoint.sh \
postgres \
-c wal_level=replica \
-c hot_standby=on \
-c hot_standby_feedback=on \
-c "primary_conninfo=host=$${MASTER_IP} port=$${PG_PRIMARY_PORT} user=$${PG_USER} password=$${PG_PASSWORD} application_name=standby1"
networks:
- redfuture-slave-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
# ---- Redis 从库 (Replication) ----
redis-replica:
image: docker.m.daocloud.io/redis:7.4.8
container_name: redis-replica
restart: unless-stopped
ports:
- "6379:6379"
environment:
<<: *vars
entrypoint: ["/bin/sh", "-c"]
command:
- |
set -e
exec redis-server --replicaof "$${MASTER_IP}" 6379 \
--requirepass "Bjang09@686^*^" \
--masterauth "Bjang09@686^*^"
volumes:
- ../data/redis-replica:/data
networks:
- redfuture-slave-net
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
redfuture-slave-net:
driver: bridge