基于docker-compose实现redis高可用集群(哨兵模式)

yls

2019-9-20


简介

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

搭建redis集群

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

    version: '3.7'
    services:
    master:
    image: redis
    container_name: redis-master
    restart: always
    command: redis-server /etc/redis/redis.conf --bind 0.0.0.0 --port 6382 --requirepass test@dbuser2018 --appendonly yes
    ports:
    - 6382:6382
    network_mode: "host"
    volumes:
    - ./data:/data
    - ./redis.conf:/etc/redis/redis.conf slave1:
    image: redis
    container_name: redis-slave-1
    restart: always
    command: redis-server /etc/redis/redis.conf --bind 0.0.0.0 --slaveof 39.97.234.52 6382 --port 6380 --requirepass test@dbuser2018 --masterauth test@dbuser2018 --appendonly yes
    ports:
    - 6380:6380
    network_mode: "host"
    volumes:
    - ./data:/data
    - .redis.conf:/etc/redis/redis.conf slave2:
    image: redis
    container_name: redis-slave-2
    restart: always
    #39.97.234.52设置成公网,当前容器ip就是公网ip
    #--bind 0.0.0.0表示任何ip都可以访问当前容器
    command: redis-server /etc/redis/redis.conf --bind 0.0.0.0 --slaveof 39.97.234.52 6382 --port 6381 --requirepass test@dbuser2018 --masterauth test@dbuser2018 --appendonly yes
    ports:
    - 6381:6381
    #与主机使用同一个ip
    network_mode: "host"
    volumes:
    - ./data:/data
    - ./redis.conf:/etc/redis/redis.conf
  • 运行redis容器:在docker-compose.yml当前所在文件夹下,运行命令

        docker-compose up -d
  • 可以使用如下命令查看日志
docker logs -f 容器ID

搭建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.conf),分别为sentinel容器提供配置,我这里将三个配置文件内容设置成一样

port 26379
dir /tmp
# 自定义集群名,其中 39.97.234.52 为 redis-master 的 ip,6382 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
sentinel monitor mymaster 39.97.234.52 6382 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster test@dbuser2018
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
  • 运行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"
  • 如下命令查看redis从节点是否正常

sentinel slaves mymaster
  • 显示如下说明正常
1) "name"
2) "39.97.234.52:6381"
3) "ip"
4) "39.97.234.52"
5) "port"
6) "6381"
7) "runid"
8) "4223d038a4899d77d17e15c8f7af446649c6ddad"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "111"
19) "last-ping-reply"
20) "111"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "2984"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "1145357"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "39.97.234.52"
35) "master-port"
36) "6382"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "164572"

基于docker实现redis高可用集群的更多相关文章

  1. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  2. 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_110 我们知道,Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3) ...

  3. sentinel监控redis高可用集群(一)

    一.首先配置redis的主从同步集群. 1.主库的配置文件不用修改,从库的配置文件只需增加一行,说明主库的IP端口.如果需要验证的,也要加多一行,认证密码. slaveof 192.168.20.26 ...

  4. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  5. Redis 高可用集群

    Redis 高可用集群 Redis 的集群主从模型是一种高可用的集群架构.本章主要内容有:高可用集群的搭建,Jedis连接集群,新增集群节点,删除集群节点,其他配置补充说明. 高可用集群搭建 集群(c ...

  6. heatbeat-gui实现基于nfs的mysql高可用集群

    一.简述HA高可用集群 高可用集群就是当集群中的一个节点发生各种软硬件及人为故障时,集群中的其他节点能够自动接管故障节点的资源并向外提供服务.以实现减少业务中断时间,为用户提供更可靠,更高效的服务. ...

  7. Redis系列(二):Redis高可用集群

    一.集群模式 Redis集群是一个由多个主从节点组成的高可用集群,它具有复制.高可用和分片等特性 二.集群部署 1.环境 3台主机分别是: 192.168.160.146 192.168.160.15 ...

  8. docker下rabbitMQ高可用集群部署

    第一步:docker 安装: mac 下安装命令: brew cask install docker 安装完之后查看版本 docker --version 第二步:开始集群搭建: 采用bijukunj ...

  9. Redis高可用集群方案——哨兵

    本篇文章版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,讲到了redis主从复制,读写分 ...

随机推荐

  1. 渗透测试-基于白名单执行payload--Odbcconf

    复现亮神课程 基于白名单执行payload--Odbcconf 0x01 Odbcconf简介: ODBCCONF.exe是一个命令行工具,允许配置ODBC驱动程序和数据源. 微软官方文档:https ...

  2. [模板]二维ST表

    考试yy二维ST表失败导致爆零. 其实和一维的ST表很像... 也是设$f[i][j][p][q]$为以$(i, j)$为左上角,长为$2^p$,宽为$2^q$的矩形的最大值. 算法流程是先把每一行都 ...

  3. OpenvSwitch系列之ovs-vsctl命令使用

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl 命令使用 OpenvSwit ...

  4. 『嗨威说』算法设计与分析 - 动态规划思想小结(HDU 4283 You Are the One)

    本文索引目录: 一.动态规划的基本思想 二.数字三角形.最大子段和(PTA)递归方程 三.一道区间动态规划题点拨升华动态规划思想 四.结对编程情况 一.动态规划的基本思想: 1.1 基本概念: 动态规 ...

  5. ESP8266开发之旅 网络篇⑭ web配网

    1. 前言     目前,市面上流行多种配网方式: WIFI模块的智能配网(SmartConfig以及微信AirKiss配网) SmartConfig 配网方式 请参考博主之前的博文 ESP8266开 ...

  6. Java多线程编程(五)定时器Timer

    一.定时器Timer的使用 在JDK库中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类确实TimerTask类,执行计 ...

  7. unity text实现鼠标光标

    由于项目需求,需要在text上实现鼠标的cursor,并且随着点击位置cursor移动.实现方法: 1)新建一个光标的prefab(简单为之,直接在image中添加一个竖线spirte),增加脚本控制 ...

  8. chrome安装json美化软件 JSONView

    安装效果如下: 安装步骤: 1.下载地址: github地址:https://github.com/gildas-lormeau/JSONView-for-Chrome 2.解压文件 3.打开谷歌浏览 ...

  9. Windows(Server)环境安装Web服务器(Apache,PHP,Mysql)图文教程

    Windows下Apache+PHP+MySQL搭建web服务器的方法,windows Server Install Apache PHP MySQL(图文详解) 环境准备: Windows Serv ...

  10. 【Java必修课】HashMap性能很好?问过我EnumMap没

    1 简介 我们知道Map只是一个接口,它有多种实现,Java中最常用的是HashMap了.而本文想讲述的是另一个实现:EnumMap.它是枚举类型的Map,要求它的Key值都必须是枚举型的. 2 创建 ...