V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chinazz
V2EX  ›  Redis

Redis 支持主从复制,哪我应该怎样实现双主复制呢?

  •  
  •   chinazz ·
    chinazhenzhen · 2019-04-09 11:53:49 +08:00 · 15606 次点击
    这是一个创建于 2090 天前的主题,其中的信息可能已经有所发展或是发生改变。
    具体场景是 A B 两个 Redis 服务,可以实时的同步两个服务的信息。
    27 条回复    2019-04-10 16:51:33 +08:00
    j2gg0s
        1
    j2gg0s  
       2019-04-09 12:40:56 +08:00
    基本没有好的实现思路。存储还是缓存?如果是存储且需要双主能不能用 MySQL,然后 redis 做缓存?如果是缓存,需要双主?
    chinazz
        2
    chinazz  
    OP
       2019-04-09 12:45:03 +08:00
    @j2gg0s 是用来做存储的,国内国外两个服务,做一下同步
    lhx2008
        3
    lhx2008  
       2019-04-09 12:50:07 +08:00
    双主冲突问题比较复杂吧,可以对不同地区的用户,直接分成两部分。实在需要同步的数据,还是挂主从同步。
    dengtongcai
        4
    dengtongcai  
       2019-04-09 12:56:06 +08:00 via iPhone
    codis 或者自带的无中心直连集群理论可行吗,生产没用过
    halk
        5
    halk  
       2019-04-09 12:57:37 +08:00
    见过大厂的自定义实现,
    不知道 LZ 这样做的目的是什么?
    cholerae
        6
    cholerae  
       2019-04-09 13:21:03 +08:00
    冲突咋处理,不用处理的话直接同步日志得了
    chinazz
        7
    chinazz  
    OP
       2019-04-09 14:03:22 +08:00
    @halk 主要是解决跨区问题,中国地区写入的时候直接写入 A 服务,国外地区直接写入 B 服务。( A、B 服务是实时同步的,保持数据一致)有什么相关的链接或者博文吗?没有找到合适的解决方法。
    ech0x
        8
    ech0x  
       2019-04-09 14:04:32 +08:00 via iPhone
    这个问题信息太少了,CAP 理论了解一下。
    一致性、可用性、分区容错性 看你怎么权衡了。
    chinazz
        9
    chinazz  
    OP
       2019-04-09 14:04:59 +08:00
    @cholerae 需要实时的同步两个服务,没有找的特别合适的方法
    9hills
        10
    9hills  
       2019-04-09 14:11:27 +08:00 via iPhone
    如果要实现跨州实时强一致低延迟写入,理论上是不可能的。

    同时在 a 地域和 b 地域对 key 赋值,怎么解决冲突的问题?

    必须要放弃什么东西,你可以放弃低延迟,只有 AB 同时 ack 才算写入成功。你也可以放弃强一致,改成基于原子钟的时序归并,达到最终一致。
    boyhailong
        11
    boyhailong  
       2019-04-09 15:20:26 +08:00
    为什么要这么做成两个双主这么麻烦 主从不就行了?
    没有背景的提问没任何意义
    halk
        12
    halk  
       2019-04-09 16:03:07 +08:00
    @chinazz 参考下这里,不知道是不是和你的需求一致
    https://redislabs.com/wp-content/uploads/2017/02/04-Yossi-Gottlieb-Redis-Labs.pdf
    Linken404
        13
    Linken404  
       2019-04-09 16:12:22 +08:00
    目前看是没有吧...
    除非能换 mysql,比如想办法把 AB 两区域的 redis 数据汇集到一个 mysql 里?
    最好还是能变通一下,不要强行给自己挖坑啊...
    j2gg0s
        14
    j2gg0s  
       2019-04-09 16:27:24 +08:00
    @chinazz MySQL 的异地多主有成熟可靠的方案,redis 当前没有,估计以后也不会有,RDB,AOF 和 Binlog 的特性差的还是比较原的;
    建议:1 数据源换成 MySQL,MySQL 多主,redis 做缓存 2 双主之间没有严重数据冲突的话,可以搞个 kafka 跨机房同步,但是估计这个以后会坑自己
    leviathan0992
        15
    leviathan0992  
       2019-04-09 16:31:33 +08:00
    @chinazz 双主的架构是为了双写吗? 还是处于别的什么原因
    misaka19000
        16
    misaka19000  
       2019-04-09 16:43:25 +08:00
    双主一致性太难保证了吧
    chinazz
        17
    chinazz  
    OP
       2019-04-09 16:57:32 +08:00
    @leviathan0992 双主架构是为了异地双写。
    chinazz
        18
    chinazz  
    OP
       2019-04-09 16:58:43 +08:00
    @misaka19000 所以想找一下有没有相关的案例之类的
    leviathan0992
        19
    leviathan0992  
       2019-04-09 16:59:04 +08:00
    @chinazz 操作同一个 key 必须要求保证一致性吗?
    chinazz
        20
    chinazz  
    OP
       2019-04-09 17:06:34 +08:00
    @leviathan0992 对,数据必须保持一致性
    leviathan0992
        21
    leviathan0992  
       2019-04-09 17:12:21 +08:00
    @chinazz 那需求是两边操作同一个 key 根据时间戳来决定 apply 哪个操作吗?
    aaa5838769
        22
    aaa5838769  
       2019-04-09 18:02:52 +08:00
    我不知道你的具体场景是什么,可以写一个微服务来实现。你的程序连接微服务,微服务可以连接两个 redis,去读取或者写入数据。
    joesonw
        23
    joesonw  
       2019-04-09 18:18:37 +08:00 via iPhone
    tidis,兼容 redis 协议。是基于 TiKV 的,TiKV 可以 cross datacenter,意味着理论上 tidis 也可以,只是说延迟可能会高一些,这就见仁见智了。
    kaiser1992
        24
    kaiser1992  
       2019-04-09 20:02:56 +08:00 via Android
    感觉类似于分布式数据库中通过数据库链接、触发器和事务来实现
    leviathan0992
        25
    leviathan0992  
       2019-04-09 20:06:39 +08:00
    @chinazz 我的问题是双主两个实例*同时*操作一个 Key, 这种情况必须确保两边的 value 一致吗?
    chinazz
        26
    chinazz  
    OP
       2019-04-10 09:45:01 +08:00
    @leviathan0992 确保两边的 Value 一致
    chinazz
        27
    chinazz  
    OP
       2019-04-10 16:51:33 +08:00
    目前找到一个不错的解决方案。dynomite 还在调研中。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.