MyySophia
工作只是你的权利,而只有你的行为才能为你赢得尊重
展开
-
探索Redis Maxmeory-policy 和过期键的关系
一、测试目的确认到达maxmeory 是否会触发maxmemory-policy清除expire key? 到达maxmeory时没有需要expire的key时,redis是否可用?二、步骤及结论将maxmeory参数调整为100MB. 设定maxmemory-policy为volatile-lru 准备测试环境仅保留一直程序程序写入与读取。 Maxmemory 重启生效准备脚本持续写入history key, 同时收集info keyspave&& info ..原创 2020-07-08 18:16:30 · 410 阅读 · 0 评论 -
redis主从同步参数repl_backlog_size测算
一、背景在不影响正常业务的情况下redis主从同步时总会出现timeout,部分同步失败的情况。需要评估一下repl-backlog-size的大小,来避免复制时出现异常二、步骤1、获取数据借助redis-cli 、info replication..收集master_repl_offset每一分钟前后的数据,其中使用了sed 和awk命令对数据进行处理,为后期分析提供便利。脚本如下#!/bin/bash# @date: 2020-07-02# @author: ninesun原创 2020-07-04 17:06:23 · 4227 阅读 · 3 评论 -
基于 Zookeeper 的锁安全吗?
你应该也看到了,Zookeeper 不像 Redis 那样,需要考虑锁的过期时间问题,它是采用了「临时节点」,保证客户端 1 拿到锁后,只要连接不断,就可以一直持有锁。如果你的业务数据非常敏感,在使用分布式锁时,一定要注意这个问题,不能假设分布式锁 100% 安全。思考一下,客户端 1 创建临时节点后,Zookeeper 是如何保证让这个客户端一直持有锁呢?而且,如果客户端 1 异常崩溃了,那么这个临时节点会自动删除,保证了锁一定会被释放。假设客户端 1 先到达,则加锁成功,客户端 2 加锁失败。原创 2022-10-08 15:54:35 · 645 阅读 · 0 评论 -
redis分布式锁自动续约问题以及Redisson的使用
在Redis集群的时候也会出现问题,比如说A客户端在Redis的master节点上拿到了锁,但是这个加锁的key还没有同步到slave节点(可能是网络的原因),master故障,发生故障转移,一个slave节点升级为master节点,B客户端也可以获取同个key的锁,但客户端A也已经拿到锁了,这就导致多个客户端都拿到锁。Redisson 是一个 Java 语言实现的 Redis SDK 客户端,在使用分布式锁时,它就采用了「自动续期」的方案来避免锁过期,这个守护线程我们一般也把它叫做「看门狗」线程。原创 2022-10-08 15:06:23 · 1203 阅读 · 0 评论 -
redis主从同步核心概念深刻理解
主从同步的数据是通过网络传输的,主节点写入数据的同时也会在该缓冲区写入,并通过网络传输给从节点,若从节点的网络或者I/O性能波动或异常会导致主节点上的slave buffer缓冲区溢出,溢出后就会导致主从复制停止,在60s(repl-timeout)内不断重试,超过了repl-timeout就会进行重新复制,通过判断repl-backlog-size和offsets 决定是否需要进行部分复制,在codis主从节点较大的时候并行进行主从同步经常出现timeout导致全量复制就是这个原因。原创 2022-09-26 11:09:38 · 384 阅读 · 0 评论 -
优化redis key 迁移程序(云原生版本)
其实这个Dockerfile 可以使用git来管理, 如果有新的index 需要同步,直接在git提交需要迁移的index文件触发CICD,(continuous integration continuous deliver) ,将build好的镜像推送到镜像仓库.比如你宿主机挂载的文件目录是 root 的,而 docker 容器中 python应用程序的默认的用户,id 和 group 都是 1000(官方容器默认的值),这种情况在容器中就无法正常写入文件到宿主机。11个线程并行大约1mins。原创 2022-09-19 11:20:23 · 220 阅读 · 0 评论 -
Redis key过期策略
Redis所有的数据结构都可以设置过期时间,到期后,key会被自动删除。Redis key过期的方式有三种:被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key 当前已用内存超过maxmemory限定时,触发主动清理策略被动删除只有key被操作时(如GET),Redis才会被动检查该key是否过期,过期就删除,并返回NULL。这种删除策略对CPU友好,不原创 2021-10-15 13:26:23 · 559 阅读 · 0 评论 -
33 | 脑裂:一次奇怪的数据丢失
目录为什么会发生脑裂?第一步:确认是不是数据同步出现了问题如何溯源?第二步:排查客户端的操作日志,发现脑裂现象第三步:发现是原主库假故障导致的脑裂可能存在的假故障?脑裂的过程为什么脑裂会导致数据丢失?如何应对脑裂问题?参数设置建议可能存在的问题网络分区导致的脑裂脑裂的本质原因min-slaves-to-write的注意点CAP理论分析脑裂为什么会发生脑裂?在主从集群中,客户端发送的数据丢失排查步骤:第一步:确认是不是数据同步出..原创 2021-08-31 18:09:29 · 226 阅读 · 0 评论 -
32 | Redis主从同步与故障切换,有哪些坑?
32 | Redis主从同步与故障切换,有哪些坑?原创 2021-08-31 08:33:14 · 204 阅读 · 0 评论 -
31 | 事务机制:Redis能实现ACID属性吗?
目录Redis 如何实现事务?MULTIEXECRedis 的事务机制能保证哪些属性?原子性在执行 EXEC 命令前,客户端发送的操作命令本身就有错误事务操作入队时,命令和操作的数据类型不匹配,但 Redis 实例没有检查出错误在执行事务的 EXEC 命令时,Redis 实例发生了故障, 导致事务执行失败。丢弃事务一致性情况一:命令入队时就报错情况二:命令入队时没报错,实际执行时报错情况三:EXEC 命令执行时实例发生故障隔离性WATCH机制的作用原创 2021-08-30 13:17:36 · 183 阅读 · 0 评论 -
29 | 无锁的原子操作:Redis如何应对并发访问?
目录并发访问中需要对什么进行控制?如何解决?加锁Redis 的两种原子操作方法单命令操作Lua 脚本并发访问中需要对什么进行控制?并发访问控制,是指对多个客户端访问操作同一份数据的过程进行控制,以保证 任何一个客户端发送的操作在 Redis实例上执行时具有互斥性。关键是要对临界资源进行并发控制什么是临界资源?例如库存客户端 A 在 t1 时读取库存值 10 并扣减 1,在 t2 时,客户端 A 还没有把扣减后的库存值 9 写回 Redis,而在...原创 2021-08-27 17:09:08 · 261 阅读 · 0 评论 -
30 | 如何使用Redis实现分布式锁?
目录单机上的锁和分布式锁的联系与区别分布式锁的两个要求基于单个 Redis 节点实现分布式锁上锁解锁上锁、判断、解锁如何保证原子性?setnx风险点1 :未释放锁解决:锁变量设置一个过期时间风险点2 :B释放了A得锁解决:设置锁得值要能区分来自不同客户端或不同线程的锁操作lua脚本释放锁执行lua脚本基于多个 Redis 节点实现高可靠的分布式锁分布式锁算法 Redlock总结单机上的锁和分布式锁的联系与区别单机上得锁:一个线...原创 2021-08-27 10:54:20 · 198 阅读 · 0 评论 -
27 | 缓存被污染了,该怎么办?
目录什么是缓存污染呢?如何解决缓存污染问题?采用随机删除?volatile-ttl 策略LRU 缓存策略单词查询的缓存污染LFU 缓存策略的优化8bit存储次数合理吗?非线性递增的计数器方法短时间大量访问之后不再访问总结什么是缓存污染呢?在一些场景下,有些数据被访问的次数非常少,甚至只会被访问一次。当这些数据服务完访问请求后,如果还继续留存在缓存中的话,就只会白白占用缓存空间。这种情况,就是缓存污染。如何解决缓存污染问题?采用随机删除...原创 2021-08-26 16:59:06 · 154 阅读 · 0 评论 -
26 | 缓存异常(下):如何解决缓存雪崩、击穿、穿透难题?
目录缓存雪崩什么原因导致缓存雪崩?缓存中有大量数据同时过期,导致大量请求无法得到处理解决实例发生故障宕机实现服务熔断请求限流机制缓存击穿缓存穿透方案一:缓存空值或缺省值。方案二:布隆过滤器快速判断数据是否存在布隆过滤器是如何工作的?布隆过滤器的其他应用方案三:前端进行请求检测总结缓存雪崩缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。什么原因导致缓...原创 2021-08-25 17:38:37 · 232 阅读 · 0 评论 -
25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题?
缓存和数据库的数据不一致是如何发生的?数据的一致性”具体是啥意思缓存中有数据,那么,缓存的数据值需要和数据库中的值相同; 缓存中本身没有数据,那么,数据库中的值必须是最新值。不符合这两种情况的,就属于缓存和数据库的数据不一致问题了。只读缓存在新增、删改时遇到的问题如何解决数据不一致问题?重试机制把要删除的缓存值或者是要更新的数据库值暂存到消息队列中(例如使用Kafka 消息队列)。当应用没有能够成功地删除缓存值或者是更新数据库值时,可以从消息队列中重新读取这些值,然后.原创 2021-08-25 15:55:45 · 420 阅读 · 0 评论 -
24 | 替换策略:缓存满了怎么办?
目录设置多大的缓存容量合适?长尾效应重尾效应电商商品的例子最佳实践Redis 缓存有哪些淘汰策略?LRU 算法Redis 中的LRU 算法优势如何处理被淘汰的数据?什么是脏数据呢?淘汰策略使用场景业务数据中有明显的冷 热数据区分数据访问频率相差不大,没有明显的冷热数据区分业务中有置顶的需求数据访问都是有局部性的,也就是我们通常所说的“八二原理”,80% 的请求实际只访问了 20% 的数据。所以,用 1TB 的内存做缓存,并没有必要。...原创 2021-08-25 14:55:34 · 188 阅读 · 0 评论 -
23 | 旁路缓存:Redis是如何工作的?
应用的最新数据可能会丢失,给应用业务带来风险缓存的特征一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度从图上可以看到,CPU、内存和磁盘这三层的访问速度从几十 ns 到 100ns,再到几 ms, 性能的差异很大。想象一下,如果每次 CPU 处理数据时,都要从 ms 级别的慢速磁盘中读取数据,然后再进行处理,那么,CPU 只能等磁盘的数据传输完成。这样一来,高速的 CPU 就被慢速的磁盘拖累了,整个计算机.原创 2021-08-16 16:22:49 · 279 阅读 · 0 评论 -
21 | 缓冲区:一个可能引发“惨案”的地方
目录缓冲区的主要应用场景客户端输入和输出缓冲区如何应对输入缓冲区溢出?查看输入缓冲区的内存使用情况如何避免如何应对输出缓冲区溢出?输出缓冲区会算在maxmemory中吗?主从集群中的缓冲区复制缓冲区的溢出问题全量复制主节点上复制缓冲区的内存开销复制积压缓冲区的溢出问题repl_backlog_bufferrepl_backlog_size应用程序和 Redis 实例交互时,应用程序中使用的客户端需要使用缓冲区吗?缓冲区的主要应用场景...原创 2021-08-13 13:13:12 · 154 阅读 · 0 评论 -
20|Redis 删除数据后,为什么内存占用率还是很高?
目录什么是内存碎片?内存碎片是如何形成的?内因:内存分配器的分配策略外因:键值对大小不一样和删改操作如何判断是否有内存碎片?如何清理内存碎片?当数据删除后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回给操作系统。所以,操作系统仍然会记录着给 Redis 分配了大量内存。Redis 释放的内存空间可能并不是连续的,那么,这些不连续的内存空间很有可能处于一种闲置的状态。这就会导致一个问题:虽然有空闲空间,Redis 却无法用来保存数据,不仅会减少 Redis 能够原创 2021-08-12 16:48:02 · 231 阅读 · 0 评论 -
18-19|如何应对变慢的Redis?
redis变慢无外乎来自于上图中红色部分: redis自身特性、OS和FS1、使用复杂度过高的命令(例如SORT/SUION/ZUNIONSTORE/KEYS),或一次查询全量数据(例如LRANGE key 0 N,但N很大)分析:a) 查看slowlog是否存在这些命令 b) Redis进程CPU使用率是否飙升(聚合运算命令导致)解决:a) 不使用复杂度过高的命令,或用其他方式代替实现(放在客户端做) b) 数据尽量分批查询(LRANGE key 0 N,建议N<=100,查询全量数...原创 2021-08-12 16:05:13 · 146 阅读 · 0 评论 -
redis中什么命令可以替代keys
目录什么命令可以替代呢?scan所遇到的问题SCAN和HSCAN/SSCAN/ZSCAN逻辑差异?scan返回为什么会超过count?reids中的慢查询头号应该是keys,特别是redis规模很大的时候,以至于很多公司直接将keys命令禁掉。此外还有一个问题: 集群模式是无法使用。什么命令可以替代呢?使用SCAN命令客户端通过执行SCAN $cursor COUNT $count可以得到一批key以及下一个游标$cursor,然后把这个$cursor当作SCAN原创 2021-08-12 13:45:17 · 676 阅读 · 0 评论 -
17 | 为什么CPU结构也会影响Redis的性能?
一般很难联想到reids 内存数据库和cpu的关系有多大?本文更像是一篇通识文章。一般认为redis和内存息息相关,但是内存的分配以及资源的调度和CPU也有很大的关系,CPU 的多核架构以及多 CPU 架构,也会影响到 Redis 的性能。主流的 CPU 架构一个 CPU 处理器中一般有多个运行核心,我们把一个运行核心称为一个物理核,每个物理核都可以运行应用程序。每个物理核都拥有私有的一级缓存(Level 1 cache,简称 L1 cache),包括一级指令缓存和一级数据缓存,以及私有的二原创 2021-08-07 17:56:41 · 342 阅读 · 0 评论 -
16 | 异步机制:如何避免单线程模型的阻塞?
Redis 性能的 5 大方面的潜在因素,Redis 内部的阻塞式操作CPU 核和 NUMA 架构的影响;Redis 关键系统配置;Redis 内存碎片;Redis 缓冲区。一、Redis 实例有哪些阻塞点?客户端:网络 IO,键值对增删改查操作,数据库操作;磁盘:生成 RDB 快照,记录 AOF 日志,AOF 日志重写;主从节点:主库生成、传输 RDB 文件,从库接收 RDB 文件、清空数据库、加载 RDB 文件;切片集群实例:向其他实例传输哈希槽信息,数据迁移.原创 2021-08-07 17:22:39 · 202 阅读 · 0 评论 -
03 | 多路复用IO模型:为什么单线程Redis能那么快?
为什么单线程的 Redis 能那么快?Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。Redis 为什么用单线程?多线程的开销使用多线程,可以增加系统吞吐率,或是可以增加系统扩展性。”的确,对于一个多线程的系统来说,在有合理的资源分配的情况 下,可以增加系统中处理请求操作的资源实体,进而提升系统能够同时..原创 2021-08-06 17:12:38 · 125 阅读 · 0 评论 -
15 | 消息队列的考验:Redis有哪些解决方案?
Redis 适合做消息队列吗?”回答问题之前应该先好好思考这个问题?消息队列的消息存取需求是什么? Redis 如何实现消息队列的需求?消息队列在存取消息时,必须要满足三个需求,分别是消息保序、处理重复的消息和保证消息可靠性。需求一:消息保序库存扣除值作为消息的方案,在消息中同时包含读写操作的场景下,会带来数据读取错误的问题需求二:重复消息处理消费者从消息队列读取消息时,有时会因为网络堵塞而出现消息重传的情况。此时,消费者可能会收到多条重复的消息。对于重复的消息,消费者如果多次处原创 2021-08-05 18:09:12 · 128 阅读 · 0 评论 -
Redis常见问题答疑
目录数据类型key过期相关maxmemory相关rehash相关持久化RDBAOF主从复制哨兵锁事务分片集群缓存和数据库一致性缓冲区性能问题排查和调优其它数据类型一个数据类型都对应了很多种底层数据结构。以List为例,什么情况下是双向链表,反之又在什么情况下是压缩列表呢?还是说是并存状态?1、Hash 和 ZSet 是数据量少采用压缩列表存储,数据量变大转为哈希表或跳表存储2、但 List 不是这样,是并存的状态,L转载 2021-08-05 17:09:17 · 674 阅读 · 0 评论 -
14 | 如何在Redis中保存时间序列数据?
目录时间序列数据的读写特点高并发写入的特点时间序列数据的“读”操作有什么特点基于 Hash 和 Sorted Set 保存时间序列数据如何保证写入 Hash 和 Sorted Set 是一个原子性的操作呢?如何对时间序列数据进行聚合计算?基于 RedisTimeSeries 模块保存时间序列数据RedisTimeSeries 的操作主要有 5 个:小结每课一问在做互联网产品的时候,都有这么一个需求:记录用户在网站或者 App 上的点击行为数据,来分析用户行为。原创 2021-08-05 15:05:01 · 418 阅读 · 2 评论 -
13|redis GEO是什么?
面向 LBS 应用的 GEO 数据类型在日常生活中,我们越来越依赖搜索“附近的餐馆”、在打车软件上叫车,这些都离不开基于位置信息服务(Location-Based Service,LBS)的应用。LBS 应用访问的数据是和人或物关联的一组经纬度信息,而且要能查询相邻的经纬度范围,GEO 就非常适合应用在 LBS 服务的场景中看一下它的底层结构。GEO 的底层结构在设计一个数据类型的底层结构时,我们首先需要知道,要处理的数据有什么访问特点。所以,我们需要先搞清楚位置信息到底是怎么被存取的我原创 2021-08-04 10:37:12 · 294 阅读 · 0 评论 -
redis数据类型以及使用场景
1、统计几个用户都喜欢的商品?实现思路:用户1和用户2喜欢的商品列表用set 存储 - > 转成sortedset-> zunionstrore fruits_unit 2 u1 u2这里2是指有几个key? 如果有三个用户,那就在sadd 一个usert喜欢的商品列表.127.0.0.1:6379> sadd user1 apple orange banana(integer) 3127.0.0.1:6379>127.0.0.1:637...原创 2021-07-30 16:53:27 · 149 阅读 · 1 评论 -
哨兵机制-理论篇
主库实际并没有下线,但是哨兵误以为它下线了。误判一般会发生在集群网络压力较大、网络拥塞,或者是主库本身压力较大的情况下。在日常生活中,当我们要对一些重要的事情做判断的时候,经常会和家人或朋友一起商量一下,然后再做决定哨兵机制也是类似的,它通常会采用多实例组成的集群模式进行部署,这也被称为哨兵集群。引入多个哨兵实例一起来判断,就可以避免单个哨兵因为自身网络状况不好,而误判主库下线的情况。同时,多个哨兵的网络同时不稳定的概率较小,由它们一起做决策,误判率也能降低。原创 2021-07-30 10:58:41 · 404 阅读 · 0 评论 -
redis主从何时进行全量同步?
1. 一个从库如果和主库断连时间过长,造成它在主库repl_backlog_buffer的slave_repl_offset位置上的数据已经被覆盖掉了,此时从库和主库间将进行全量复制。2. 每个从库会记录自己的slave_repl_offset,每个从库的复制进度也不一定相同。在和主库重连进行恢复时,从库会通过psync命令把自己记录的slave_repl_offset发给主库,主库会根据从库各自的复制进度,来决定这个从库可以进行增量复制,还是全量复制。简单来说就是发送给主库的offset,主库查..原创 2021-07-26 18:33:16 · 739 阅读 · 0 评论 -
Redis脚本安装
官方给出的安装脚本很完善,如果细心看这个脚本能学到很多东西。我对这个脚本做了简单注释。脚本功底应该加强,期待有一天能写出这样堪称完美的脚本#!/bin/sh################################################################################## Service installer for redis server, runs interactively by default.## To run this sc.原创 2021-07-02 15:13:18 · 483 阅读 · 0 评论 -
redis安装以及如何设置为开机自启动
redis安装好之后,启动有三种方式:1.直接启动 进入redis根目录,执行命令: #加上‘&’号使redis以后台程序方式运行 1 ./redis-server& 2.通过指定配置文件启动 可以为redis服务启动指定配置文件,例如配置为/etc/redis/6379.conf 进入redis根目录,输入命令: 1 ./redis-server/etc/redis/6379.conf ...原创 2021-07-02 10:56:23 · 478 阅读 · 0 评论 -
rdbtools 分析redis rdb文件
参考地址:https://github.com/sripathikrishnan/redis-rdb-tools一、安装rdbtools该工具是python开发的,采用源代码安装。1、在阿里云镜像下载源代码解压tar文件opt]# tar -zxvf rdbtools-0.1.15.tar.gz安装rdbtoolsopt]# cd rdbtools-0.1.15/[root@localhost rdbtools-0.1.15]#[root@localhost r...原创 2021-07-01 16:59:45 · 634 阅读 · 0 评论 -
Redis redis-benchmark 压测结果
redis-benchmark benchmark]# redis-benchmark -h 127.0.0.1 -p 6382 -c 500 -n 200000 -nTotal number of requests (default 100000)-c 500个并发连接,其他参数请通过redis-benchmark --help以下是测试执行的结果====== PING_INLINE ====== 200000 requests completed in 2....原创 2020-07-22 17:49:33 · 352 阅读 · 0 评论 -
数据库开发规约
目录Redis 开发规范一、键值设计1. key名设计2. value设计3.【推荐】:控制key的生命周期,redis不是垃圾桶。二、命令使用1.【推荐】 O(N)命令关注N的数量2.【推荐】:禁用命令3.【推荐】合理使用select4.【推荐】使用批量操作提高效率5.【建议】Redis事务功能较弱,不建议过多使用6.【建议】Redis集群版本在使用Lua上有特殊要求:7.【建议】必要情况下使用monitor命令时,要注意不要长时间使用。...转载 2020-07-18 14:19:21 · 424 阅读 · 0 评论 -
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting fo
目录背景概要故障分析解决方法最后背景这是master 节点刚重启后的一段log,log中有时候会频繁打印Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting fo7818:M 13 Jun 11:28:05.339 # User requested shutdown...7818:M 13 Jun 11:28:05.339...转载 2020-06-16 10:37:18 · 6298 阅读 · 0 评论 -
在redis中使用redis-cli 造数据以及监控
redis-cli我们最常用的三个参数就是-h、-p、-a选项,分配用来指定连接的redis-server的host、port和登录密码。redis-cli –help大家可以继续发现更多的好用客户端命令。之前使用redis-cli 寻找过一次bigkey。有时候测试环境需要批量造一批数据,目前都是手动一个一个set hset zadd... 这些操作可以批量进行吗?官方给出一个例子 redis-cli -r 100 -i 1 info | grep used_memory_human:原创 2020-06-16 09:53:03 · 1073 阅读 · 0 评论 -
Redis错误配置详解
Redis提供了许多提高和维护高效内存数据库使用的工具。在无需额外配置应用层的前提下,Redis独特的数据类型、指令和命令调优就可以满足应用的需求,但是错误的配置,更确切的说那些机外设备可能导致操作麻烦和性能问题。虽然导致了一些令人头疼的问题,但是解决方案是存在的,而且解决方案可能比我们预期的简单。本系列文章介绍了使用Redis时遇到的一些令人头疼的问题,以及该解决这些问题。这些内容基于我们在运行上千个Redis数据库实例时的真实经历。复制缓冲区限制复制缓冲区主从服务器同步数据时保存数据的内存区转载 2020-06-15 17:32:13 · 328 阅读 · 0 评论 -
Codis节点挂掉后的想法
今天Coids server的一个节点数据不存在了,导致AP 大量异常,这种现象应该发生吗?主从为何不能实现高可用?主从数据都是sync的呀。为了自动切换,自动选举,而建制哨兵机制,实现自动切换?意义何在?zk是服务注册中心,再思考一下zk在codis集群中到底扮演的是什么角色?主从两个节点使用keepalived 实现高可用行的通吗?...原创 2020-05-29 13:35:57 · 436 阅读 · 0 评论