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

MySQL 主节点切换有完美方案?

  •  
  •   yingqiuQAQ · 2023-04-19 11:11:43 +08:00 · 2393 次点击
    这是一个创建于 586 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 假设数据库写节点在切换过程有双写的短暂状态,如何解决自增主键冲突问题呢
    11 条回复    2023-04-20 14:21:09 +08:00
    Jusekenny
        1
    Jusekenny  
       2023-04-19 11:15:55 +08:00
    帮你问了 chatgpt ,他的回答:
    MySQL 主节点切换一般需要使用主从复制实现高可用,当主节点出现故障时,需要将从节点提升为主节点,以保证系统的可用性。下面介绍一些常用的 MySQL 主节点切换方案:

    1. 基于 MHA 的方案:MHA ( Master High Availability )是一种基于二进制日志流的主从复制自动故障转移和自动故障恢复解决方案。当主节点发生故障时,MHA 会自动将一个从节点切换为新的主节点,适用于高并发场景。

    2. 基于 Galera Cluster 的方案:Galera Cluster 是一个基于 MySQL 复制的开源多主复制技术,能够实现数据同步、数据冲突解决和自动失效检测。在主节点故障时,Galera Cluster 能够自动将一个节点选举为新的主节点。

    3. 基于 Percona XtraDB Cluster 的方案:Percona XtraDB Cluster 是一个基于 Galera 的 MySQL 高可用解决方案。它支持自动故障转移和自动节点加入,可以快速恢复主节点的服务。

    以上三种方案都有完美的主节点切换方案,能够在节点故障时自动进行主从切换,保证了系统的可用性和数据的安全性,需要根据实际业务情况选择相应的方案。
    buchikoma
        2
    buchikoma  
       2023-04-19 11:32:14 +08:00
    先考虑下为什么会有双写的情况,正常的主从切换只可能会出现短暂的双只读
    han1988
        3
    han1988  
       2023-04-19 11:32:14 +08:00
    可以用官方的 MySQL InnoDB Cluster 方案啊
    brader
        4
    brader  
       2023-04-19 11:38:04 +08:00
    有,用阿里云 /dog ,它号称秒级切换
    yingqiuQAQ
        5
    yingqiuQAQ  
    OP
       2023-04-19 11:38:26 +08:00
    @buchikoma 不想停写。
    wxcgcy
        6
    wxcgcy  
       2023-04-19 13:59:02 +08:00
    记得有个双 master 方案,自增主键一个奇数一个偶数,俩都写入也不会引起冲突,可以双向同步
    janwarlen
        7
    janwarlen  
       2023-04-19 14:25:47 +08:00
    mysql 分布式部署的场景下,自增 id 不是仅能用来判断对应 db 的表是否有硬删除么,不能用来做其他,或者你们从表结构设计开始,不同 db 的初始 id 不同,然后使用集群数量作为步进,不过玩意扩容或者缩减还是会有问题
    sujin190
        8
    sujin190  
       2023-04-19 18:41:36 +08:00 via Android
    似乎解决尽可能缩短切换时间要比双写简单多了吧,只是几秒不可写其实没你想的那么严重吧
    sadfQED2
        9
    sadfQED2  
       2023-04-19 19:05:52 +08:00 via Android
    @wxcgcy +1 我们线上就是这种方案
    yingqiuQAQ
        10
    yingqiuQAQ  
    OP
       2023-04-19 20:03:20 +08:00
    @wxcgcy 对 双写是可以这样搞,最初是这个方案
    buchikoma
        11
    buchikoma  
       2023-04-20 14:21:09 +08:00
    @yingqiuQAQ
    不想停写就设双主,或者三节点,甚至去开 MGR ,但是你没有管控纯手动运维的话数据一致性又无法保证,性能损耗高,rto 和 rpo 时间也长。所以就是看你取舍,停写去做切换切换是代价最小的实现,再或者可以在 mysql 前面挂个 proxy 做连接保持。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4573 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.