基于docker实现redis高可用集群


简介

  1. 基于docker和docker-compose
  2. 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫
  3. 每一个redis要匹配一个sentinel;多个sentinel之间要互相关联

搭建redis集群

  • 新建redis文件夹,在该文件夹下创建docker-compose.yml文件,输入如下内容

    version: '3.1'
    services:
            master:
                    image: redis
                    container_name: redis-master
                    ports:
                            - 6379:6379
            slave1:
                    image: redis
                    container_name: redis-slave-1
                    ports:
                            - 6380:6379
                    command: redis-server --slaveof redis-master 6379  #绑定主redis:redis是主redis的计算机名,6379为主redis的接口
            slave2:
                    image: redis
                    container_name: redis-slave-2
                    ports:
                            - 6381:6379
                    command: redis-server --slaveof redis-master 6379  #绑定主redis:red is是主redis的计算机名,6379为主redis的接口
  • 运行redis容器:在docker-compose.yml当前所在文件夹下,运行命令
    docker-compose up -d

搭建sentinel集群

  • 新建sentinel文件夹,在该文件夹下创建docker-compose.yml文件,输入如下内容

    version: '3.1'
    services:
            sentinel1:
                    image: redis
                    container_name: redis-sentinel-1
                    ports:
                            - 26379:26379
                    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
                    volumes:
                            - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
    
            sentinel2:
                    image: redis
                    container_name: redis-sentinel-2
                    ports:
                            - 26380:26379
                    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
                    volumes:
                            - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
    
            sentinel3:
                    image: redis
                    container_name: redis-sentinel-3
                    ports:
                            - 26381:26379
                    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
                    volumes:
                            - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
  • 创建三个数据卷配置文件(sentinel1.conf,sentinel2.conf,sentinel3.cong),分别为sentinel容器提供配置,为了方便,我这里将三个配置文件内容设置成一样

    port 26379
    dir "/tmp"
    # 自定义集群名,其中192.168.145.128为redis-master的ip,6379为redis-master的端口,
    # 2为最小投票数(因为有3台sentinel,所以可以设置为2)
    sentinel deny-scripts-reconfig yes
    sentinel monitor mymaster 192.168.145.128 6379 2
    sentinel down-after-milliseconds mymaster 300000
    sentinel config-epoch mymaster 0
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
  • 运行sentinel集群:与docker-compose同级目录下,运行如下命令

    docker-compose up -d

验证是否成功部署

  • 以交互的方式进入任意一个sentinel容器

    docker exec -it redis-sentinel-1 bash
  • 在进入的sentinel容器中,通过命令的方式进入redis客户端

     redis-cli -p 26379
  • 在客户端中查看此sentinel对应的redis信息
    sentinel master mymaster
  • 能看到如下结果,说明部署成功

    1) "name"
    2) "mymaster"
    3) "ip"
    4) "192.168.145.128"
    5) "port"
    6) "6379"
    7) "runid"
    8) "324f148cf69ef6d2a86cfa4bdfc4f6937974b7b8"
    9) "flags"
    10) "master"
    11) "link-pending-commands"
    12) "0"
    13) "link-refcount"
    14) "1"
    15) "last-ping-sent"
    16) "0"
    17) "last-ok-ping-reply"
    18) "561"
    19) "last-ping-reply"
    20) "561"
    21) "down-after-milliseconds"
    22) "300000"
    23) "info-refresh"
    24) "7109"
    25) "role-reported"
    26) "master"
    27) "role-reported-time"
    28) "4454165"
    29) "config-epoch"
    30) "0"
    31) "num-slaves"
    32) "2"
    33) "num-other-sentinels"
    34) "2"
    35) "quorum"
    36) "2"
    37) "failover-timeout"
    38) "180000"
    39) "parallel-syncs"
    40) "1"
01-25 20:06
查看更多