设为“星标”,和你一起掌握

Redis主从复制

主从库模式一个主节点多Slave从节点的模式,将一份数据保存在多Slave个实例中,增加副本冗余量,当某些出现宕机后,Redis服务还可以使用。

哨兵模式redis集群_redis哨兵模式_哨兵模式redis怎么启动

一主多从redis哨兵模式,从节点会不断的从主节点同步数据。主节点提供读写功能,从节点提供读功能。一般来说会让主节点用于写操作,从节点用来读操作,读写分离减少服务器压力。

但是从节点在同步数据的时候需要时间,可能就会造成数据不一致的情况redis哨兵模式,最好是读写都在主节点,从节点用来做热备了。

添加主节点 redis 的配置文件

# 关闭保护模式

protected-mode no



#设置redis端口

port 6379



#设置非守护进程启动不然跟 docker 的 -d 冲突

daemonize no



# 注释bing采用密码模式访问

#bind 127.0.0.1



#设置主节点的连接密码

masterauth 123456



#这个很重要!!!设置本redis的外网访问ip和端口

replica-announce-ip 外网ip

replica-announce-port 6379



#设置redis访问密码

requirepass 123456

添加从节点 redis 配置文件

# 关闭保护模式
protected-mode no

#设置redis端口
port 6380

#设置非守护进程启动不然跟 docker 的 -d 冲突
daemonize no

# 注释bing采用密码模式访问
#bind 127.0.0.1

#设置主节点的连接密码
masterauth 123456

#设置关联主节点
replicaof 主节点外网访问ip 6379

#这个很重要!!!设置本redis的外网访问ip和端口
replica-announce-ip 外网ip
replica-announce-port 6379

#设置redis访问密码
requirepass 123456

新建一主二从:

docker run --name redis-1 -p 6379:6379 -d -v /data/redis-1:/usr/local/redis redis redis-server /usr/local/redis/redis-1.conf

docker run --name redis-2 -p 6380:6380 -d -v /data/redis-2:/usr/local/redis redis redis-server /usr/local/redis/redis-2.conf

docker run --name redis-3 -p 6381:6381 -d -v /data/redis-3:/usr/local/redis redis redis-server /usr/local/redis/redis-3.conf

哨兵模式

哨兵其实是一个运行在特殊模式下的Redis进程。它有三个作用,分别是:监控、自动选主切换(简称选主)、通知。

哨兵进程在运行期间,监视所有的Redis主节点和从节点。它通过周期性给主从库发送PING命令,检测主从库是否挂了。如果从库没有在规定时间内响应哨兵的PING命令,哨兵就会把它标记为下线状态;如果主库没有在规定时间内响应哨兵的PING命令,哨兵则会判定主库下线,然后开始切换到选主任务。

所谓选主,其实就是从多个从库中,按照一定规则,选出一个当做主库。至于通知呢,就是选出主库后,哨兵把新主库的连接信息发给其他从库,让它们和新主库建立主从关系。同时,哨兵也会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。

但是这会存在数据不一致问题,那redis的副本集是如何数据一致性?

Redis为了保证数据副本的一致,主从库之间采用读写分离的方式:

redis哨兵模式_哨兵模式redis怎么启动_哨兵模式redis集群

哨兵模式基于主从模式,实现读写分离,它还可以自动切换,系统可用性更高。但是它每个节点存储的数据是一样的,浪费内存,并且不好在线扩容。因此,Reids 集群(切片集群的实现方案)应运而生,它在.0加入的,实现了Redis的分布式存储。对数据进行分片,也就是说每台Redis节点上存储不同的内容,来解决在线扩容的问题。并且,它可以保存大量数据,即分散数据到各个Redis实例,还提供复制和故障转移的功能。

使用去中心化的思想,整个集群是分布式的。所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

客户端与redis节点直连,不需要中间proxy层。客户端不需要连接集群所有节点,只要连接集群中任意一个可用节点即可。

哨兵模式redis怎么启动_哨兵模式redis集群_redis哨兵模式

Redis 集群数据分片(Redis data )不使用一致性哈希算法,而是采用哈希槽(hash slot)的方式。集群中内置了 16384 个哈希槽(编号0-16383),每个负责总数的一个子集,即[0-16384]个,且各个负责的哈希槽没有交集。当所有拥有的哈希槽的集合总数为16384时,该Redis 才能正常工作。

哨兵模式redis怎么启动_哨兵模式redis集群_redis哨兵模式

当要访问 Redis 集群中的一个 key 时,Redis 先对key使用CRC16 算法算出一个结果(0-32767),然后把结果对 16384 取模,这样就会对应到一个编号在 0-16383 之间的hash slot。如果算出来的hash slot落在当前节点本身,则直接处理返回数据。如果是在其他节点,则当前节点会返回负责这个hash slot的节点的IP和端口给客户端,以及-MOVED标识,由客户端向正确的节点再次发起请求。

当要存储一个 key-value 时,也是先计算 key 落在哪一个hash slot,过程与读key类似。

哨兵模式redis怎么启动_哨兵模式redis集群_redis哨兵模式

Redis主从复制实现原理步骤:

从服务器向主服务器发送SYNC命令

主服务器收到SYNC命令后,执行命令,在后台生成RDB文件,使用缓冲区记录从现在开始执行的所有的写命令。

当主服务器的命令执行完毕后,主服务器后将命令生成的RDB文件发送给从服务器,从服务器接收并载入这个RDB文件,将自己的数据库状态更新至主服务器执行命令时的数据库状态。

主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新至主服务器数据库当前所处的状态。

哨兵模式redis怎么启动_哨兵模式redis集群_redis哨兵模式

应用场景总结主从架构

主从架构是Redis中最基本的高可用方案,它将数据分布在一个主节点和多个从节点上。主节点负责写操作,从节点负责读操作,从而实现读写分离和负载均衡。主从架构适用于读多写少的场景,例如缓存、计数器、排行榜等应用。

哨兵架构

哨兵架构是主从架构的扩展,它引入了哨兵节点来监控主节点的状态,并在主节点宕机时自动切换到备用的从节点。哨兵架构可以提高系统的可用性和容错能力,适用于对可用性要求较高的应用。

集群架构

集群架构是Redis中最完备的分布式方案,它将数据分布在多个节点上,并通过一致性哈希算法实现数据的分片和负载均衡。集群架构可以实现数据的高可用和水平扩展,适用于数据量大、访问量高、对可靠性和性能要求高的应用。

综上所述,主从架构适用于读多写少的场景,哨兵架构适用于对可用性要求较高的场景,而集群架构适用于数据量大、访问量高、对可靠性和性能要求高的场景。在实际应用中,可以根据具体的业务需求和数据规模选择适合的架构方案

写在最后的话

大家看完有什么不懂的可以在下方留言讨论,也可以私信问我一般看到后我都会回复的。最后觉得文章对你有帮助的话记得点个赞哦,点点关注不迷路

@终端研发部

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注