目录
[使用 web API](#使用 web API)
[实例 JSON 详解](#实例 JSON 详解)
使用 web API
orchestrator
提供精心设计的 Web API。
敏锐的 Web 开发人员会注意到(通过Firebug or Developer Tools)Web 界面如何完全依赖于 JSON API 请求。
开发人员可以使用 API 来实现自动化。
API使用简单举例
举例来说:
/api/instance/:host/:port
:读取并返回实例的详细信息(示例/api/instance/mysql10/3306
)/api/discover/:host/:port
:发现给定实例(正在运行的orchestrator
服务将从那里获取它并递归扫描整个拓扑)/api/relocate/:host/:port/:belowHost/:belowPort
(尝试)将一个实例移动到另一个实例下方。orchestrator
选择最佳行动方案。/api/relocate-replicas/:host/:port/:belowHost/:belowPort
(尝试)将一个实例的副本移动到另一个实例下方。orchestrator
选择最佳行动方案。/api/recover/:host/:post
:假设有需要恢复的内容,在给定实例上启动恢复。/api/force-master-failover/:mycluster
:强制在给定集群上立即进行故障转移。
查看所有的API
事实上的列表是代码,请参阅api.go(向下滚动到 RegisterRequests
)。
您可能还会喜欢查看Orchestrator-client(源代码)以了解命令行如何转换为 API 调用。
或者,只需使用Orchestrator-client作为您的 API 客户端,这就是它的用途。
实例 JSON 详解
许多 API 调用返回instance 对象,描述单个 MySQL 服务器。该示例后面是字段细分:
bash
{
"Key": {
"Hostname": "mysql.02.instance.com",
"Port": 3306
},
"Uptime": 45,
"ServerID": 101,
"Version": "5.6.22-log",
"ReadOnly": false,
"Binlog_format": "ROW",
"LogBinEnabled": true,
"LogReplicationUpdatesEnabled": true,
"SelfBinlogCoordinates": {
"LogFile": "mysql-bin.015656",
"LogPos": 15082,
"Type": 0
},
"MasterKey": {
"Hostname": "mysql.01.instance.com",
"Port": 3306
},
"ReplicationSQLThreadRuning": true,
"ReplicationIOThreadRuning": true,
"HasReplicationFilters": false,
"SupportsOracleGTID": true,
"UsingOracleGTID": true,
"UsingMariaDBGTID": false,
"UsingPseudoGTID": false,
"ReadBinlogCoordinates": {
"LogFile": "mysql-bin.015993",
"LogPos": 20146,
"Type": 0
},
"ExecBinlogCoordinates": {
"LogFile": "mysql-bin.015993",
"LogPos": 20146,
"Type": 0
},
"RelaylogCoordinates": {
"LogFile": "mysql_sandbox21088-relay-bin.000051",
"LogPos": 16769,
"Type": 1
},
"LastSQLError": "",
"LastIOError": "",
"SecondsBehindMaster": {
"Int64": 0,
"Valid": true
},
"SQLDelay": 0,
"ExecutedGtidSet": "230ea8ea-81e3-11e4-972a-e25ec4bd140a:1-49",
"ReplicationLagSeconds": {
"Int64": 0,
"Valid": true
},
"Replicas": [ ],
"ClusterName": "mysql.01.instance.com:3306",
"DataCenter": "",
"PhysicalEnvironment": "",
"ReplicationDepth": 1,
"IsCoMaster": false,
"IsLastCheckValid": true,
"IsUpToDate": true,
"IsRecentlyChecked": true,
"SecondsSinceLastSeen": {
"Int64": 9,
"Valid": true
},
"CountMySQLSnapshots": 0,
"IsCandidate": false,
"UnresolvedHostname": ""
}
实例的结构不断发展,而文档总是会落后。话虽如此,关键属性是:
Key
:实例的唯一指示符:主机和端口的组合ServerID
:MySQLserver_id
参数Version
:MySQL版本ReadOnly
:全局read_only
布尔值Binlog_format
:MySQL 全局参数binlog_format
LogBinEnabled
:是否启用二进制日志LogReplicationUpdatesEnabled
:MySQL参数是否log_slave_updates
启用SelfBinlogCoordinates
:二进制日志文件和此实例写入的位置(如SHOW MASTER STATUS
)MasterKey
:主机名和端口(如果有)ReplicationSQLThreadRuning
: 直接映射自SHOW SLAVE STATUS
'sSlave_SQL_Running
ReplicationIOThreadRuning
: 直接映射自SHOW SLAVE STATUS
'sSlave_IO_Running
HasReplicationFilters
: true 如果有任何复制过滤器SupportsOracleGTID
:如果配置为 truegtid_mode
(Oracle MySQL >= 5.6)UsingOracleGTID
:如果副本通过 Oracle GTID 复制,则为 trueUsingMariaDBGTID
:如果副本通过 MariaDB GTID 复制,则为 trueUsingPseudoGTID
:如果已知副本具有伪 GTID 坐标,则为 true(请参阅相关DetectPseudoGTIDQuery
配置)ReadBinlogCoordinates
:(复制时)从主机读取的坐标(轮询的内容IO_THREAD
)ExecBinlogCoordinates
:(复制时)现在正在执行的master坐标(SQL_THREAD
执行了什么)RelaylogCoordinates
:(复制时)当前正在执行的中继日志的坐标LastSQLError
: 复制自SHOW SLAVE STATUS
LastIOError
: 复制自SHOW SLAVE STATUS
SecondsBehindMaster
: 直接从SHOW SLAVE STATUS
' 映射Seconds_Behind_Master
"Valid": false
表示 aNULL
SQLDelay
: 配置的MASTER_DELAY
ExecutedGtidSet
:如果使用Oracle GTID,执行的GTID集ReplicationLagSeconds
:如果ReplicationLagQuery
提供,计算出的副本滞后;否则与SecondsBehindMaster
Replicas
:MySQL 副本主机名和端口列表)ClusterName
:与该实例关联的集群的名称;唯一标识簇DataCenter
:(元数据)数据中心的名称,由DataCenterPattern
配置变量推断PhysicalEnvironment
:(元数据)环境名称,由PhysicalEnvironmentPattern
配置变量推断ReplicationDepth
:与master的距离(master是0
,直接副本是1
等等)IsCoMaster
:当此实例是主-主对的一部分时为 trueIsLastCheckValid
:最后一次尝试读取此瞬间是否成功IsUpToDate
:该数据是否是最新的IsRecentlyChecked
:最近是否对此实例进行了读取尝试SecondsSinceLastSeen
:自上次成功访问此实例以来经过的时间CountMySQLSnapshots
:已知快照数量(数据由 提供orchestrator-agent
)IsCandidate
:(元数据)true
当该实例已通过CLI 命令标记为候选实例register-candidate
时。可用于崩溃恢复以优先考虑故障转移选项UnresolvedHostname
:此主机未解析的register-hostname-unresolve
名称,如CLI 命令所示
API使用举例
- 获取有关集群的一般信息:
notranslate
curl -s "http://my.orchestrator.service.com/api/cluster-info/my_cluster" | jq .
{
"ClusterName": "my-cluster-fqdn:3306",
"ClusterAlias": "my_cluster",
"ClusterDomain": "my-cluster.com",
"CountInstances": 10,
"HeuristicLag": 0,
"HasAutomatedMasterRecovery": true,
"HasAutomatedIntermediateMasterRecovery": true
}
- 查找
my_cluster
没有二进制日志记录的主机:
notranslate
curl -s "http://my.orchestrator.service.com/api/cluster/alias/my_cluster" | jq '.[] | select(.LogBinEnabled==false) .Key.Hostname' -r
my_cluster
找到的 master的直接副本:
notranslate
curl -s "http://my.orchestrator.service.com/api/cluster/alias/my_cluster" | jq '.[] | select(.ReplicationDepth==1) .Key.Hostname' -r
或者:
notranslate
master=$(curl -s "http://my.orchestrator.service.com/api/cluster-info/my_cluster" | jq '.ClusterName' | tr ':' '/')
curl -s "http://my.orchestrator.service.com/api/instance-replicas/${master}" | jq '.[] | .Key.Hostname' -r
- 查找所有中级大师
my_cluster
:
notranslate
curl -s "http://my.orchestrator.service.com/api/cluster/alias/my_cluster" | jq '.[] | select(.MasterKey.Hostname!="") | select(.Replicas!=[]) .Key.Hostname'