

Redis架构之哨兵机制与集群 - 伍点
source link: https://www.cnblogs.com/bfy0221/p/16593172.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Redis架构之哨兵机制与集群
1、介绍:
Sentinel(哨兵)是redis高可用性解决方案:由一个或多个由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。(简单来说就是哨兵机制会监视所有的服务器,当主服务器宕机时,会自动将主服务器下的某个从服务器变成新的主服务器,当原来的主服务器恢复后会变成从服务器。就像你部门的主管跑了,然后临时提拔你当主管,而且你干的不错,成为了新主管,原来的主管回来了,当了你的下属。)
2、哨兵架构原理

即使当主服务器宕机的时候会有从服务器来代替主服务器工作,但是还是不能解决单节点并发压力问题以及单节点内存和磁盘物理上限。因为工作的只有一台主服务器,如果数据量大的时候,比如一亿条,那么主服务器的压力就很大。那么我们就会想,既然一台不够,那就多搞几台,这样就会涉及到多台主服务器下数据来了传给谁的问题。由此引出集群架构,设置多台主服务器。
Redis集群
Redis在3.0后开始支持Cluster(模式)模式,目前redis的集群支持节点的自动发现,支持slave-master选举和容错,支持在线分片(sharding shard )等特性。
PING PONG协议(心跳机制):节点与节点之间通过心跳机制来维护和连接。也叫ping pong机制,就是我发给你一个ping,你需要给我一个pong来说明我们是连接的,如果没有回复我不能一直等吧,所以会设置一个超时过期时间,假设某个主服务器在这段时间内一直没有回应,视为出现了问题,将由哨兵机制来升级一个从服务器为主服务器。我们之前的ping www.baidu.com也是这种机制,不过内部更为复杂。
2、集群架构图
- 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
- 节点的fail是通过集群中超过半数的节点检测失效时才生效.(半数机制,后面hadoop也会说到 )
- 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
- redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

在前面我们说道,面对传输过来的数据该由哪个节点接收呢。在redis中提供了一个叫槽(Slot)的东西,这个槽覆盖了所有的master节点,每个redis集群中最多有16384个槽,并且将这些槽大致均分给每个主节点。当我们用户端发送一个请求set name bfy 是交给哪一个服务器呢。这时候就会用到CRC16算法,会对key做这个算法,并且返回一个值,这个值的范围就是槽的范围,这个值在哪个节点中就由哪个节点接收。
3、集群搭建
判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建redis集群时建议节点数最好为奇数,搭建集群至少需要三个主节点,三个从节点,至少需要6个节点。
-
准备环境安装ruby以及redis集群依赖
yum install -y ruby rubygems # https://rubygems.org/gems/redis/versions - gem install redis-xxx.gem
-
在一台机器创建七个目录
-
每个目录复制一份配置文件
[root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7000/ [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7001/ [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7002/ [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7003/ [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7004/ [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7005/ [root@master redis-cluster]# cp /usr/local/soft/redis-install/redis-7.0.0/redis.conf ./7006/
-
修改不同目录配置文件
- port 7000 ..... //修改端口 - # bind 127.0.0.1 -::1 //开启远程连接 - protected-mode no - daemonize yes //开启守护进程 - dbfilename dump-7000.rdb //每台机器的文件不能一样 - cluster-enabled yes //开启集群模式 - cluster-config-file nodes-7000.conf //集群节点配置文件 - cluster-node-timeout 5000 //集群节点超时时间 - appendonly yes //开启AOF持久化 - appendfilename "appendonly-7000.aof" //修改aof文件名 - appenddirname "appendonlydir-7000"
-
指定不同目录配置文件启动七个节点
[root@master redis-cluster]# redis-server 7000/redis.conf [root@master redis-cluster]# redis-server 7001/redis.conf [root@master redis-cluster]# redis-server 7002/redis.conf [root@master redis-cluster]# redis-server 7003/redis.conf [root@master redis-cluster]# redis-server 7004/redis.conf [root@master redis-cluster]# redis-server 7005/redis.conf [root@master redis-cluster]# redis-server 7006/redis.conf
-
ps aux|grep redis
-
redis7.0.0之后的命令: redis-cli --cluster create 192.168.137.150:7000 192.168.137.150:7001 192.168.137.150:7002 192.168.137.150:7003 192.168.137.150:7004 192.168.137.150:7005 --cluster-replicas 1
-
查看集群状态
# 1.查看集群状态 check [原始集群中任意节点] [无] redis-cli --cluster check 192.168.40.110:7000 # 2.集群节点状态说明 - 主节点 主节点存在hash slots,且主节点的hash slots 没有交叉 主节点不能删除 一个主节点可以有多个从节点 主节点宕机时多个副本之间自动选举主节点 - 从节点 从节点没有hash slots 从节点可以删除 从节点不负责数据的写,只负责数据的同步
使用集群(演示其中一个主节点宕机的状态,然后从节点接管)
此时7000的从节点7003变成了主节点
-
添加一个新节点
redis-cli --cluster add-node 192.168.137.150:7006 192.168.137.150:7001 --cluster-slave
Recommend
-
31
-
34
一、Redis集群简介 1、RedisCluster概念 Redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务宕机可以快速的切换到另外一个服务。redis cluster主要是针对...
-
33
echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!! 搭建Redis集群之前请准备好3台已经安装好Redi...
-
10
SentinelSentinel(哨兵)是Redis的高可用的一个解决方案。有一个或多个Sentinel实例组成的Sentinel系统。用来监视任意多个主服务器和从服务器。 使用Sentinel的时候,会启动Sentinel用来监视主服务器或者从服务器,应该在Sentinel配置文件中配...
-
8
redis哨兵集群,主从库切换 发表于 2021-04-27
-
8
Redis 6.X Sentinel 哨兵集群搭建 码哥带大家完成在 CentOS 7 中安装 Redis 6.x 教程。在学习 Redis 之前,我们需要先搭建一套哨兵环境。机器有限,实现目标是一台机器上搭建 6 个节点,构成一主两从三哨兵集群模式。 可直接...
-
5
Redis哨兵集群工作原理及架构部署 Table of Contents1.redis哨兵模式原理 redis主从复制的不足: 当主库宕机后,slave无法自己变成主库,进行数据的写入,每次都需要人为配置将从库变为主库才能进行数据写入,当主...
-
11
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。它有三个主要特点,使其优越于其它键值数据存储系统: Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。 与其它键值数据存储相比...
-
7
Redis主从同步是提升了可用性,从库挂了,还有多个从库可以使用。但是如果主库挂了,该怎么办呢? 这就要提到哨兵机制了。在Redis主从集群中,哨兵机制是实现主从库自动切换的关键机制,有效的解决了主从复制模式下故障转移的问题。
-
9
Hadoop集群搭建 三台虚拟机:master01,node1,node2 1.date命令查看三台虚拟机时间是否一致 2.不一致时间同步:ntpdate ntp.aliyun.com cp /usr/share/z...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK