基于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. python selenium之Xpath定位

    属性描述 XPath 语法支持节点描述,节点描述为一个逻辑真假表达式,任何真假判断表达式都可在节点后方括号里表示,这条件必须在XPath处理这个节点前先被满足.在某一步骤可有多少个描述并没有限制. 对 ...

  2. Web安全之url跳转漏洞及bypass总结

    0x01 成因 对于URL跳转的实现一般会有几种实现方式: META标签内跳转 javascript跳转 header头跳转 通过以GET或者POST的方式接收将要跳转的URL,然后通过上面的几种方式 ...

  3. 渗透测试-基于白名单执行payload--Compiler

    复现亮神课程 0x01 Compiler前言 说明:Microsoft.Workflow.Comiler.exe是.NET Framework默认自带的一个实用工具,用户能够以XOML工作流文件的形式 ...

  4. libevent::bufferevent

    #include <cstdio> #include <netinet/in.h> #include <sys/socket.h> #include <fcn ...

  5. Tomcat 的单机多实例配置

    有时候需要在一个服务器上部署多个Tomcat,通过不同的端口进行区分,比如,反向代理.但是不想简单的通过复制Tomcat来实现,这样既不方便以后的升级也不方便管理,那么这时候就需要配置Tomcat的单 ...

  6. Service Mesh 初体验

    前言 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越来 ...

  7. C语言1博客作业03

    这个作业属于哪个课程 C语言程序设计1 这个作业要求在哪里 (https://edu.cnblogs.com) 我在这个课程的目标是 掌握函数运算 我在这个作业哪个具体方面帮助实现目标 编译一些基本生 ...

  8. 备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?

    作者 | 蚂蚁金服技术专家 沧漠 关注『阿里巴巴云原生』公众号,回复关键词"1024",可获取本文 PPT. 前言 Kubernetes 以其超前的设计理念和优秀的技术架构,在容器 ...

  9. Mutex vs Semaphore vs Monitor vs SemaphoreSlim

    C#开发者(面试者)都会遇到Mutex,Semaphore,Monitor,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 线程安全 教条式理解 如 ...

  10. python学习-while True语句

    while True是不会跳出循环的. 在while中括号里为一个条件值,只有当条件为真的时候,会执行这条语句,直到条件为false的时候,则会跳出该循环语句.而在这里括号里的值为true,也就意味着 ...