转载请注明出处哈:http://carlosfu.iteye.com/blog/2240426
一、问题:
1. 应用端使用了我们提供的一个redis-sentinel集群(1主,1从,3个sentinel)
2. 客户端设置了超时时间为200ms, 下面是应用端提供的超时日志。注意上图对象数只有265个。
2016-02-03 14:20:42,981 [DubboServerHandler-10.16.xx.xx:20880-thread-51] WARN com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=201 ms ................... 2016-02-03 14:20:40,168 [DubboServerHandler-10.16.xx.xx:20880-thread-9] WARN com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=200 ms 2016-02-03 09:56:14,174 [DubboServerHandler-10.16.xx.xx:20880-thread-146] WARN com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=200 ms ..................... 2016-02-03 12:32:03,575 [DubboServerHandler-10.16.xx.xx:20880-thread-125] WARN com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=200 ms
二、逐个排查:
1. Redis慢查询:并没有发现慢查询,跳过
2. Redis日志:对象数只有265个,注意从2016年1月25后就没日志了,所以并没有什么异常,也没什么RDB和AOF重写。跳过
3. 机器:tsar观察cpu,内存,网络,负载,本地IO
cpu、内存、负载、本地IO比较正常。
唯一以前怀疑的是网络,按理说这个流量也不是很大,但是看了一下机房的拓扑关系以及redis-cli的测试就了解原因了,下一节进行简单分析。
三、怀疑并确认:
1. 应用端与服务器网络:
2. redis-cli
redis-cli是个比较好的方法来测redis的延迟,为此我们用下面的api来测试,发现会出现200ms的情况。
具体原因猜测:机房之间的带宽有限,据说只有50M,这台机器本身流量就有点大而且是台虚机。
redis-cli --latency-history -h ip -p port
[@zw-34-55 ~]# redis-cli --latency-history -h 10.11.132.xx -p 6388 min: 0, max: 1, avg: 0.48 (1290 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.87 (1264 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.60 (1275 samples) -- 15.01 seconds range min: 0, max: 202, avg: 0.69 (1265 samples) -- 15.00 seconds range min: 0, max: 202, avg: 0.81 (1271 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.79 (1254 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.52 (1283 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.50 (1288 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.89 (1260 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.57 (1277 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.52 (1284 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.69 (1284 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.76 (1256 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.48 (1300 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.55 (1297 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.89 (1257 samples) -- 15.01 seconds range min: 0, max: 202, avg: 0.68 (1277 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.52 (1296 samples) -- 15.01 seconds range min: 0, max: 1, avg: 0.74 (1278 samples) -- 15.00 seconds range min: 0, max: 1, avg: 0.73 (1271 samples) -- 15.00 seconds rang
四、解决和观察:
1. 思路:写入端是后台管理系统,流量较小,读端流量较大,为此让master改为电信机房。
2. 解决方法:(1) 添加一个电信的slave (2) 下线老的联通slave (3) 主从做sentinel failover
3. 总结:查询超时的基本思路 + 分配机器要考虑流量的合理性。
五、参考文献:
相关推荐
Redis则是一种高性能的键值存储系统,常用于数据缓存、消息队列等场景。将Tomcat与Redis结合使用,可以提升Web应用的数据处理速度和响应效率。本文将深入探讨"tomcat-redis依赖jar包"的相关知识点。 1. **Redis连接...
Redis是一款高性能的键值对数据库,它以内存存储为主,数据持久化为辅,提供了丰富的数据类型,如字符串、哈希、列表、集合和有序集合等。在Java开发中,通常会通过Jedis库来与Redis进行交互。Jedis是Java语言的一个...
4. `Windows Service Documentation.docx`:这可能是一份文档,详细解释了如何在Windows上安装和管理Redis服务,包括配置和故障排查步骤。 5. `Redis on Windows Release Notes.docx`:这份文档应该包含了Redis在...
Redis 是一款广泛使用的开源键值存储系统,常用于构建高性能的分布式缓存和数据库解决方案。在实际应用中,Redis 可能会遇到多种异常场景,影响系统的稳定性和性能。以下是一些常见问题的分析和解决方案: 1. **...
"扩展log4net适用于redis"是一个将日志记录功能与Redis集成的过程,通过自定义log4net的appender并在C#中实现与Redis的交互,我们能够利用Redis的高性能特性进行日志存储和检索,为复杂系统的监控和故障排查提供有力...
总之,《Redis开发运维实践指南》是一份全面覆盖Redis使用、应用场景和最佳实践的详细文档,不仅适合初学者,对有经验的开发运维人员也有极大的参考价值。通过本文,读者可以学习到如何更有效地使用Redis,以及如何...
Redis是一款开源的、高性能的键值对存储系统,主要用于数据缓存、消息中间件和数据库。在Windows环境下,Redis提供了一套完整的安装和运行环境,让开发者能够在Windows操作系统上便捷地使用Redis服务。 1. Redis...
8. **一次性命令执行**:防止在异常情况下自动重试命令,避免数据不一致。 **使用Lettuce的准备工作:** 为了使用Lettuce,确保Redis版本至少为2.6,因为Lettuce与较新版本的RedisAPI兼容性更好。引入Lettuce库,...
Redis 是一个高性能的键值对数据存储系统,广泛应用于缓存、数据库以及消息中间件等场景。本资源为 "Redis-x64-5.0.10.zip",是适用于 Windows 64 位操作系统的 Redis 安装包。这个压缩文件包含了运行 Redis 在 ...
6. **错误处理与日志记录**:在集成Redis的过程中,可能出现连接失败、超时或数据不一致等问题,因此需要编写健壮的错误处理代码,并进行日志记录以便排查问题。 7. **性能优化**:分析和优化Redis与Hustoj之间的...
Redis是一款高性能的键值对数据库,常用于缓存和消息队列等场景。哨兵(Sentinel)系统是Redis提供的一种高可用性解决方案,能够监控、故障检测以及自动故障迁移,确保服务的稳定运行。 哨兵模式配置主要包括以下几个...
6. **错误处理与调试**:在开发过程中,可以利用 `Redis::connect()` 的第三个参数设置连接超时,通过 `Redis::getLastError()` 获取错误信息,进行问题排查。 综上所述,Redis 和 PHP Redis 扩展的结合,为 PHP ...
Redis是一种高性能的键值存储系统,常用于数据库、缓存和消息中间件。它支持丰富的数据类型,如字符串、哈希、列表、集合和有序集合。C++是通用的、面向对象的编程语言,拥有强大的性能和灵活性。在这个项目中,我们...
1. **连接配置**:工具允许设置Redis服务器的连接参数,包括主机名、端口号(默认6379)、密码(如果设置了AUTH)以及超时时间。对于分布式Redis环境,如哨兵(Sentinel)或集群(Cluster),客户端可能还支持多...
考虑到网络延迟,可以使用`pipeline()`或`transaction()`将多个命令一次性发送,以减少通信次数。另外,Redis的过期时间设置可以避免无效数据占用内存。 10. **监控与调试** 使用`info()`可以获取Redis服务器的...
10. **日志与错误处理**:配置Redis Sentinel的日志输出,以便在出现问题时进行排查。理解日志中的错误代码和消息可以帮助你快速定位并解决故障。 通过以上步骤,你可以在Windows环境下成功搭建和管理一个Redis ...
3. **EventLog.dll**:这是一个动态链接库,用于集成Windows事件日志系统,使得Redis可以在Windows事件查看器中记录错误和警告,方便系统管理和故障排查。 4. **redis-check-rdb.exe**:这是一个实用工具,用于检查...
标题 "springboot_sentinelredis" 暗示了这是一个关于如何在Spring Boot应用中整合Sentinel和Redis的实践教程。Sentinel是 Alibaba 提供的一款分布式服务治理框架,主要用于实现服务的流量控制、熔断和降级,而Redis...
同时,根据应用需求调整Redis的配置,如最大连接数、超时时间等,以达到最佳性能。 6. **监控与日志**:集成监控工具(如Prometheus和Grafana)来监控Redis的性能指标,并确保有合适的日志记录,以便于排查问题。 ...
首先,周期性connect timeout问题是Redis客户端在连接Redis服务时可能遇到的问题,通常表现为连接超时。美团在处理这类问题时,采用了对慢查询增加监控和使用脚本持续收集慢查询信息的策略。慢查询监控有助于及时...