Docker redis 集群搭建

Redis 集群是一个供给在多个 Redis 节点间同享数据的法式集。

Redis 集群并不撑持处置多个 keys 的号令,因为这须要在差别的节点间挪动数据,从而达不到像 Redis 那样的机能,在高负载的情况下可以或许会致使不可预感的毛病.

Redis 集群经由过程分区来供给必然水平的可用性,在现实情况中当某个节点宕机或不可达的情况下持续处置号令。

Redis 集群的上风:

  • 主动朋分数据到差别的节点上。
  • 全部集群的局部节点失利或不可达的情况下可以或许持续处置号令。

Redis 集群不利用分歧性 hash, 而是引入了哈希槽的观点。Redis 集群有 16384 个哈希槽,每一个 key 经由过程 CRC16 校验后对 16384 取模来决议安排哪一个槽,集群的每一个节点担任一局部 hash 槽。

1、下载 redis.conf

下载地点://github.com/antirez/redis/blob/unstable/redis.conf

2、点窜 redis.conf

开启集群功效:

cluster-enabled yes

设置节点端口:

port 6391

节点超不时间,单元毫秒:

cluster-node-timeout 15000

集群外部设置装备摆设文件:

cluster-config-file "nodes-6379.conf"

3、编写 docker-compose.yml

节点计划图以下:

设置装备摆设以下:

version: "3.6"
services:
  redis-master1: 
     image: redis:5.0 # 根本镜像
     container_name: redis-master1 # 容器办事名
     working_dir: /config # 任务目次
     environment: # 情况变量
       - PORT=6391 # 跟 config/nodes-6391.conf 里的设置装备摆设一样的端口
     ports: # 映照端口,对外供给办事
       - "6391:6391" # redis 的办事端口
       - "16391:16391" # redis 集群监控端口
     stdin_open: true # 规范输出翻开
     networks: # docker 收集设置
        redis-master:
            ipv4_address: 172.50.0.2
     tty: true
     privileged: true # 具有容器内号令履行的权限
     volumes: "/c/project/docker/redis/config:/config" # 映照数据卷,设置装备摆设目次
     entrypoint: # 设置办事默许的启动法式
       - /bin/bash
       - redis.sh
  redis-master2:
       image: redis:5.0
       working_dir: /config
       container_name: redis-master2
       environment:
              - PORT=6392
       networks:
          redis-master:
             ipv4_address: 172.50.0.3
       ports:
         - "6392:6392"
         - "16392:16392"
       stdin_open: true
       tty: true
       privileged: true
       volumes: "/c/project/docker/redis/config:/config"
       entrypoint:
         - /bin/bash
         - redis.sh
  redis-master3:
       image: redis:5.0
       container_name: redis-master3
       working_dir: /config
       environment:
              - PORT=6393
       networks:
          redis-master:
            ipv4_address: 172.50.0.4
       ports:
         - "6393:6393"
         - "16393:16393"
       stdin_open: true
       tty: true
       privileged: true
       volumes: "/c/project/docker/redis/config:/config"
       entrypoint:
         - /bin/bash
         - redis.sh
  redis-slave1:
       image: redis:5.0
       container_name: redis-slave1
       working_dir: /config
       environment:
            - PORT=6394
       networks:
          redis-slave:
             ipv4_address: 172.30.0.2
       ports:
         - "6394:6394"
         - "16394:16394"
       stdin_open: true
       tty: true
       privileged: true
       volumes: "/c/project/docker/redis/config:/config"
       entrypoint:
         - /bin/bash
         - redis.sh
  redis-salve2:
       image: redis:5.0
       working_dir: /config
       container_name: redis-salve2
       environment:
             - PORT=6395
       ports:
         - "6395:6395"
         - "16395:16395"
       stdin_open: true
       networks:
          redis-slave:
              ipv4_address: 172.30.0.3
       tty: true
       privileged: true
       volumes: "/c/project/docker/redis/config:/config"
       entrypoint:
         - /bin/bash
         - redis.sh
  redis-salve3:
       image: redis:5.0
       container_name: redis-slave3
       working_dir: /config
       environment:
          - PORT=6396
       ports:
         - "6396:6396"
         - "16396:16396"
       stdin_open: true
       networks:
          redis-slave:
            ipv4_address: 172.30.0.4
       tty: true
       privileged: true
       volumes: "/c/project/docker/redis/config:/config"
       entrypoint:
         - /bin/bash
         - redis.sh
networks:
  redis-master:
     driver: bridge # 建立一个docker 的桥接收集
     ipam:
       driver: default
       config:
          -
           subnet: 172.50.0.0/16
  redis-slave:
       driver: bridge
       ipam:
         driver: default
         config:
            -
             subnet: 172.30.0.0/16

4、编写 redis 默许的启动剧本

建立文件 config/redis.sh,内容以下:

redis-server  /config/nodes-${PORT}.conf

5、启动集群

启动办事号令以下:

$ docker-compose up -d

检查办事运转:

$ docker ps

初始化集群(这一步起头号令须在 redis5.0 及以上版本运转)。

建立 3 主 3 从的 redis 集群:

$ redis-cli --cluster create 192.168.99.100:6391 192.168.99.100:6392 192.168.99.100:6393 192.168.99.100:6394 192.168.99.100:6395 192.168.99.100:6396 --cluster-replicas 1

输出 yes,确认要初始化:

检查初始化成果。

进入 redis-cli, 检查节点信息:

root@ae9e587e62f4:/data# redis-cli -h 192.168.99.100 -p 6391
192.168.99.100:6391> cluster nodes

上图显现,redis 集群合适预期。

6、测试集群

通俗形式毗连:因为 test 按照哈希槽计较,是散布在 6392 办事上。以是这里会提醒转到 6392。

root@ae9e587e62f4:/data# redis-cli -h 192.168.99.100 -p 6391

集群形式毗连:以下例子显现操纵一般。

root@ae9e587e62f4:/data# redis-cli -c -h 192.168.99.100 -p 6391 set test 1
root@ae9e587e62f4:/data# redis-cli -c -h 192.168.99.100 -p 6391 get test

集群形式毗连读写一般,集群搭建胜利。

本例触及到的文件下载:

快乐飞艇是犯法的吗:docker-redis