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.2 读写别离装备
读写别离装备规矩装备方法同静态读写别离保持一致,动态读写别离装备项如下:
参数 | 类型 | 是否依赖 | 默认值 | 意义 |
---|---|---|---|---|
user | string | 是 | None | 勘探模块执行检查 SQL 句子用户名 |
password | string | 是 | None | 勘探模块执行检查 SQL 句子密码 |
monitor_period | u64 | 是 | 1000 | 勘探模块更新感知后端数据源状况周期(毫秒) |
connect_period | u64 | 是 | 1000 | Connect 模块勘探周期(毫秒) |
connect_timeout | u64 | 是 | 6000 | Connect 模块勘探超时时刻(毫秒) |
connect_failure_threshold | u64 | 是 | 1 | Connect 模块勘探失利重试次数 |
ping_period | u64 | 是 | 1000 | Ping 模块勘探周期(毫秒) |
ping_timeout | u64 | 是 | 6000 | Ping 模块勘探超时时刻(毫秒) |
ping_failure_threshold | u64 | 是 | 1 | Ping 模块勘探失利重试次数 |
replication_lag_period | u64 | 是 | 1000 | Replication Lag 模块勘探周期(毫秒) |
replication_lag_timeout | u64 | 是 | 6000 | Replication Lag 模块勘探超时时刻(毫秒) |
replication_lag_failure_threshold | u64 | 是 | 1 | Replication Lag 勘探失利重试次数 |
max_replication_lag | u64 | 是 | 10000 | 用户定义主从最大推迟时刻阈值(毫秒) |
read_only_period | u64 | 是 | 1000 | Read Only 勘探周期(毫秒) |
read_only_timeout | u64 | 是 | 6000 | Read Only 勘探超时时刻(毫秒) |
read_only_failure_threshold | u64 | 是 | 3 | Read 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
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
其他
- Docs
- 新增读写别离阐明文档:www.pisanix.io/docs/v0.2.0…
- 更新单机部署文档:www.pisanix.io/docs/v0.2.0…
- Charts
- 更新至 v0.2.0
3. 社区
本次版本发布共包括62个 PR,感谢各位贡献者:
- mlycore
- xuanyuan300
- wbtlb
- windghoul
- lltgo
- tuichenchuxin
- dongzl
[下载链接] (github.com/database-me…)
邮件列表 | groups.google.com/g/database-… |
---|---|
英文社区双周会(2022年2月16日起),周三 9:00 AM PST | meet.google.com/yhv-zrby-py… |
中文社区双周会(2022年4月27日起),周三 9:00 PM GMT+8 | meeting.tencent.com/dm/6UXDMNsH… |
微信加群小助手 | pisanix |
邮件列表 | groups.google.com/g/database-… |
Slack | join.slack.com/t/databasem… |
会议记录 | bit.ly/39Fqt3x |