问题描述
PHP应用再连接Azure Redis服务时,出现Connection Timed out。当通过升级提高Azure Redis的性能时候,发现之前的数据丢失了。
问题解答
当Redis服务出现Timeout的情况时,可以从Redis服务的指标(Metrics)开始查看,如果出现负载(Service Load)很高的情况,表明当前Redis服务的资源已经不能满足业务需求,需要提升服务端的等级。比如Redis定价层由 基础层 ------》 标准层 ------》**高级层 **。
当在升级的时候,为什么会发生数据丢失呢?
这是因为最开始使用的Redis服务为价格最便宜的基础层,即底层只有一个实例,升级的时候Redis中的数据都会丢失。
附录1:如果Service Load并不高的情况下,还是会发生Timeout问题,那么这样应该如何进一步分析问题呢?
可以应用主机上通过 tcpdump 或 netstat 协助分析网络情况。
- tcpdump 抓取网络日志并生成 redis.cap 输出文件
# tcpdump 抓取网络包 Linux 环境主机中
apt-get update
apt-get -y install tcpdump
#抓包命令为:
## non SSL 6379 tcpdump port 6379 -w redis.cap
## SSL 6380 tcpdump port 6380 -w redis.cap
-
通过netstat可以查看当前TCP连接的情况
参考资料
缩放 Azure Cache for Redis 实例: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-scale#how-does-scaling-work
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
分类: 【Azure Redis 缓存】