0%

MySQL高可用复制管理工具——orchestrator

一、Orchestrator简介

简介

Orchestrator是一款开源对MySQL复制提供高可用、拓扑的可视化管理工具,采用go语言编写,它能够主动发现当前拓扑结构和主从复制状态,支持MySQL主从复制拓扑关系的调整、支持MySQL主库故障自动切换(failover)、手动主从切换(switchover)等功能。

Orchestrator后台依赖于MySQL存储元数据,能够提供Web界面展示MySQL集群的拓扑关系及实例状态,可以通过Web界面可更改MySQL实例的部分配置信息,同时也提供命令行和api接口,以便更加灵活的自动化运维管理。

Orchestrator对MySQL主库的故障切换分为自动切换和手动切换。手动切换又分为recover、force-master-failover、force-master-takeover以及graceful-master-takeover.

相比于MHA,Orchestrator更加偏重于复制拓扑关系的管理,能够实现MySQL任一复制拓扑关系的调整,并在此基础上,实现MySQL高可用。Orchestrator本身也可以部署多个节点,通过raft分布式一致性协议,保证其自身高可用性。

项目地址:https://github.com/github/orchestrator
相关文档:
GitHub的MySQL高可用性实践
MySQL高可用实现:Orchestrator在MyData中的应用与优化
MySQL高可用实现:主从结构下ProxySQL中的读写分离
MySQL高可用复制管理工具 —— Orchestrator使用
Graceful Master Switchover With ProxySQL And Orchestrator

对比

对比项 Orchestrator MHA
高可用 共享后端/raft 自身单点,且仅支持一次自动failover
数据一致性 半同步保证 半同步保证和复制reley_log
优雅主从切换 支持 支持
运维管理 支持可视化、api管理,自动发现复制拓扑,丰富的hooks,故障管理 配置复杂,至少三台MySQL实例
社区活跃 活跃 停止维护

部署

部署结构

选择Orchestrator/raft,后端数据库选择sqlite,命令行工具选择orchestrator-client
可参考:https://github.com/github/orchestrator/blob/master/docs/raft.md
node1:172.16.9.2、node2:172.16.9.3、node3:172.16.9.4

部署过程

当前版本(update:20210909):

版本
orchestrator 3.2.6 epel
orchestrator-client 3.2.6 epel
jq 1.6 epel
oniguruma 6.8.2 epel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# rpm安装
yum -y install orchestrator orchestrator-client jq oniguruma

# 配置orchestrator-client
cat >> /etc/profile.d/orchestrator-client.sh << EOF
ORCHESTRATOR_AUTH_USER=admin
ORCHESTRATOR_AUTH_PASSWORD=admin
ORCHESTRATOR_API="http://172.16.9.2:3000/api http://172.16.9.3:3000/api http://172.16.9.4:3000/api"
EOF

# 启动
cp orchestrator.conf.json /etc
mkdir -p /opt/orchestrator
mkdir -p /opt/orchestrator/raft
mkdir -p /opt/orchestrator/hooks
systemctl start orchestrator


# 访问
orchestrator-client -c raft-leader
http://leader:3000

配置

实例关联配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# orchestrator账号权限
CREATE USER 'orchestrator'@'orch_host' IDENTIFIED BY 'orch_topology_password';
GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orchestrator'@'orch_host';
GRANT SELECT ON mysql.slave_master_info TO 'orchestrator'@'orch_host'; -- 获取replication的访问凭证
GRANT SELECT ON meta.* TO 'orchestrator'@'%'; -- 获取集群的元数据信息

-- 元数据信息,用于orch的集群信息展示,目前仅作为展示,未直接使用
create database meta;
CREATE TABLE `cluster` (
`anchor` tinyint(4) NOT NULL COMMENT '集群标识',
`cluster_name` varchar(128) NOT NULL DEFAULT '' COMMENT '集群名称',
`cluster_domain` varchar(128) NOT NULL DEFAULT '' COMMENT '集群名称',
PRIMARY KEY (`anchor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 被监控的实例配置要求
# 配置用于发现从库信息
report_host和report_port

# 用于获取replication的访问凭证
master_info_repository = table

# 缩短故障检测时间 ,注意MASTER_HEARTBEAT_PERIOD的配置,默认为slave_net_timeout的一半,如果MASTER_HEARTBEAT_PERIOD大于slave_net_timeout,会出现主从频繁断开链接,导致MySQL实例错误日志增加的问题
slave_net_timeout = 4
CHANGE MASTER TO MASTER_CONNECT_RETRY=1, MASTER_RETRY_COUNT=86400, MASTER_HEARTBEAT_PERIOD=2;

# 搭配ProxySQL使用还需要默认设置实例read_only=1
# 启用GTID
Percona with GTID: promotable servers must have log_bin and log_slave_updates enabled. Replicas must be using AUTO_POSITION=1