高并发核心技术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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
49 5
|
3月前
|
移动开发 NoSQL 网络协议
Redis 管道技术
10月更文挑战第21天
29 3
|
3月前
|
缓存 监控 负载均衡
如何解决Redis热点Key问题?技术干货分享
【10月更文挑战第2天】在Redis的使用过程中,热点Key问题是一个常见的性能瓶颈。热点Key指的是那些被频繁访问的Key,它们可能导致Redis服务器的负载不均衡,进而影响整体性能。本文将深入探讨热点Key问题的成因、影响以及多种解决方案,帮助读者在实际工作中有效应对这一挑战。
147 3
|
4月前
|
消息中间件 存储 负载均衡
高并发流量杀手锏:揭秘秒杀系统背后的削峰技术!
本文介绍了秒杀场景下的“削峰填谷”策略,通过消息队列缓冲用户请求,避免高并发对系统造成冲击。文中详细解释了消息队列的工作原理及如何通过预扣减库存和分布式锁确保数据一致性,同时还提出了合理的消息队列配置、高可用性及数据库负载均衡等最佳实践。通过这些技术手段,可有效提升系统的稳定性和用户体验。
181 8
高并发流量杀手锏:揭秘秒杀系统背后的削峰技术!
|
3月前
|
JSON 缓存 NoSQL
Redis 在线查看序列化对象技术详解
Redis 在线查看序列化对象技术详解
53 2
|
4月前
|
存储 缓存 NoSQL
解决Redis缓存击穿问题的技术方法
解决Redis缓存击穿问题的技术方法
86 2
|
4月前
|
存储 NoSQL Redis
Redis 管道技术
【9月更文挑战第16天】Redis 管道技术通过批量发送命令并一次性读取响应,显著提升了与 Redis 服务器交互的性能。其工作原理包括命令缓冲、批量发送、响应接收与处理。管道技术减少了网络往返次数,提高了资源利用效率,并使代码更简洁。适用于批量操作、高并发环境及复杂业务逻辑等场景,是优化 Redis 应用性能的强大工具。
|
4月前
|
缓存 NoSQL PHP
使用PHP-redis实现键空间通知监听key失效事件的技术与代码示例
通过上述方法,你可以有效地在PHP中使用Redis来监听键空间通知,特别是针对键失效事件。这可以帮助你更好地管理缓存策略,及时响应键的变化。
108 3
|
4月前
|
存储 NoSQL Redis
10)Redis 的管道技术
10)Redis 的管道技术
68 0
|
4月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
下一篇
开通oss服务