【Redis】07 基于Sential的Redis高可用(Docker)

1. 基本架构

Redis 的高可用,意味着当主节点发生故障时,能够自动完成故障转移。即将一个从节点晋升为主节点,同时修改应用方的主节点地址。而Redis Sential很好的解决了这个问题,其基本架构(一主二从三哨兵)如图所示:
兵
主要包括:

  • Redis 数据节点,负责数据的读写。
  • Redis Sential 节点。

Sentinel节点会对数据节点和其余Sentinel节点进行监控,若发现主节点主节点不可达,会与其他Sentinel节点进行协商,选举出一个Sentinel节点完成故障转移的工作。

2. 安装和部署

本文的安装环境为 Windows 版本 Docker。

2.1 部署 Redis 数据节点

2.1.1 基本结构

角色容器名称port别名
masterredis-master6379master
slaveredis-slave16380
slaveredis-slave26381

2.1.2 配置文件

  • redis-6379.conf

    redis-master的配置文件

    port 6379  
    daemonize yes
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    dir "/data"
    
    • port 端口号。
    • daemonize 设置为yes,Redis将会在后台一直运行。
    • logfile 日志文件名称。
    • dbfilename rdb持久化文件名称
    • dir 工作目录的的路径,则日志文件的路径为/data/6379.log
  • redis-6380.conf

    redis-slave1的配置文件

    port 6380
    daemonize yes
    logfile "6380.log"
    dbfilename "dump-6380.rdb"
    dir "/data"
    slaveof redis-master 6379
    
  • redis-6381.conf

    redis-slave2的配置文件

    port 6381  
    daemonize yes
    logfile "6381.log"
    dbfilename "dump-6381.rdb"
    dir "/data"
    slaveof redis-master 6379
    

2.1.3 Docker启动 命令

  1. 启动master节点
$ docker run -it --name redis-master  -v /d/010Code/015Redis/redis_HA/redis/redis-6379.conf:/redis/redis-6379.conf redis /bin/bash 
$ cd ../redis
$ redis-server redis-6379.conf
  1. 启动slave1节点

    $ docker run -it --name redis-slave1  -v /d/010Code/015Redis/redis_HA/redis/redis-6380.conf:/redis/redis-6380.conf --link redis-master:master redis /bin/bash
    $ cd ../redis
    $ redis-server redis-6380.conf
    
  2. 启动slave2节点

    $ docker run -it --name redis-slave2  -v /d/010Code/015Redis/redis_HA/redis/redis-6381.conf:/redis/redis-6381.conf --link redis-master:master redis /bin/bash
    $ cd ../redis
    $ redis-server redis-6381,conf
    
  3. 校验

    在 redis-master 容器中,运行 redis-cli,然后输入 info 查看当前节点的状况,若能看到有两个 slave 节点,则表示 Redis 数据节点 一主二从结构部署成功。

  4. 参数说明

  • –name 容器的名称
  • -v /d/010Code/015Redis/redis_HA/redis/redis-6379.conf:/redis/redis-6379.conf 将本机的配置文件挂载到容器中
  • –link redis-master:master 建立与master 节点之间的容器间的通信。redis-master 为master 节点的容器名称,master 为 redis-master 的别名。

2.2 部署 Redis Sentinel 节点

2.2.1 基本结构

角色容器名称port别名
redis-master-sentinelredis-master-sentinel126379master
redis-master-sentinel2redis-master-sentinel226380
redis-master-sentinel3redis-master-sentinel326381

2.2.2 配置文件

  • redis-26379.conf

    port 26379
    daemonize yes
    logfile "26379.log"
    dir "/data"
    sentinel monitor mymaster master-sentinel1 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    
    • port 端口号

    • daemonize 设置为yes,Redis Sentinel 将会在后台一直运行。

    • logfile 日志文件名称。

    • dir 工作目录的的路径,则日志文件的路径为/data/26379.log

    • sentinel monitor mymaster master-sentinel 6379 2 命令格式为:

      sentinel monitor

      • master-name 要监控的节点的别名
      • ip port 主节点的ip和端口号
      • quorum 选举过程中用到的变量,用于判定master节点最终不可达的票数
    • sentinel down-after-milliseconds mymaster 30000 判定节点不可达的参数

    • sentinel parallel-syncs mymaster 1 限制从节点向主节点发起复制连接数

    • sentinel failover-timeout mymaster 180000 故障转移的超时时间

  • redis-26380.comf

    port 26380
    daemonize yes
    logfile "26380.log"
    dir "/data"
    sentinel monitor mymaster master-sentinel2 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    
  • redis-26381.conf

    port 26381
    daemonize yes
    logfile "26381.log"
    dir "/data"
    sentinel monitor mymaster master-sentinel2 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    

2.2.3 Docker 启动命令

  1. 启动sentinel1节点
$  docker run -it --name redis-master-sentinel1  -v /d/010Code/015Redis/redis_HA/redis/redis-26379.conf:/redis/redis-26379.conf --link redis-master:master-sentinel1 redis /bin/bash
$ cd ../redis
$ redis-sentinel redis-26379.conf
  1. 启动sentinel2节点
$  docker run -it --name redis-master-sentinel2  -v /d/010Code/015Redis/redis_HA/redis/redis-26380.conf:/redis/redis-26380.conf --link redis-master:master-sentinel1 redis /bin/bash
$ cd ../redis
$ redis-sentinel redis-26380.conf
  1. 启动sentinel节点
$  docker run -it --name redis-master-sentinel3  -v /d/010Code/015Redis/redis_HA/redis/redis-26381.conf:/redis/redis-26381.conf --link redis-master:master-sentinel1 redis /bin/bash
$ cd ../redis
$ redis-sentinel redis-26381.conf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值