• Pisanix v0.2.0 发布|新增动态读写分离支持


    Pisanix 于今天发布了 v0.2.0 版本,在此前版本基础上,本次更新新增了动态读写分离支持,下面将进行详细介绍。

    1.动态读写分离介绍

    1.1 介绍

    读写分离是业界使用 MySQL 高可用最常用的方案之一,在实际场景中可以提高查询性能,降低服务器负载。本次版本在 v0.1.0 静态规则基础上增加了动态感知读写分离功能。

    在动态感知的读写分离中,需要配置读写分离的规则。Pisa-Proxy 会根据规则进行 SQL 路由。如图1.1 Pisa-Proxy 后端会启动 4个 Monitor 对后端集群状态进行感知。Monitor Reconcile 会对 Monitor 上报的数据进行计算聚合并得出后端集群最终状态,再由 Monitor Reconcile 将状态信息通过 channel 下发给 RulesMatch,RulesMatch 拿到消息后会动态调整后端数据源列表。

    这里的概念有:

    • 节点: 指后端数据库节点。
    • RulesMatch:RulesMatch 引擎通过编写的规则集,与 Pisa-Proxy 接收到的 SQL 查询语句做匹配。
    • TargetRole: 指通过规则匹配引擎匹配到的 TargetRole 组,每个 TargetRole 组里可能会有一个或多个节点。
    • LoadBalance:负载均衡模块会按照相应的算法从 TargetRole 组里选取一个合适的节点。
    • TargetInstance:指由 LoadBalance 模块选出的节点。
    • Discovery:发现类型,对应于后端数据源使用的高可用策略,例如: MHA,RDS,MGR等等,本版本中主要支持了 MHA。
    • Monitor: 指 Pisa-Proxy 对后端的探测模块,在 MHA 中主要依赖于4种 Monitor:
      • Connect Monitor: 探测数据库连通性。
      • Ping Monitor: 探测数据库是否健康。
      • Replication Lag Monitor: 探测主从复制延迟状态。
      • Read Only Monitor: 探测主从数据库角色

    图1.1

    1.2 读写分离配置

    读写分离配置规则配置方式同静态读写分离保持一致,动态读写分离配置项如下:

    参数类型是否依赖默认值含义
    userstringNone探测模块执行检查 SQL 语句用户名
    passwordstringNone探测模块执行检查 SQL 语句密码
    monitor_periodu641000探测模块更新感知后端数据源状态周期(毫秒)
    connect_periodu641000Connect 模块探测周期(毫秒)
    connect_timeoutu646000Connect 模块探测超时时间(毫秒)
    connect_failure_thresholdu641Connect 模块探测失败重试次数
    ping_periodu641000Ping 模块探测周期(毫秒)
    ping_timeoutu646000Ping 模块探测超时时间(毫秒)
    ping_failure_thresholdu641Ping 模块探测失败重试次数
    replication_lag_periodu641000Replication Lag 模块探测周期(毫秒)
    replication_lag_timeoutu646000Replication Lag 模块探测超时时间(毫秒)
    replication_lag_failure_thresholdu641Replication Lag 探测失败重试次数
    max_replication_lagu6410000用户定义主从最大延迟时间阈值(毫秒)
    read_only_periodu641000Read Only 探测周期(毫秒)
    read_only_timeoutu646000Read Only 探测超时时间(毫秒)
    read_only_failure_thresholdu643Read Only 探测失败重试次数

    CRD 配置示例:

    apiVersion: core.database-mesh.io/v1alpha1
    kind: TrafficStrategy
    metadata:
      name: catalogue
      namespace: demotest
    spec:
      selector:
        matchLabels:
          source: test
      loadBalance:
        readWriteSplitting:
          dynamic:
            defaultTarget: readwrite
            discovery:
              masterHighAvailability:
                connectionProbe:
                  failureThreshold: 3
                  periodMilliseconds: 1000
                  timeoutMilliseconds: 6000
                monitorPeriod: 1000
                pingProbe:
                  failureThreshold: 3
                  periodMilliseconds: 1000
                  timeoutMilliseconds: 6000
                readOnlyProbe:
                  failureThreshold: 3
                  periodMilliseconds: 1000
                  timeoutMilliseconds: 6000
                replicationLagProbe:
                  failureThreshold: 3
                  maxReplicationLag: 3
                  periodMilliseconds: 1000
                  timeoutMilliseconds: 6000
                user: monitor
                password: monitor
            rules:
            - algorithmName: roundrobin
              name: write-rule
              regex:
              - ^insert
              target: readwrite
              type: regex
            - algorithmName: roundrobin
              name: read-rule
              regex:
              - ^select
              target: read
              type: regex
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    2. Pisanix v0.2.0 版本说明

    新特性

    • Pisa-Controller
      • 在 TrafficStrategy CRD ReadWriteSplitting 字段中,增加了对动态读写分离的支持 #208
    • Pisa-Proxy
      • 支持动态感知读写分离 #204
      • 增加了 daemon sidecar 子命令 #190

    增强

    • 重构了 Pisa-Proxy 配置文件 #182
    • 完善 SHOW SQL 语句解析 #183
    • 增加 Pisa-Controller 代码覆盖率检查 #192
    • 增加对后端数据源连接失败重连 #215

    改进

    • Pisa-Controller
      • 修复 webhook tls #221
    • Pisa-Proxy
      • 修复 MySQL8 认证切换请求失败问题 #170
      • MySQL 协议 EOF 包处理异常 #166
      • 修复了 Charset 字符集 #154
      • 修复注入环境变量 #223

    其他

    3. 社区

    本次版本发布共包含62个 PR,感谢各位贡献者:

    • mlycore
    • xuanyuan300
    • wbtlb
    • windghoul
    • lltgo
    • tuichenchuxin
    • dongzl

    [下载链接]
    (https://github.com/database-mesh/pisanix/releases/tag/v0.2.0)

    邮件列表https://groups.google.com/g/database-mesh
    英文社区双周会(2022年2月16日起),周三 9:00 AM PSThttps://meet.google.com/yhv-zrby-pyt
    中文社区双周会(2022年4月27日起),周三 9:00 PM GMT+8https://meeting.tencent.com/dm/6UXDMNsHBVQO
    微信加群小助手pisanix
    邮件列表https://groups.google.com/g/database-mesh
    Slackhttps://join.slack.com/t/databasemesh/shared_invite/zt-19rhvnxkz-USjZamghd_Q0q~8bAJXA
    会议记录https://bit.ly/39Fqt3x
  • 相关阅读:
    FPGA备战秋招---常用知识点
    金仓数据库KingbaseES本地化支持(4. 排序规则)
    【编程题】【Scratch一级】2022.09 踢足球
    kubernetes 资源管理
    计算机跨考现状,两极分化现象很严重
    MacOS ventura跳过配置锁
    基于web在线餐饮网站的设计与实现——仿Coco线上订奶茶饮料6个页面(HTML+CSS+JavaScript)
    4、FFmpeg命令行操作6
    大数据存储基石——HDFS
    Java错误:找不到或无法加载主类
  • 原文地址:https://blog.csdn.net/SphereEX/article/details/126156678