高并发核心技术Redis系列(六)--------主从复制、集群(下)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 将服务器调整为一主多从(6379带6380、6381)

4.1 哨兵模式的使用

1. 将服务器调整为一主多从(6379带6380、6381)。

2345_image_file_copy_215.jpg

2. 在/usr/local/myredis文件夹下创建sentinel.conf文件(名字一定不能错)。

2345_image_file_copy_216.jpg

3. 配置哨兵,sentinel.conf添加内容

sentinel monitor myredis 127.0.0.1 6379 1

其中:myredis 为监控对象起的服务器名称(随意),1代表至少有1个哨兵投票同意迁移

如果Master存在密码,需要配置sentinel auth-pass 服务器名 密码

sentinel auth-pass myredis 123456

2345_image_file_copy_217.jpg

4. 启动哨兵,在/usr/local/bin/文件夹下执行./redis-sentinel /usr/local/myredis/sentinel.conf命

令。

2345_image_file_copy_218.jpg 5. 模拟Master宕机,哨兵会切换Master

  • 通过kill命令关闭Master(6379)

2345_image_file_copy_196.jpg

  • 等待一段时间,哨兵窗口就会输出信息

2345_image_file_copy_197.jpg

根据窗口信息可知,Master由6379转换为6381,进入6381客户端执行info replication

2345_image_file_copy_198.jpg

6. 重新启动6379服务器后,自动转换为Slave。

2345_image_file_copy_199.jpg

4.2 复制延迟

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,Slave机器数量的增加,会使延迟问题会更加严重。

六、Redis集群

1 Redis集群简介

1.1 Redis集群(RedisCluster)

RedisCluster实现了对Redis的水平扩容,即启动N个Redis节点,将整个数据库分布存储在这N个节点当中,每个节点存储总数据的1/N。

RedisCluster通过分区(partition)来提供一定程度的可用性(availability):即集群有一部分节点失效或者无法进行通讯,集群也可以继续处理命令。

Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接,用来交换彼此的信息。

2345_image_file_copy_201.jpg

为了使得集群在一部分节点宕机或者无法与集群的大多数节点进行通讯的情况下, 仍然可以正常运作,Redis 集群对节点使用了主从复制功能。

2 Redis集群搭建

1. 删除持久化数据,aof、dump。

2. 创建6个实例,即在/usr/local/myredis文件夹下分别创建6379、6380、6381、6389、6390、

6391的conf。

3. 在redis.conf中关闭appendonly。

4. 在不同的conf文件中,配置对应的内容

可以通过include /usr/local/myredis/redis.conf将公共基础配置直接引入文件。将include /usr/local/myredis/redis.conf统一添加到这三个文件中

在各个文件中,添加对应的pidfile、port、dbfilename、cluster-enabled(是否打开集群)、cluster-config-file(设定节点配置文件名)、cluster-node-timeout (设置节点失联时间,超过该时间(毫秒),集群自动进行主从切换)

如:

redis6379.conf中添加
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

2345_image_file_copy_202.jpg

将其他文件按照相同规则创建出来。

5. 启动该6个redis,并确保是否全部生成nodes-xxxx.conf文件。(启动之前务必保证redis服务支持远程连接)

2345_image_file_copy_203.jpg

2345_image_file_copy_204.jpg

6. 进入redis安装目录下的src文件夹

2345_image_file_copy_205.jpg

7. 在该文件夹下执行命令

redis-cli --cluster create --cluster-replicas 1 192.168.56.31:6379
192.168.56.31:6380 192.168.56.31:6381 192.168.56.31:6389 192.168.56.31:6390
192.168.56.31:6391

此处使用真实ip地址,-replicas 1代表采用最简单的方式配置集群,一台主机,一台从机。

replicas表示每个master需要有几个slave。

2345_image_file_copy_206.jpg

执行命令后,redis提供推荐的主从配置建议,执行同意。

2345_image_file_copy_207.jpg

集群创建成功。

8. 通过./redis-cli -c -p 6379可连接至集群(由于所有节点相通,任意端口号均可)

在redis客户端中执行cluster nodes查看节点状态。

3 Redis集群操作

3.1 Slot

一个 Redis 集群包含 16384 个哈希槽(hash slot),每个键都属于这 16384 个哈希槽的其中一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key的 CRC16 校验和 。

集群中的每个节点负责处理一部分哈希槽。 举个例子, 一个集群可以有三个节点, 其中:

节点 1 负责处理 0 号至 5500 号哈希槽。

节点 2 负责处理 5501 号至 11000 号哈希槽。

节点 3 负责处理 11001 号至 16384 号哈希槽。

2345_image_file_copy_209.jpg

3.2 命令执行

set k1 v1

2345_image_file_copy_210.jpg

根据k1计算出的槽值进行切换节点,并存入数据。

不在一个slot下的键值,是不能使用mget、mset等多建操作。

2345_image_file_copy_211.jpg

可以通过{}来定义组的概念,从而是key中{}内相同内容的键值对放到同一个slot中

mset k1{test} v1 k2{test} v2 k3{test} v3

2345_image_file_copy_212.jpg

3.3 故障恢复

1. 关闭6379服务器,进入redis-cli执行cluster nodes

2345_image_file_copy_213.jpg 

6379服务器fail,6390成为了新的master

2. 重新启动6379服务器,再次查看,6379成为了Slave

2345_image_file_copy_214.jpg

目录
相关文章
|
2月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
207 2
|
14天前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
3月前
|
缓存 关系型数据库 MySQL
在MySQL中处理高并发和负载峰值的关键技术与策略
采用上述策略和技术时,每个环节都要进行细致的规划和测试,确保数据库系统既能满足高并发的要求,又要保持足够的灵活性来应对各种突发的流量峰值。实施时,合理评估和测试改动对系统性能的影响,避免单一措施可能引起的连锁反应。持续的系统监控和分析将对维护系统稳定性和进行未来规划提供重要信息。
172 15
|
2月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
3月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
101 5
|
4月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1085 7
|
3月前
|
缓存 NoSQL Java
Java 项目实操高并发电商系统核心模块实现从基础到进阶的长尾技术要点详解 Java 项目实操
本项目实战实现高并发电商系统核心模块,涵盖商品、订单与库存服务。采用Spring Boot 3、Redis 7、RabbitMQ等最新技术栈,通过秒杀场景解决库存超卖、限流熔断及分布式事务难题。结合多级缓存优化查询性能,提升系统稳定性与吞吐能力,适用于Java微服务开发进阶学习。
116 0
|
5月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
376 3
|
23天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
监控 算法 Java
企业应用面临高并发等挑战,优化Java后台系统性能至关重要
随着互联网技术的发展,企业应用面临高并发等挑战,优化Java后台系统性能至关重要。本文提供三大技巧:1)优化JVM,如选用合适版本(如OpenJDK 11)、调整参数(如使用G1垃圾收集器)及监控性能;2)优化代码与算法,减少对象创建、合理使用集合及采用高效算法(如快速排序);3)数据库优化,包括索引、查询及分页策略改进,全面提升系统效能。
173 0