1 Star 2 Fork 0

杰克/docker-compose-redis-cluster

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
# 启动docker服务 https://docs.docker.com
systemctl start docker
# 查看docker服务状态
systemctl status docker

# 修改系统配置,避免重启后丢失修改
vi /etc/sysctl.conf
vm.overcommit_memory = 1

# 配置系统立即生效(临时)
sysctl vm.overcommit_memory=1

# 修改redisinsight目录的所有者,避免启动服务时没有权限
chown -R 1001 redisinsight

# 后台启动服务
docker-compose up -d

# 创建集群(六节点,一个集群,三个分片,没分片一个副本)
docker exec -it redis-1 redis-cli -p 7001 -a mypassword --cluster create redis1:6379 redis2:6379 redis3:6379 redis4:6379 redis5:6379 redis6:6379 --cluster-replicas 1 --cluster-yes

# 使用集群模式连接redis集群
docker exec -it redis-1 redis-cli -c -h redis-1 -p 6379 -a mypassword

# 查看集群详情
cluster nodes

# 查看docker compose项目日志
docker-compose logs -f -t --tail=20

Redis配置文件说明

port 6379 # 设置监听端口
bind 0.0.0.0 # 设置监听地址
protected-mode no # 关闭保护模式
# daemonize yes # 后台运行,容器中必须前台运行
cluster-enabled yes # 开启集群模式
cluster-config-file nodes.conf # 集群配置文件名称
cluster-node-timeout 5000 # 集群节点失联判定为故障的超时时间
appendonly yes # 开启AOF
aof-use-rdb-preamble yes # 开启混合持久化模式
appendfsync everysec # AOF每秒持久化一次
appendfilename "appendonly-cluster.aof" # AOF文件名称
auto-aof-rewrite-min-size 64mb # AOF重写最小大小
auto-aof-rewrite-percentage 100 # AOF重写的文件大小变更比例
requirepass "mypassword" # 对外服务提供的验证密码
masterauth "mypassword" # 节点间验证的密码
databases 1 # 指定逻辑数据库的多少(集群模式只能有一个逻辑库,还原的时候,这个值需要与备份的库保持一致,否则无法还原)
slowlog-log-slower-than 1000 # 执行时间超过该阈值的命令,即为慢查询
slowlog-max-len 1024 # 日志最多保存的条数,采取先进先出的淘汰策略

Nginx配置文件说明

user nobody; # Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限
worker_processes auto; # 工作进程数量,可配置成服务器内核数 * 2,这里配置自动;auto只与当前cpu物理核心数一致,通常用于低配服务器,一般不建议超过8;
worker_cpu_affinity 00000001 00000010 00000100 00001000; # 设置nginx工作线程的cpu亲和力,减少上下文切换,一般上限为8个,再增加性能不升反降
worker_priority 0; # 指定 worker 子进程的 nice 值,以调整运行 Nginx 的优先级,通常设定为负值,以优先调用 Nginx;120-10=110,110就是最终的优先级;Linux 默认进程的优先级值是120,值越小越优先; nice 值范围为 -20 到 +19 。应用的默认优先级值是120加上 nice 值等于它最终的值,这个值越小,优先级越高。
worker_rlimit_nofile 1024; # 指定worker子进程可以打开的最大文件句柄数,可以理解成每个worker子进程的最大连接数量。
# daemon off; # 指定 Nginx 的运行方式,前台还是后台,前台用于调试,后台用于生产;默认是on,后台运行模式;容器中需要使用前台模式;

events {
    use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    worker_connections 1024; # 每个子进程的最大连接数为1024
    accept_mutex on; # 是否打开负载均衡互斥锁,默认是off关闭的,这里推荐打开;设置网路连接序列化,防止惊群现象发生,默认为on;
    multi_accept on; # 设置一个进程是否同时接受多个网络连接,默认为off
}

stream { # 定义nginx四层工作模式(传输层,物链网传会表应) 
    upstream redis_cluster { # 配置上游组,并设置别名
        server redis1:6379; # 配置上游的所有服务节点,再次可以配置lb策略(例如:ip_hash、weight),失败策略,重试策略,上线、下线、备用;
        server redis2:6379;
        server redis3:6379;
        server redis4:6379;
        server redis5:6379;
        server redis6:6379;
    }

    server { # 定义服务
        listen 6379; # 定义服务监听端口
        proxy_pass redis_cluster; # 定义代理的上游目标 
        proxy_socket_keepalive on; # 与上游建立连接'成功'后,对tcp连接的'健康探活'
        proxy_timeout 3s; # https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_timeout
        proxy_connect_timeout 1s; # https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_connect_timeout
    }
}

Docker Compose配置文件说明

version: '3' # 版本,与安装的docker、docker compose的版本有关,一般安装最近的版本,使用3就好了;https://docs.docker.com/compose/compose-file/compose-versioning/

networks: # 定义网络
  redisclusternet: # 网络别名
    driver: bridge # 网络类型
    ipam: # ip地址管理
      config: # 网络配置
        - subnet: 10.0.0.0/16 # 定义子网

services: # 定义服务
  redis1: # 服务别名
    container_name: redis-1 # 容器名称
    image: redis:${REDIS_VER} # 镜像名称,镜像名称:镜像标签
    volumes: # 挂载数据局卷
      - ./configs/redis-1.conf:/etc/redis/redis.conf:rw # 挂载映射,容器外部文件或目录:容器内部文件或目录:访问方式,rw(读写),ro(只读)
      - ./data/node1:/data:rw
    command: # 启动命令
      - redis-server
      - /etc/redis/redis.conf
    networks: # 服务网络定义
      redisclusternet: # 通过网络别名指定需要加入的网络
        ipv4_address: 10.0.0.11 # 指定容器的ip地址
    logging: # 日志配置
      driver: "json-file" # 日志驱动
      options: # 日志选项
        max-size: "200m" # 日志单文件最大大小
        max-file: "3" # 最大日志文件数量

  redis2:
    container_name: redis-2
    image: redis:${REDIS_VER}
    volumes:
      - ./configs/redis-2.conf:/etc/redis/redis.conf:rw
      - ./data/node2:/data:rw
    command: 
      - redis-server
      - /etc/redis/redis.conf
    networks:
      redisclusternet:
        ipv4_address: 10.0.0.12
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "3"

  redis3:
    container_name: redis-3
    image: redis:${REDIS_VER}
    volumes:
      - ./configs/redis-3.conf:/etc/redis/redis.conf:rw
      - ./data/node3:/data:rw
    command: 
      - redis-server
      - /etc/redis/redis.conf
    networks:
      redisclusternet:
        ipv4_address: 10.0.0.13
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "3"
  
  redis4:
    container_name: redis-4
    image: redis:${REDIS_VER}
    volumes:
      - ./configs/redis-4.conf:/etc/redis/redis.conf:rw
      - ./data/node4:/data:rw
    command: 
      - redis-server
      - /etc/redis/redis.conf
    networks:
      redisclusternet:
        ipv4_address: 10.0.0.14
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "3"

  redis5:
    container_name: redis-5
    image: redis:${REDIS_VER}
    volumes:
      - ./configs/redis-5.conf:/etc/redis/redis.conf:rw
      - ./data/node5:/data:rw
    command: 
      - redis-server
      - /etc/redis/redis.conf
    networks:
      redisclusternet:
        ipv4_address: 10.0.0.15
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "3"

  redis6:
    container_name: redis-6
    image: redis:${REDIS_VER}
    volumes:
      - ./configs/redis-6.conf:/etc/redis/redis.conf:rw
      - ./data/node6:/data:rw
    command: 
      - redis-server
      - /etc/redis/redis.conf
    networks:
      redisclusternet:
        ipv4_address: 10.0.0.16
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "3"

  nginx_proxy:
    container_name: redis-nginx-proxy
    image: nginx:1.25.3-alpine
    ports: # 定义端口映射
      - 6379:6379 # 指定端口映射,宿主机端口:容器内部端口
    volumes:
      - ./configs/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on: # 指定依赖的服务,依赖的服务全部启动后,才会启动当前服务
      - redis1
      - redis2
      - redis3
      - redis4
      - redis5
      - redis6
    networks:
      redisclusternet:
        ipv4_address: 10.0.0.240
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "3"

  redisinsight:
    container_name: redisinsight
    image: redislabs/redisinsight:latest
    ports: 
      - 8001:8001
    volumes:
      - ./redisinsight:/db:rw
    depends_on:
      - nginx_proxy
    networks:
      redisclusternet:
        ipv4_address: 10.0.0.241
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
        max-file: "3"

空文件

简介

基于docker compose部署redis集群,三主三从 展开 收起
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jiekewang/docker-compose-redis-cluster.git
git@gitee.com:jiekewang/docker-compose-redis-cluster.git
jiekewang
docker-compose-redis-cluster
docker-compose-redis-cluster
master

搜索帮助