一、Redis Sentinel 介绍
    1、Sentinel
     数据库环境搭建,从单机版到主备、再到多数据库集群,我们需要一个高可用的监控;比如Mysql中,我们可能会采用MHA来搭建我们的高可用数据库服务;

目前很多项目都用到了redis,比如我们采用1+2的模式,也就是一主两从;我们设置Redis主从复制,将主节点数据同步给从节点,从而达到:

1、主机异常宕机,从节点作为主节点顶上来,让服务正常运行,给运维留足时间;

2、采用读写分离,分担主节点的读压力;

那么Redis 怎么解决主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,并且让所有从节点去复制新的主节点,整个过程不需要人工干预的问题?

Redis官方给出了解决方案,就是使用Sentinel来动态监控redis节点,并组建高可用方案。

2、Redis Sentinel的高可用

Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当发现节点不可达时,会对节点做下线标识。

如果被标识的是主节点,他还会选择和其他Sentinel节点进行选举,当大多数的Sentinel节点都认为主节点不可达时,他们会重新选举出一个Sentinel节点来完成自动故障转移工作,同时将这个变化通知给Redis应用方。

整个过程完全自动,不需要人工介入,所以可以很好解决Redis的高可用问题。

3、Redis Sentinel 架构结构图

我们整体部署的拓扑结构如图所示:

1、现部署

分别有3个Sentinel节点,1个主节点,2个从节点组成一个Redis Sentinel集群。

Alias IP port
master 10.192.33.227 37701
slave1 10.192.33.228 37702
slave2 10.192.33.229 37702
Sentinel1 10.192.33.227 37801
Sentinel2 10.192.33.228 37801
Sentinel3 10.192.33.229 37801
二、使用Docker容器部署
    1、使用docker部署redis,master和slaver,由于我是在内网部署,所以采用的是离线部署;docker部署再次不多说,如果不懂,可先自行了解,并安装;

2、在redis-01-master中,创建docker-redis-master.sh文件,脚本如下:

docker run -d --network host --name redis-01-master \
-v /data/docker/redis/redis-01-master/data:/data \
redis:3.2.6-alpine --appendonly yes --port 37701
    3、在另外两台机器redis-02-slave下创建docker-redis-master.sh文件,脚本如下:

docker run -d --network host --name redis-02-slave \
-v /data/docker/redis/redis-02-slave/data:/data \
redis:3.2.6-alpine --appendonly yes \
--port 37702 --slave-read-only yes \
--slaveof 10.192.33.227 37701
    4、分别执行docker-redis-master.sh,之后使用sudo docker ps来查看镜像是否运行

5、搭建sentinel环境,在三台机器上分别建好目录

6、在每个目录中创建这里目录和文件

7、在conf中创建sentinel.conf文件,注意可写入权限

port 37801
dir "/var/redis/data"
logfile "/var/redis/data/logs/sentinel-01.log"

sentinel monitor master003 10.192.33.227 37901 2
sentinel down-after-milliseconds master003 30000
sentinel parallel-syncs master003 1
sentinel failover-timeout master003 180000
        port 是sentinel节点的端口
        dir是监控日志
        sentinel monitor是指当前监控主节点
        2代表判断主节点失败至少需要2个Sentinel节点节点同意
        master003 是主节点的别名
        如果超过30000毫秒且没有回复,则判定不可达

故障转移超时时间为180000毫秒

8、创建  docker-sentinel.sh执行文件,脚本如下:

docker run -d --network host --name redis-sentinel-01 \
-v /data/docker/redis/sentinel-01/data:/var/redis/data \
-v /data/docker/redis/sentinel-01/conf:/conf \
redis:3.2.6-alpine \
/conf/sentinel-01.conf --sentinel
    9、依次启动,启动完后,sentinel.conf会自动写入发现的从节点和sentinel的follow节点信息

例如:

port 37801
dir "/var/redis/data"
logfile "/var/redis/data/logs/sentinel-02.log"

sentinel myid 1a26337bb909bba4c9692db916e551b61764dd8c
sentinel monitor master003 10.199.33.229 37701 2
# Generated by CONFIG REWRITE
sentinel config-epoch master003 0
sentinel leader-epoch master003 0
//发现的两个从节点
sentinel known-slave master003 10.199.33.227 37702
sentinel known-slave master003 10.199.33.228 37702
//发现的两个Sentinel节点
sentinel known-sentinel master003 10.199.33.227 37801 7eab541796e47ca8eea9fb4fc646250debc4082a
sentinel known-sentinel master003 10.199.33.229 37801 81f4bac8d2c1f8bdda9caadca05ac1d7adfb89ca
sentinel current-epoch 0
    10、检测环境

进入sentinel容器,连接redis
redis-cli -p 37801
127.0.0.1:37801> sentinel masters
1) 1) "name"
2) "master003"
3) "ip"
4) "10.192.33.229"
5) "port"
6) "37701"
7) "runid"
8) "3a03b4ec2c90633edc013f8f2df088bfbc17151e"
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) "315"
19) "last-ping-reply"
20) "315"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "9456"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "85544506"
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 cluster搭建和redis中间件大家redis统一管理;

————————————————
版权声明:本文为CSDN博主「周创」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/OneZhous/article/details/80679352

Redis Sentinel 高可用部署实践集群的更多相关文章

  1. 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

    公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...

  2. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  3. [ Openstack ] Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  4. [ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  5. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  6. Redis|Sentinel 高可用架构

    一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...

  7. Redis Sentinel 高可用服务搭建

    阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...

  8. 【转载】Redis Sentinel 高可用服务架构搭建

    作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...

  9. Redis Sentinel 高可用实现说明

    背景:      前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...

随机推荐

  1. spark调优——Shuffle调优

    在Spark任务运行过程中,如果shuffle的map端处理的数据量比较大,但是map端缓冲的大小是固定的,可能会出现map端缓冲数据频繁spill溢写到磁盘文件中的情况,使得性能非常低下,通过调节m ...

  2. 关于springboot项目的jar和war两种打包方式部署的区别

    关于springboot项目的jar和war两种打包方式部署的区别 关于springboot项目的jar和war两种打包方式部署的区别? https://bbs.csdn.net/topics/392 ...

  3. swift是面向对象、面向协议、高阶类型、灵活扩展、函数式编程语言

    swift是面向对象.面向协议.高阶类型.灵活扩展.函数式编程语言

  4. day004-python运算符与基本数据类型

    一.运算符1.算术运算符:主要用于两个对象算数计算(加减乘除等运算)运算符: +:两个对象相加 -:得到负数或是一个数减去另一个数 *:两个数相乘或是返回一个被重复若干次的字符串 /:x除以y %:返 ...

  5. Python 鼠标键盘操作

    1.鼠标操作 from pymouse import PyMouse myMouse = PyMouse() #获取当前的鼠标位置 # nowP = myMouse.position() # prin ...

  6. Pandas模块 --- 字符与日期型数据的处理

    1,pd.to_datetime( 要转换的日期, format= ), 2,pd.to_datetime.today( ).year  ,pd.to_datetime.now( ).year 3,字 ...

  7. .net core 从 ActionFilterAttribute 获取Request.Body 的正确方式

    由于 ModelBinding在动作过滤器之前运行,直接使用 context.ActionArguments["parameter"]  获取模型对象 This article s ...

  8. A1016 | 磨人的大模拟

    这题写得头晕……明天我再评价 #include <stdio.h> #include <memory.h> #include <math.h> #include & ...

  9. 【AtCoder】 ARC 096

    link C-Half and Half 题意:三种pizza,可以花\(A\)价钱买一个A-pizza,花\(B\)价钱买一个B-pizza,花\(C*2\)价钱买A-pizza和B-pizza各一 ...

  10. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...