V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
vczyh
V2EX  ›  MySQL

MySQL 8.4 MGR 可以上生产吗?

  •  
  •   vczyh · 2 天前 · 2182 次点击

    准备做新版本

    42 条回复    2024-12-27 10:29:14 +08:00
    netnr
        1
    netnr  
       2 天前
    MySQL 8.0/8.4 执行 DDL 会丢数据?是,但影响有限
    https://mp.weixin.qq.com/s/RwAzDdicYWl1cdDq-I0Jsg
    pigeon2049
        2
    pigeon2049  
       2 天前
    用就不要怕
    9.1.0 直接冲 哪里报错改哪里
    realpg
        3
    realpg  
       2 天前
    不用 innodb cluster 的话 没必要上 lts
    用 innodb cluster 的话 router 坑不少 但是都能解决
    qW7bo2FbzbC0
        4
    qW7bo2FbzbC0  
       2 天前   ❤️ 3
    8.4 版本 master/slave 关键词因为政治正确,改成了 primary/replica 了吧,之前工具可能都不适配,可以从 8.0 开始用,慢慢等生态工具支持新关键词
    hetal
        5
    hetal  
       2 天前
    我们公司就用的 8.4 的 innodb cluster+mysql router ,另外还是用的 docker+swarm 运行的~~~
    flyqie
        6
    flyqie  
       2 天前 via Android
    @qW7bo2FbzbC0 #4

    没关注。。还以为这股风气结束了。。没想到居然还在。。

    这下难受了,不知道得等多久。
    vczyh
        7
    vczyh  
    OP
       1 天前
    @pigeon2049 牛逼
    vczyh
        8
    vczyh  
    OP
       1 天前
    @realpg 我看 8.4 相比 8.0 没多什么特性,请问 innodb cluster router 有什么坑吗?
    realpg
        9
    realpg  
       1 天前
    @vczyh #8
    router 可靠性比较差
    经常自己就无了
    而且 router 默认生成器是 init.d 启动 不会自己重启 不知道什么草台班子写的 甚至不是 systemd

    router 得日志功能形同虚设 崩了 死了 都不会写日志
    有时候进程正常 内存也没泄露 对外服务就不好使了 然后自身还正常上报自己正常

    反正这个 router 的可靠性和逻辑 像是大专生课程作业

    从 8.3 到现在 一直这样 版本我们一直滚动升级 问题常态存在
    realpg
        10
    realpg  
       1 天前
    @hetal #5
    你们 router 自己改造没 router 的可靠性如何
    其他都好 就 router 的坑我们踩了几百次了
    现在甚至已经整了一帮人研究 router 结构 自己重写一个 router
    vczyh
        11
    vczyh  
    OP
       1 天前
    @realpg 多谢,不过我们还在调研

    1. 如果不使用 router 可以不,我直连 Primary(RW)和 Replica(R)
    2. 相比简单的主从,单 primary MGR 的性能如何
    hetal
        12
    hetal  
       1 天前
    @realpg 用了 1 年了官方 docker 版本,没有发现啥问题
    hetal
        13
    hetal  
       1 天前
    @vczyh 我们在正式使用前做了很多压力测试,主要实测如下:
    1. Docker 的版本会比普通版本 qps 少 10%左右
    2. MGR 比普通单台性能平均少 30%左右,写入和读取平均一下

    好处是:
    1. 解决了单点故障问题,高可用性
    2. 扩容、迁移、升级更简单了
    realpg
        14
    realpg  
       1 天前
    @hetal #12
    大概是我们的 mysql 负载太重的原因 轻负载可能无法复现

    @vczyh #11
    你不使用 router 那就不要用这个 cluster 直接回归原始主从

    另外看我问#12 的 因为用这玩意生产的企业真的不多 我们的 mysql 集群是充分设计利用效能的,负载非常重,并发很高,数据量也非常大,但是不会搞死数据库引擎

    可能只有到很重负载的 很高并发的规模才会 router 不稳定
    这个仅供参考
    hetal
        15
    hetal  
       1 天前
    @realpg 你说的 router 不稳定,有什么现象,错误,或者具体一点的错误日志么
    hetal
        16
    hetal  
       1 天前
    @realpg 或者具体的版本号,操作系统,部署方式,配置文件的参数,服务器的参数等
    datafeng
        17
    datafeng  
       1 天前
    @qW7bo2FbzbC0 当年是哪群傻 B 提出 master 改 main 的?就为了这么个东西浪费多少的资源。
    kapr1k0rn
        18
    kapr1k0rn  
       1 天前
    我帮客户在 k8s 上用官方 mgr operator 部署的集群,跑了一年了目前没什么问题。不过要让我再选,一律不建议 mysql 集群,遇到问题明明官方文档有解决方案但是因为没有买 oracler 服务还看不了,太恶心人了。
    router 确实坑多,最好不要用,我是换成 proxysql 了。
    vczyh
        19
    vczyh  
    OP
       1 天前
    @realpg 多谢多谢

    1. 目前发现 cluster 好处是自带数据 clone 、failover 、节点管理
    2. 你们多个 router 前面挂了 LB 吗?
    vczyh
        20
    vczyh  
    OP
       1 天前
    @hetal MGR 对于客户端使用(比如一些 SQL )上有什么限制吗?
    vczyh
        21
    vczyh  
    OP
       1 天前
    @hetal 谢谢提供的测试数据
    realpg
        22
    realpg  
       23 小时 58 分钟前
    @vczyh #19

    router 前面为啥要挂 lb 啊
    router 是跟 client 绑定的末端设施 他自身是分配的


    @hetal #15
    无任何日志 它自己根本不输出任何东西

    router 的日志是我二十多年运维生涯见过的最干净的日志 跟没有日志没啥区别

    包括但不仅限于 自己就 exit 了 日志里啥也没有
    还有它跟 cluster 的通讯一切正常 keepalive 什么都正常发 然后对下面的应用就不提供服务了

    还有它提供服务 socket 正常 tcp 就 connection refused 以及反过来

    当然我们自己在 router 以外做了一些东西去解决这个事情 暂时影响不大了

    ----------
    router 的版本,我们最开始跑这个集群时候 是 8.3 那时候第一个 lts 还没发布 我们每一个小版本都跟着滚动更新
    现在是 8.4 lts 最新 lts 更新我们延迟两周就跟着滚动更新
    这些问题在任何版本都是一样的发生
    其实看了他们 router 代码 这玩意压根也没怎么更新过多少代码

    我们现在从 router 以外的 app 侧做了很多处理
    同时对 router 外挂了检测机制 基本 2 秒内解决 router 的故障

    目前 router 的抽风频率大概是一个 6 个 backend 6 个 router 的系统 每 55 小时左右 大概就会有一只 router 莫名其妙进入一个随机的故障状态
    hetal
        23
    hetal  
       23 小时 30 分钟前
    @vczyh 没有什么限制
    hetal
        24
    hetal  
       23 小时 27 分钟前
    @realpg 你可以看看 router configure 的配置,你说的问题我们都没有碰到
    hetal
        25
    hetal  
       23 小时 26 分钟前
    我们生产是 8.4.2 ,测试环境是 8.4.3
    hetal
        26
    hetal  
       23 小时 16 分钟前
    @realpg router 的配置参数可以发出来看看,有一此参数是不能随便配置的,会影响事务相关的操作等
    vczyh
        27
    vczyh  
    OP
       21 小时 55 分钟前
    @realpg 意思是多个 router 挂个 VIP 吗?所有请求发送到一个 router 这样好吗?还有就是其中一个 router 挂了怎么办
    realpg
        28
    realpg  
       20 小时 36 分钟前
    @vczyh #27
    额。你看看文档吧,你没理解 innodb cluster 的架构。


    @hetal #26
    随便找一个
    256G 内存 3TB 左右存储空间 每日高峰综合负载 40%左右 日产生新行数约千万 删除也差不多这么多 写占比 78%
    90%字段整数类型 索引充分 非 DDL 慢查询阈值 1 秒

    [DEFAULT]
    name=system
    user=mysqlrouter
    keyring_path=/var/lib/mysqlrouter/keyring-39-1
    master_key_path=/etc/mysqlrouter/mysqlrouter-39-1.key
    connect_timeout=3
    read_timeout=45
    dynamic_state=/var/lib/mysqlrouter/state-39-1.json
    client_ssl_cert=/var/lib/mysqlrouter/router-cert-39-1.pem
    client_ssl_key=/var/lib/mysqlrouter/router-key-39-1.pem
    client_ssl_mode=PREFERRED
    server_ssl_mode=PREFERRED
    server_ssl_verify=DISABLED
    unknown_config_option=error
    max_idle_server_connections=240
    router_require_enforce=1

    [logger]
    level=INFO

    [metadata_cache:bootstrap]
    cluster_type=gr
    router_id=44
    user=node-router-main-39-1
    metadata_cluster=HB2DB39
    ttl=0.5
    auth_cache_ttl=-1
    auth_cache_refresh_interval=2
    use_gr_notifications=0

    [routing:bootstrap_rw]
    bind_address=127.0.0.1
    bind_port=6446
    socket=/run/mysqlrouter/mysql-39-1-main.sock
    destinations=metadata-cache://HB2DB39/?role=PRIMARY
    routing_strategy=first-available
    protocol=classic

    [routing:bootstrap_ro]
    bind_address=127.0.0.1
    bind_port=6447
    socket=/run/mysqlrouter/mysql-39-1-ro.sock
    destinations=metadata-cache://HB2DB39/?role=SECONDARY
    routing_strategy=round-robin-with-fallback
    protocol=classic


    [http_server]


    [rest_api]
    vczyh
        29
    vczyh  
    OP
       20 小时 21 分钟前
    @realpg

    https://imgur.com/a/mc0PmPi
    左边的 router 如果挂了,如何保证左边的 application 仍然可用?
    realpg
        30
    realpg  
       20 小时 13 分钟前
    @vczyh #29
    挂了就不用了啊 你的程序都不是分布式的 就没必要上这个

    你没发现他们这个设计图都没给你做交叉吗

    或者换句话说 router 是不应该挂的 只有 app 能挂

    这也是我遇到的问题 这个 router 高负载下是真的不稳
    vczyh
        31
    vczyh  
    OP
       20 小时 7 分钟前
    @realpg

    这个和应用程序是否是分布式没关系,mysql 高可用就是要求每个组件有一定的容错能力,比如 master 挂了,slave 后变成新主,多个 router 只要有一个没挂就能继续为应该程序提供服务。

    如果 router 挂了应用程序就不可用的话,为什么要用 MGR ,我用单节点不行吗,不会只是为了多一份数据备份吧。
    vczyh
        32
    vczyh  
    OP
       20 小时 4 分钟前
    @realpg

    正如你说的 router 确实不应该挂,部署多个 router 并且配合 keepalived 可以实现高可用。

    https://medium.com/@makhshif.tanvir/configuring-mysql-router-and-keepalived-for-high-availability-in-a-mysql-cluster-3589e40d5dd6
    hetal
        33
    hetal  
       19 小时 56 分钟前
    @realpg 我没有配置[routing:xx],让其内部操作,可以禁用连接池试式

    [DEFAULT]
    max_idle_server_connections=0
    router_require_enforce=0

    [metadata_cache]
    use_gr_notifications=1
    hetal
        34
    hetal  
       19 小时 54 分钟前
    @vczyh 我们是用的 docker swarm ,启动的多个 mysql router replicas ,只启用了 use-gr-notifications 这个参数,其它都是默认参数,比较稳定
    vczyh
        35
    vczyh  
    OP
       19 小时 45 分钟前
    @hetal 谢谢老哥,我参考一下
    hetal
        36
    hetal  
       19 小时 22 分钟前
    目前看官方的 changelog ,连接池和读写分离的 bug 比较多,我们这 2 个都没有使用,应用端根据端口来区分的;
    https://dev.mysql.com/doc/relnotes/mysql-router/8.4/en/news-8-4-3.html
    realpg
        37
    realpg  
       10 小时 55 分钟前
    @hetal #36
    内部操作?
    你不指定,默认就所有读写操作都在 PRIMARY 上面 除非你指定 SPLIT 的入口

    我们现在不考虑副本 最小的集群上是 1 个 PRIMARY4 个 SENCONARY ,最多的 1 个 PRIMARY 三十多个 SENCODARY 才能扛得住请求数
    都扔给 PRIMARY 启动后 100 毫秒整个集群就死了
    realpg
        38
    realpg  
       10 小时 41 分钟前
    @vczyh #32
    额 别把野鸡攻略当回事吧
    你要是认定一种做法 什么地方都找得到跟你想法一样的人



    @hetal #36
    补充一下 我用的根本不是你给的 changlog 里说的 Read-Write splitting
    那玩意指的是

    [routing:bootstrap_rw_split]
    destinations=metadata-cache://HB2DB161/?role=PRIMARY_AND_SECONDARY

    而我用的只是指定连接 PRIMARY 还是 SENCODARY

    因为 INNODB CLUSTER 是不保证一致性的,甚至可以说,高负载下他是一定不一致的。
    冷数据才可以连 SENCODARY

    而且 spilit 这玩意纯属娱乐功能 源代码写的一坨屎

    ----
    从 8.3.0 到 8.4.4 router 基本就没修复过任何正经的 bug

    我公司有 oracle 的商业支持(mysql) 不过是比较便宜的 已经不再续了
    他们商业支持认为我们反馈的问题是在骗他们 是在 joking 然后就不管了
    他们认为 router 能自己 exit 还没有日志是我们在骗他

    他们给我们这个问题定的结论是: 我们没管理好服务器 被人登上去手动 service mysqlrouter stop 了
    hetal
        39
    hetal  
       4 小时 6 分钟前
    @realpg 多看看文档吧
    By default, generated bind_port values are as follows: For the classic protocol, Read-Write uses 6446 and Read-Only uses 6447, and for the X protocol Read-Write uses 6448 and Read-Only uses 6449.

    https://dev.mysql.com/doc/mysql-router/8.0/en/mysqlrouter.html
    hetal
        40
    hetal  
       4 小时 3 分钟前
    @realpg 默认 mysql router 的 max_connections 为 512 ,如果负载大,连接不释放,不仅仅要调 router 的参数,mysql 的很多参数也要调整;随你吧,你说问题多就多呗,用不用也你们的选择。
    vczyh
        41
    vczyh  
    OP
       2 小时 18 分钟前
    @realpg 我发现你真是不会好好说话,router 挂了一个后,整个 MySQL 不能用了你管这叫高可用?
    hetal
        42
    hetal  
       1 小时 39 分钟前
    @hetal 默认端口配置 6446 只会连 primary ,6447 只会连 secondary ,所以,默认情况下 router 已经做了主从/读写分离了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4268 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 04:08 · PVG 12:08 · LAX 20:08 · JFK 23:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.