
Orchestrator是什么
Orchestrator是一个对MySQL复制提供高可用、拓扑、管理和可视化的工具,它能够主动发现当前拓扑结构和主从复制状态,也可以重构当前的拓扑结构,识别各种故障并自动恢复。
它有许多不错的功能
自动检测和监控复制状态和拓扑结构
可以使用GUI,CLI或API来检查和执行操作
支持主库的自动故障转移,并且当发生故障时,可以手动或自动修复
不依赖于MySQL的任何特定版本或分支(MySQL,Percona Server,MariaDB都支持)
支持许多不同类型的拓扑,从简单的主 - >从结构,到由数百台服务器组成的复杂多层复制
可根据当时的状态进行拓扑更改; 而不需要预先对数据库拓扑定义相对应的配置。
提供友好美观的图形界面,通过拖放即可在Web界面更改复制关系(也可以通过CLI和API操作以及更多功能)
功能演示

支持的拓扑结构和版本
GTID复制。(Oracle GTID和MariaDB GTID都支持)
SBR和RBR都可以。(Statement-Based and Row-Based Replication)
半同步复制
单主复制、级联复制
Master-Master 复制(两个节点)
5.7并行复制
使用GTID时,没有限制。
使用Pseudo-GTID时,必须启用 slave_preserve_commit_order
不支持的拓扑结构和版本
不支持3个节点以上的主主(Master-Master)复制
不支持多源复制(多主一从 Multi master replication )
不支持5.6版本的并行复制 (thread per schema)
不支持Percona XtraDB Cluster(Galera)
不支持Tungsten replicator 方式的复制
下面愉快的开始吧!

发错车了,是这辆


1 下载安装软件包
wget https://github.com/github/orchestrator/releases/download/v3.0.13/orchestrator-3.0.13-1.x86_64.rpmrpm -ivh orchestrator-3.0.13-1.x86_64.rpm
安装后的位置:/usr/local/orchestrator
建立个软连接到 usr/bin/:
ln -s usr/local/orchestrator/orchestrator usr/bin/orchestrator
Orchestrator服务端建立数据库和用户:
CREATE DATABASE IF NOT EXISTS orchestrator;GRANT ALL PRIVILEGES ON `orchestrator`.* TO 'orc_server'@'%' IDENTIFIED BY 'orc_server_pass';
2 参数配置
准备参数文件:
cp /usr/local/orchestrator/orchestrator-sample.conf.json etc/orchestrator.conf.jsonvi /etc/orchestrator.conf.json
找到如下内容修改:
{"ListenAddress": ":3333","AuthenticationMethod": "basic","HTTPAuthUser": "caihao","HTTPAuthPassword": "caihao","MySQLTopologyUser": "orc_client","MySQLTopologyPassword": "orch_client_pass","MySQLOrchestratorHost": "127.0.0.1","MySQLOrchestratorPort": 3306,"MySQLOrchestratorDatabase": "orchestrator","MySQLOrchestratorUser": "orc_server","MySQLOrchestratorPassword": "orc_server_pass","HostnameResolveMethod": "none","MySQLHostnameResolveMethod": "","RecoverMasterClusterFilters": ["*"],"RecoverIntermediateMasterClusterFilters": ["*"],"PostMasterFailoverProcesses": ["sudo -u orchestrator usr/local/orchestrator/failover.sh {failureType} {failureClusterAlias} {failedHost} {successorHost} >> tmp/orc_failover.log"],}
参数说明:
https://github.com/github/orchestrator/blob/master/go/config/config.go
"ListenAddress": ":3333", --供WebGUI访问的端口"AuthenticationMethod": "basic", --身份验证类型。可选如下参数:1 "" 无认证,2 "basic" 用户密码认证3 "multi" 类似basic,但也接受用户readonly使用任何密码。readonly用户被允许查看所有内容,但无法通过API来执行写入操作(such as stopping a replica, repointing replicas, discovering new instances etc.)"HTTPAuthUser": "caihao", --身份验证用户名"HTTPAuthPassword": "caihao", --身份验证密码"MySQLTopologyUser": "orc_client", --client 用户名密码"MySQLTopologyPassword": "orch_client_pass", --client 用户名密码"HostnameResolveMethod": "none", --所有数据库使用IP地址识别【默认是主机名识别,而且要唯一】"MySQLHostnameResolveMethod": "","MySQLOrchestratorHost": "127.0.0.1", --Orchestrator Server DB的配置信息"MySQLOrchestratorPort": 3306,"MySQLOrchestratorDatabase": "orchestrator","MySQLOrchestratorUser": "orc_server","MySQLOrchestratorPassword": "orc_server_pass","RecoverMasterClusterFilters": ["*"], --定义哪些集群可以自动failover/recover"RecoverIntermediateMasterClusterFilters": ["*"],"PostMasterFailoverProcesses": --指定故障转移后要执行的操作。(可以多次指定)。如稍后所述运行故障转移脚本。
性能优化参数:
官方建议的生产配置示例:
https://github.com/github/orchestrator/blob/master/docs/configuration-sample.md
建议修改以下参数:
"MySQLConnectTimeoutSeconds": 1, --Orch连接MySQL的超时时间,默认2秒"InstancePollSeconds": 3, --Orch探测MySQL的间隔秒数,默认5"MySQLTopologyReadTimeoutSeconds": 3, --中止拓扑mysql读取操作之前的秒数(驱动程序端)。用于除发现查询以外的所有查询 默认600"MySQLDiscoveryReadTimeoutSeconds": 3, --中止拓扑mysql读取操作之前的秒数(驱动程序端)。用于发现查询。默认10"SkipMaxScaleCheck": true, --如没配置MaxScale BinlogServer(大多数没有),设置为“true”以避免无意义的查询。默认false"RecoveryPeriodBlockSeconds": 60, --在该时间内再次出现故障,不会进行切换,避免出现并发恢复和不稳定。默认3600
根据业务可选择调整:
"CandidateInstanceExpireMinutes": 60, --多少分钟后,使用实例作为候选副本的建议已过期。默认60"MySQLOrchestratorMaxPoolConnections": 128, --Orchestrator后端的连接池的最大大小,默认128"MySQLOrchestratorReadTimeoutSeconds": 30, --后端MySQL读超时时间 默认30秒
其他一些参数:
SlaveLagQuery:检查复制延迟PreventCrossDataCenterMasterFailover: 如果为true(默认值:false),则不允许跨DC故障转移,orchestrator将尽其所能仅在同一DC内进行故障转移,否则不进行故障转移。AgentAutoDiscover:设置为true的话,orchestrator将会自动发现复制拓扑的变化PreFailoverProcesses:定义failover前orchestrator做什么操作PostFailoverProcesses:定义failover后orchestrator做什么操作ApplyMySQLPromotionAfterMasterFailover:如果设置true为, failover后将提升为master的slave独立出来DataCenterPattern:如果有多个数据中心,可以采用不同颜色标记
3 启动Orchestrator
/etc/init.d/orchestrator start
或者
cd usr/local/orchestrator && ./orchestrator http
debug模式:
cd usr/local/orchestrator && ./orchestrator --debug http
访问页面(默认是3000端口)
http://10.7.91.63:3333
4 客户端数据库上建立用户
GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orc_client'@'%' IDENTIFIED BY 'orch_client_pass';GRANT SELECT ON mysql.slave_master_info TO 'orc_client'@'%';
5 添加要监控的数据库
curl http://10.4.4.104:3333/api/discover/db1/3306
或者在页面中Discover添加

添加之后可以在Dashboard中找到。

6 切换测试
只要Orch发现了复制关系中的一个节点,就会找到对应的master或者slave,识别出拓扑结构。这里尝试下把其中一个从库切换为主库。

切换前需要再确认

切换完成。但是原主库状态是红色,因为切换后,需手动start slave继续同步

图形界面中即可启动同步操作。注意这个是原来的主库,下面的read only已经自动修改为true

启动后,新拓扑结构中主从同步正常。

总结
Orchestrator默认只提供高可用的切换功能,很多方面仍需手工介入。要真正达到生产的标准,可以用以下方式进行补充:
VIP方式:默认绑定到主库,主从切换后漂移。
DNS:基于DNS识别当前主从关系。例如 Consul 。
代理方式:DB前加一层Proxy分发读写请求。例如ProxySQL MaxScale , HAProxy 之类。
下几篇文章将继续探讨Orchestrator关于VIP切换、常规操作、高可用方式等方面的细节,欢迎关注订阅,周末愉快。




