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

求助双机热备, VIP 的最好的中间件方案。

  •  
  •   cencoroll · 14 天前 · 1408 次点击
    这两天学习双机热备并且实际操作,但是没研究出来到底什么是比较适合的方案,网上搜出来的方案又太杂.
    想请教一下到底哪个方案最好?目前使用的是 keepalived ,有更好的方案选择吗?
    服务器上跑的服务中 mysql&redis 只有这两个需要使用 vip 做 ip 漂移!
    21 条回复    2024-07-10 16:48:51 +08:00
    vopsoft
        1
    vopsoft  
       14 天前
    最好 那当然是买两台 F5 了
    njmaojing
        2
    njmaojing  
       14 天前
    redis 官方有主从或者集群模式,为啥要 vip ?
    0608516518
        3
    0608516518  
       14 天前   ❤️ 1
    如果特指 VIP ,它底层协议就是 VRRP ,无论是 F5 ,还是硬件路由器、防火墙,都用 VRRP ,所以本质功能没有区别。
    linux 下实现 VRRP 的软件就是 keepalived 了。

    但对于 Mysql 和 redis ,它双机热备恐怕并不*只*用 VIP 实现的吧?因为这两个服务都是有状态的。
    比如两个 mysql 实例,你还得考虑数据同步和一致性的问题。如果想实现高可用,推荐你使用 mysql 的另外的发行版 Percona XtraDB Cluster. 而 Redis 也要部署为 replica 模式。
    govictory66
        4
    govictory66  
       14 天前
    目前在用的是 mysql+keepalived ,redis 哨兵
    defunct9
        5
    defunct9  
       14 天前
    ucarp,keepalived 太复杂
    defunct9
        6
    defunct9  
       14 天前
    更复杂的是 peacemaker+corosync
    vopsoft
        7
    vopsoft  
       14 天前
    看来这里问道的答案会更杂。 那还是用常有的吧 mysql 用 mha (新版自带 vip ) redis 用集群
    anubu
        8
    anubu  
       14 天前
    整个系统的高可用分多个层面,复杂度主要集中在业务数据层面,各种有状态集群、选主算法、同步算法等等,花活太多了。网络层面就简单多了,一个 VIP 大部分场景都够了,keepalived 简单好用,久经考验。
    cheneydog
        9
    cheneydog  
       14 天前
    keepalived + docker 方案,部署应该还是比较容易的,基本能用了。
    更高的需求就要更严肃的方案了。
    cencoroll
        10
    cencoroll  
    OP
       14 天前
    @njmaojing #2
    @0608516518 #3
    @vopsoft #7
    @anubu #8
    可能是我问题描述不够详细,情况是这样的,最近公司整了个活,客户的服务器是双机热备(两台刀片服务器 ip 分别是 xx.xx.xx.2, xx.xx.xx.3 ),部署在客户的内网里,要求就是其中一台一旦出问题了,另一台能平滑切换使用,mysql 用的是 5.7 redis 用的 6.2 。
    现在已经配置好了 mysql 双主了,然后 redis 我看了一天网上的教程都是在单机 docker 里使用从库和使用哨兵,那这个 redis 的 vip 到底怎么做到切换呢....mysql 我看 keepalived 可以解决这个问题,那 redis 使用哨兵的话如果集中向外服务提供 vip ?还是用 keepalived 吗?
    sunxvvv
        11
    sunxvvv  
       13 天前
    @cencoroll 引入哨兵就是为了主故障时,自动选主切换,你连接哨兵集群就行
    cencoroll
        12
    cencoroll  
    OP
       13 天前
    @sunxvvv #11 刚刚发现 springboot 后端可以直接连接哨兵了,傻了,浪费了一上午。
    WashFreshFresh
        13
    WashFreshFresh  
       13 天前
    直接连哨兵,不连 master 或 slave ,由哨兵告诉我目前的 master 。
    vopsoft
        14
    vopsoft  
       13 天前
    看起来似乎有问题,mysql 双主有人在生产环境用吗?双主如果发生数据不一直以哪个为准呢

    “要求就是其中一台一旦出问题了,另一台能平滑切换使用” 那坏的那台恢复了 还需要自动恢复吧

    我们的生产环境 mysql 用的 mha 一主多从 也只能切换一次(即发生故障后自动切换,但需要手工恢复)
    还有另一套 sql server 用的两台 sql+一套存储的方式
    cencoroll
        15
    cencoroll  
    OP
       13 天前
    不知道是配置有问题还是啥原因,试着手动关闭 redis-master 后无法自主切换,还是尝试重连 master ,试了 10 几次只有一次能切换。我是两边的服务器都需要配置 2 个哨兵吗?不知道是选举出问题还是什么原因。

    @vopsoft #14 说实话我自己是想搞集群的,问题是客户就只买了两台服务器。要搞双机热备,MHA 我也研究一下,谢谢
    vopsoft
        16
    vopsoft  
       13 天前
    redis 不是问题 研究一 jredis 那库怎么连集群就好 只买两台的话 keepalived +脚本 的方式能实现 但不怎么靠谱
    vopsoft
        17
    vopsoft  
       13 天前
    顺便踩下 mycat 那东西就个垃圾 只作者在自嗨吹
    cencoroll
        18
    cencoroll  
    OP
       13 天前
    @vopsoft #17 细说一下咋了,我还考虑了一下用这个,但我看好就没维护了,而且同事推荐的是 keepalived
    vopsoft
        19
    vopsoft  
       13 天前
    @cencoroll #18 坑特别多 例如默认 查数据只给返回 120 条 ,需要在 sql 语句中自己写 limit 这东西就不是给人类用的
    Vitumoc
        20
    Vitumoc  
       12 天前
    如果只是切 IP 的话,其实挺简单的,刚好前几天项目需要,随手写了个垃圾工具

    https://github.com/vitsumoc/vwinvrrp/tree/main

    https://vitsumoc.github.io/%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0windows%E4%B8%8B%E7%9A%84%E5%BA%94%E7%94%A8%E7%83%AD%E5%A4%87.html

    虽然写的很粗糙,但是能用,在客户那测试也通过了。

    可以考虑一下?
    Vitumoc
        21
    Vitumoc  
       12 天前
    顺带一提,我的项目情况和你很类似

    我这边的 mysql 没有做任何的自动同步,因为项目客户没有 DBA ,我们也不可能给他们做无限期的维护,所以给他们做了个手动同步功能,明确要求客户更改配置数据(我们配置数据存在 mysql )后需要手动同步。

    而时序数据之类的,则是采集器同时发到两台服务器,这样服务器正常时两边都有数据,故障时则没有数据,这个客户也是认可的。

    所以我这边就简单做了个切 IP 的程序,让客户通过 VIP 访问业务就可以了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4848 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:43 · PVG 13:43 · LAX 22:43 · JFK 01:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.