高并发核心技术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
目录
相关文章
|
3月前
|
存储 NoSQL Java
Redis助力高并发网站:在线用户统计不再是难题!
小米带你了解如何使用Redis高效统计网站的在线与并发用户数。通过维护用户的活跃时间,利用Redis有序集合(Sorted Set)特性,可实时更新在线用户列表并统计数量。具体实现包括记录用户上线时间、定期清理离线用户及统计特定时间窗口内的活跃用户数。这种方法适用于高并发场景,保证统计结果的实时性和准确性。跟着小米一起探索Redis的强大功能吧!
95 2
|
17天前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
3月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
134 0
|
19天前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
115 7
|
2月前
|
消息中间件 存储 负载均衡
高并发流量杀手锏:揭秘秒杀系统背后的削峰技术!
本文介绍了秒杀场景下的“削峰填谷”策略,通过消息队列缓冲用户请求,避免高并发对系统造成冲击。文中详细解释了消息队列的工作原理及如何通过预扣减库存和分布式锁确保数据一致性,同时还提出了合理的消息队列配置、高可用性及数据库负载均衡等最佳实践。通过这些技术手段,可有效提升系统的稳定性和用户体验。
126 8
高并发流量杀手锏:揭秘秒杀系统背后的削峰技术!
|
1月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
63 4
|
1月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
34 3
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
56 3
|
2月前
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。
|
3月前
|
缓存 监控 安全
揭秘高并发神话背后:打造坚不可摧的秒杀系统,技术大牛必修课!
【8月更文挑战第29天】在设计高并发、高可用的分布式秒杀系统时,需关注系统架构、数据库设计、缓存策略、并发控制、降级限流及安全防护。采用微服务架构并通过API网关和负载均衡器通信;数据库设计需考虑分库分表与读写分离;利用Redis缓存热点数据;采用限流算法和排队机制控制并发;实施IP限流和验证码验证保障安全。以下为简化代码示例,展示如何在秒杀服务中实现预扣减库存和订单创建逻辑。此外,还需进行性能测试与优化,并设置监控和日志记录机制,确保系统稳定可靠。
72 1

热门文章

最新文章

  • 1
    高并发场景下,到底先更新缓存还是先更新数据库?
    69
  • 2
    Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
    75
  • 3
    Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
    68
  • 4
    Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
    65
  • 5
    Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
    56
  • 6
    Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
    71
  • 7
    在Java中实现高并发的数据访问控制
    42
  • 8
    使用Java构建一个高并发的网络服务
    32
  • 9
    微服务06----Eureka注册中心,微服务的两大服务,订单服务和用户服务,订单服务需要远程调用我们的用,户服务,消费者,如果环境改变,硬编码问题就会随之产生,为了应对高并发,我们可能会部署成一个集
    37
  • 10
    如何设计一个秒杀系统,(高并发高可用分布式集群)
    132
  • 下一篇
    无影云桌面