networks: openim: driver: bridge services: redis: image: "${REDIS_IMAGE}" container_name: redis ports: - "16379:6379" volumes: - "${DATA_DIR}/components/redis/data:/data" - "${DATA_DIR}/components/redis/config/redis.conf:/usr/local/redis/config/redis.conf" environment: TZ: Asia/Shanghai restart: always sysctls: net.core.somaxconn: 1024 command: redis-server /usr/local/redis/config/redis.conf --requirepass openIM123 --appendonly yes healthcheck: test: ["CMD", "redis-cli", "-a", "openIM123", "ping"] interval: 10s timeout: 3s retries: 3 start_period: 30s networks: - openim redis-slave-1: image: "${REDIS_IMAGE}" container_name: redis-slave-1 ports: - "16380:6379" volumes: - "${DATA_DIR}/components/redis/slave1:/data" environment: TZ: Asia/Shanghai REDIS_MASTER_HOST: redis REDIS_MASTER_PORT: 6379 REDIS_MASTER_PASSWORD: openIM123 REDIS_SLAVE_PASSWORD: openIM123 restart: always command: > bash -c ' echo "port 6379" > /data/redis-slave.conf && echo "replicaof $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT}" >> /data/redis-slave.conf && echo "masterauth $${REDIS_MASTER_PASSWORD}" >> /data/redis-slave.conf && echo "requirepass $${REDIS_SLAVE_PASSWORD}" >> /data/redis-slave.conf && echo "appendonly yes" >> /data/redis-slave.conf && echo "replica-read-only yes" >> /data/redis-slave.conf && redis-server /data/redis-slave.conf ' depends_on: - redis networks: - openim redis-slave-2: image: "${REDIS_IMAGE}" container_name: redis-slave-2 ports: - "16381:6379" volumes: - "${DATA_DIR}/components/redis/slave2:/data" environment: TZ: Asia/Shanghai REDIS_MASTER_HOST: redis REDIS_MASTER_PORT: 6379 REDIS_MASTER_PASSWORD: openIM123 REDIS_SLAVE_PASSWORD: openIM123 restart: always command: > bash -c ' echo "port 6379" > /data/redis-slave.conf && echo "replicaof $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT}" >> /data/redis-slave.conf && echo "masterauth $${REDIS_MASTER_PASSWORD}" >> /data/redis-slave.conf && echo "requirepass $${REDIS_SLAVE_PASSWORD}" >> /data/redis-slave.conf && echo "appendonly yes" >> /data/redis-slave.conf && echo "replica-read-only yes" >> /data/redis-slave.conf && redis-server /data/redis-slave.conf ' depends_on: - redis networks: - openim redis-sentinel-1: image: "${REDIS_IMAGE}" container_name: redis-sentinel-1 ports: - "26379:26379" volumes: - "${DATA_DIR}/components/redis/sentinel1:/data" environment: TZ: Asia/Shanghai SENTINEL_PORT: 26379 REDIS_MASTER_NAME: redis-master REDIS_MASTER_HOST: 127.0.0.1 REDIS_MASTER_PORT: 16379 REDIS_MASTER_PASSWORD: openIM123 SENTINEL_QUORUM: 2 SENTINEL_DOWN_AFTER: 30000 SENTINEL_PARALLEL_SYNCS: 1 SENTINEL_FAILOVER_TIMEOUT: 180000 restart: always command: > bash -c ' echo "port $${SENTINEL_PORT}" > /data/sentinel.conf && echo "sentinel monitor $${REDIS_MASTER_NAME} $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT} $${SENTINEL_QUORUM}" >> /data/sentinel.conf && echo "sentinel auth-pass $${REDIS_MASTER_NAME} $${REDIS_MASTER_PASSWORD}" >> /data/sentinel.conf && echo "sentinel down-after-milliseconds $${REDIS_MASTER_NAME} $${SENTINEL_DOWN_AFTER}" >> /data/sentinel.conf && echo "sentinel parallel-syncs $${REDIS_MASTER_NAME} $${SENTINEL_PARALLEL_SYNCS}" >> /data/sentinel.conf && echo "sentinel failover-timeout $${REDIS_MASTER_NAME} $${SENTINEL_FAILOVER_TIMEOUT}" >> /data/sentinel.conf && echo "sentinel resolve-hostnames yes" >> /data/sentinel.conf && echo "sentinel announce-hostnames yes" >> /data/sentinel.conf && redis-sentinel /data/sentinel.conf ' depends_on: redis: condition: service_healthy redis-slave-1: condition: service_started redis-slave-2: condition: service_started networks: - openim redis-sentinel-2: image: "${REDIS_IMAGE}" container_name: redis-sentinel-2 ports: - "26380:26379" volumes: - "${DATA_DIR}/components/redis/sentinel2:/data" environment: TZ: Asia/Shanghai SENTINEL_PORT: 26379 REDIS_MASTER_NAME: redis-master REDIS_MASTER_HOST: 127.0.0.1 REDIS_MASTER_PORT: 16379 REDIS_MASTER_PASSWORD: openIM123 SENTINEL_QUORUM: 2 SENTINEL_DOWN_AFTER: 30000 SENTINEL_PARALLEL_SYNCS: 1 SENTINEL_FAILOVER_TIMEOUT: 180000 restart: always command: > bash -c ' echo "port $${SENTINEL_PORT}" > /data/sentinel.conf && echo "sentinel monitor $${REDIS_MASTER_NAME} $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT} $${SENTINEL_QUORUM}" >> /data/sentinel.conf && echo "sentinel auth-pass $${REDIS_MASTER_NAME} $${REDIS_MASTER_PASSWORD}" >> /data/sentinel.conf && echo "sentinel down-after-milliseconds $${REDIS_MASTER_NAME} $${SENTINEL_DOWN_AFTER}" >> /data/sentinel.conf && echo "sentinel parallel-syncs $${REDIS_MASTER_NAME} $${SENTINEL_PARALLEL_SYNCS}" >> /data/sentinel.conf && echo "sentinel failover-timeout $${REDIS_MASTER_NAME} $${SENTINEL_FAILOVER_TIMEOUT}" >> /data/sentinel.conf && echo "sentinel resolve-hostnames yes" >> /data/sentinel.conf && echo "sentinel announce-hostnames yes" >> /data/sentinel.conf && redis-sentinel /data/sentinel.conf ' depends_on: redis: condition: service_healthy redis-slave-1: condition: service_started redis-slave-2: condition: service_started networks: - openim redis-sentinel-3: image: "${REDIS_IMAGE}" container_name: redis-sentinel-3 ports: - "26381:26379" volumes: - "${DATA_DIR}/components/redis/sentinel3:/data" environment: TZ: Asia/Shanghai SENTINEL_PORT: 26379 REDIS_MASTER_NAME: redis-master REDIS_MASTER_HOST: 127.0.0.1 REDIS_MASTER_PORT: 16379 REDIS_MASTER_PASSWORD: openIM123 SENTINEL_QUORUM: 2 SENTINEL_DOWN_AFTER: 30000 SENTINEL_PARALLEL_SYNCS: 1 SENTINEL_FAILOVER_TIMEOUT: 180000 restart: always command: > bash -c ' echo "port $${SENTINEL_PORT}" > /data/sentinel.conf && echo "sentinel monitor $${REDIS_MASTER_NAME} $${REDIS_MASTER_HOST} $${REDIS_MASTER_PORT} $${SENTINEL_QUORUM}" >> /data/sentinel.conf && echo "sentinel auth-pass $${REDIS_MASTER_NAME} $${REDIS_MASTER_PASSWORD}" >> /data/sentinel.conf && echo "sentinel down-after-milliseconds $${REDIS_MASTER_NAME} $${SENTINEL_DOWN_AFTER}" >> /data/sentinel.conf && echo "sentinel parallel-syncs $${REDIS_MASTER_NAME} $${SENTINEL_PARALLEL_SYNCS}" >> /data/sentinel.conf && echo "sentinel failover-timeout $${REDIS_MASTER_NAME} $${SENTINEL_FAILOVER_TIMEOUT}" >> /data/sentinel.conf && echo "sentinel resolve-hostnames yes" >> /data/sentinel.conf && echo "sentinel announce-hostnames yes" >> /data/sentinel.conf && redis-sentinel /data/sentinel.conf ' depends_on: redis: condition: service_healthy redis-slave-1: condition: service_started redis-slave-2: condition: service_started networks: - openim