# ============================================================ # 红动未来 - 从机集群(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: Bjang09@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" command: - redis-server - --replicaof - 192.168.0.169 - "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