Redis 主从复制机制(集群)与 哨兵机制

1,什么是redis 主从复制

支持多个数据库之间的数据同步。只能一个主数据库(master),可以一个或者多个从数据库(slave)

主数据库,可以读写

从数据库,只可以读

当主数据库,做写的操作的时候,写完,redis会从给数据库发送信号,并将数据信息发送给从数据库,从数据库备份。

过程:
1:当一个从数据库启动时,会向主数据库发送sync命令,
2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来
3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。
4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。

2,当主数据据宕机了,怎么办?

主数据库,宕机之后,会在从数据库中从数据库(slave)中推举一个数据库,作为master 数据库

3,如何知道主数据库宕机?

哨兵机制:

Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
·        监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
·        提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
·        自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。
哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master.
每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的”主观认为宕机” Subjective Down,简称sdown).
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置.
虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel).
哨兵(sentinel) 的一些设计思路和zookeeper非常类似

4,单个哨兵和主从复制的架构图

5,配置主从复制

192.168.178.110  (master)

192.168.178.112(slave)

192.168.178.115  (slave)

三台电脑正常安装配置redis 之后,slave 需要如下配置

vi /usr/local/redis/etc/redis.conf

slaveof 192.168.178.110 6379  

masterauth 123456--- 主redis服务器配置了密码,则需要配置
两台都是这样配置

配置完成之后,主redis

set name ‘chris‘

两台从redis get name 可以获得值,且没有写入的权力

6,配置哨兵

192.168.178.110  (master)

192.168.178.112(slave)

192.168.178.115  (slave)

192.168.178.115  (sentinel) 哨兵

在哨兵的redis 服务器配置如下:

1.拷贝到etc目录
cp sentinel.conf  /usr/local/redis/etc
2.修改sentinel.conf配置文件
sentinel monitor mymast  192.168.110.133 6379 1  #主节点 名称 IP 端口号 选举次数
sentinel auth-pass mymaster 123456
3. 修改心跳检测 30毫秒
sentinel down-after-milliseconds mymaster 30
4.sentinel parallel-syncs mymaster 2 --- 做多多少合格节点
5. 启动哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &

启动哨兵之前,先将主redis,从redis 依次启动;

哨兵的日志如下:可以看出主从关系

10687:X 02 Aug 22:51:03.405 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
10687:X 02 Aug 22:51:03.407 # Sentinel ID is 37ac433a3cdc235ae1326987feb3f13909612f84
10687:X 02 Aug 22:51:03.407 # +monitor master mymaster 192.168.178.110 6379 quorum 1
10687:X 02 Aug 22:51:03.409 * +slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.413 * +slave slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.463 # +sdown slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.463 # +sdown slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:51:03.521 # -sdown slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379

在master 或者 slave 的服务器上打印info 也可以看出主从关系

7 测试

将192.168.178.110 shutdown

# Keyspace
127.0.0.1:6379> SHUTDOWN
not connected> 

哨兵已经选出新的master redis

10687:X 02 Aug 22:54:36.822 # +sdown master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.822 # +odown master mymaster 192.168.178.110 6379 #quorum 1/1
10687:X 02 Aug 22:54:36.822 # +new-epoch 1
10687:X 02 Aug 22:54:36.822 # +try-failover master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.825 # +vote-for-leader 37ac433a3cdc235ae1326987feb3f13909612f84 1
10687:X 02 Aug 22:54:36.825 # +elected-leader master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.825 # +failover-state-select-slave master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.926 # +selected-slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.926 * +failover-state-send-slaveof-noone slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:36.985 * +failover-state-wait-promotion slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.879 # +promoted-slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.879 # +failover-state-reconf-slaves master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.932 # +failover-end master mymaster 192.168.178.110 6379
10687:X 02 Aug 22:54:37.932 # +switch-master mymaster 192.168.178.110 6379 192.168.178.112 6379
10687:X 02 Aug 22:54:37.932 * +slave slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.932 * +slave slave 192.168.178.110:6379 192.168.178.110 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.990 # +sdown master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.990 # +odown master mymaster 192.168.178.112 6379 #quorum 1/1
10687:X 02 Aug 22:54:37.990 # +new-epoch 2
10687:X 02 Aug 22:54:37.990 # +try-failover master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.993 # +vote-for-leader 37ac433a3cdc235ae1326987feb3f13909612f84 2
10687:X 02 Aug 22:54:37.993 # +elected-leader master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.993 # +failover-state-select-slave master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.993 # +sdown slave 192.168.178.110:6379 192.168.178.110 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:37.994 # +sdown slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:38.095 # -failover-abort-no-good-slave master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:38.172 # Next failover delay: I will not start a failover before Fri Aug  2 23:00:38 2019
10687:X 02 Aug 22:54:38.900 # -sdown master mymaster 192.168.178.112 6379
10687:X 02 Aug 22:54:38.900 # -odown master mymaster 192.168.178.112 6379

两次推选,192.168.178.112 被选为master

再次看192,168.178.112 的info 为master

原文地址:https://www.cnblogs.com/pickKnow/p/11291646.html

时间: 2024-10-12 19:22:20

Redis 主从复制机制(集群)与 哨兵机制的相关文章

Redis三种集群模式-哨兵机制

Redis哨兵机制,一主二从 注:Redis哨兵切换,建议一主多从 一.一主二从 教程步骤:https://www.cnblogs.com/pinghengxing/p/11139997.html 二.哨兵配置(sentinel.conf) 哨兵机制也分单台以及集群,在此我们只构建哨兵集群      cd /usr/software/redis/redis-ms/ 1.创建哨兵目录 /usr/software/redis/redis-ms/sentinel/26001 /usr/software

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

参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https://blog.csdn.net/qq_28804275/article/details/80938659 下载redis镜像(不带tag标签则表示下载latest版本) docker pull redis 从github 下载最新的redis.conf,注意重要参数 # 端口 port 6379 #

Redis主从复制和集群配置

redis主从复制 概述 1.redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库. 2.通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力.主数据库主要进行写操作,而从数据库负责读操作. 主从复制过程 主从复制过程:见下图

redis 安装 集群 主从 哨兵 docker

安装redis 官方文档 docker run -d --net host -v /opt/myconfig/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis redis redis-server /usr/local/etc/redis/redis.conf 用集群 网络用 --net host 主机模式 用主机模式就不用指定端口映射 . 否则会报错 WARNING: Published ports are discar

Redis中sentinel集群的搭建和Jedis测试 图文教程[三]

在前两篇Redis中sentinel集群的搭建和Jedis测试 图文教程[一] 和Redis中sentinel集群的搭建和Jedis测试 图文教程[二] 中分别简述了Redis中sentinel集群的搭建和Java代码的Jedis测试. 这篇主要来简单分析一下Redis-sentinel集群的原理,根据追踪sentinel信息来完成Redis-sentinel集群测试中的详细的原理分析.包括master-slave各个中的sentinel信息的分析,failover过程,master宕机后的le

Redis高可用集群

Redis 高可用集群 Redis 的集群主从模型是一种高可用的集群架构.本章主要内容有:高可用集群的搭建,Jedis连接集群,新增集群节点,删除集群节点,其他配置补充说明. 高可用集群搭建 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术. Redis 3.0 之后便支持集群.Redis 集群中内置了 16384 个哈希槽.Redis 会根据节点数量大致均等的将哈希槽映射到不同

12.【Redis系列】集群方案1- Sentinel

原文:12.[Redis系列]集群方案1- Sentinel 目前我们讲的 Redis 还只是主从方案,最终一致性.读者们可思考过,如果主节点凌晨 3 点突发宕机怎么办?就坐等运维从床上爬起来,然后手工进行从主切换,再通知所有的程序把地址统统改一遍重新上线么?毫无疑问,这样的人工运维效率太低,事故发生时估计得至少 1 个小时才能缓过来.如果是一个大型公司,这样的事故足以上新闻了. 所以我们必须有一个高可用方案来抵抗节点故障,当故障发生时可以自动进行从主切换,程序可以不用重启,运维可以继续睡大觉,

redis之redis-cluster(集群)(七)

redis的主流高可用集群模式为redis-cluster.从redis3.0+版本后开始支持,自带集群管理工具redis-trib.rb. 安装redis 参考:https://www.cnblogs.com/cwp-bg/p/8094914.html 安装ruby支持 redis-trib.rb工具需要ruby环境的支持. apt -y install ruby # 安装ruby gem install redis # 加入redis 启用redis-cluster集群模式 修改redis.

超详细的 Redis Cluster 官方集群搭建指南

今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 安装ruby环境 因为官方提供的创建集群的工具是用ruby写的,需要ruby2.2.2+版本支持,ruby安装需要指定openssl. 安装openssl $ wget https://www.openssl.org/source/openssl-1.0.2m.tar.gz $ tar -zxvf openssl-1.0.2m.tar.gz $ cd openssl-1.0.2m $ ./config

redis 5.0 集群搭建

今天主要分享一下 redis 3主3从 集群的搭建过程.redis经常用来做缓存,可以提升读取数据的速度,数据都是存在内存中的,采用 RDB 或者 AOF 持久化存储后便可以实时落地到硬盘.本次主要是3主3从.架构原理如下: 题图:来自于网络 图片中的每一个圆圈都代表一台服务器.客户端访问任何一台服务器便可以连通任何服务器.当老的主节点也就是 master 节点挂掉时,会进行重新选举,当半数以上的 master 节点投票出现失败状态时(也就是和该故障matser连不通),就会认为该 master