一、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