请教一下,PolarDB没用K8S,用RPM包部署的高可用主从,业务需要注意自行感知 Leader 的切换,这个有没有好的方案
目前了解到ProxySQL组件,但它监测只读是根据 select @@read_only 来判断,而PolarDB是 SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL 来查询判断,后面会不会考虑同步 @@read_only 变量呢?CREATE TABLE mysql_replication_hostgroups (
writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>=0),
check_type VARCHAR CHECK (LOWER(check_type) IN ('read_only','innodb_read_only','super_read_only','read_only|innodb_read_only','read_only&innodb_read_only')) NOT NULL DEFAULT 'read_only',
comment VARCHAR NOT NULL DEFAULT '', UNIQUE (reader_hostgroup))
这个是它的表结构,里面 check_type 默认的只有两项,自定义查询 SQL 好像需要另外配任务指定 shell 脚本去判断,要复杂一些,毕竟 ProxySQL 是对接 MySQL 的
对于PolarDB的高可用主从部署,确实需要自行感知Leader的切换。目前ProxySQL组件可以用于监测PolarDB的主从状态,但它默认只支持MySQL的@@read_only变量来判断是否为只读模式。
关于您提到的check_type字段,它是用来指定检查类型,以确定当前节点是写入节点还是读取节点。根据您的描述,check_type默认只有两项,即'read_only'和'innodb_read_only'。这意味着ProxySQL默认只能检测这两种类型的只读模式。
如果您希望使用自定义查询SQL来检测PolarDB的主从状态,可以考虑编写一个Shell脚本来实现。这个脚本可以定期运行,并执行您的自定义查询SQL,然后根据查询结果判断当前的主从状态。您可以将该脚本配置为定时任务,以便在PolarDB发生主从切换时自动触发相应的操作。
以下是一个示例Shell脚本,用于检测PolarDB的主从状态:
#!/bin/bash
# 设置数据库连接信息
HOST="your_polardb_host"
PORT="your_polardb_port"
USERNAME="your_username"
PASSWORD="your_password"
DATABASE="your_database"
# 执行自定义查询SQL
QUERY="SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL"
RESULT=$(mysql -h $HOST -P $PORT -u $USERNAME -p$PASSWORD -D $DATABASE -e "$QUERY")
# 解析查询结果,判断主从状态
if [[ $RESULT == *"writer_hostgroup"* ]]; then
echo "当前节点是写入节点"
else
echo "当前节点是读取节点"
fi
请注意,上述示例中的数据库连接信息(HOST、PORT、USERNAME、PASSWORD和DATABASE)需要根据实际情况进行替换。此外,您还可以根据实际需求对脚本进行进一步的定制和优化。
通过编写这样的Shell脚本,您可以实现对PolarDB主从状态的监控,并在主从切换时执行相应的操作。这可以帮助您更好地管理和处理PolarDB的高可用性需求。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about