92 lines
2.9 KiB
YAML
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
|