orchestrator介绍3.4 web API 的使用
目录
使用 web API
API使用简单举例
查看所有的API
实例 JSON 详解
API使用举例
使用 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 服务器。该示例后面是字段细分:
{"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使用举例
- 获取有关集群的一般信息:
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
没有二进制日志记录的主机:
curl -s "http://my.orchestrator.service.com/api/cluster/alias/my_cluster" | jq '.[] | select(.LogBinEnabled==false) .Key.Hostname' -r
my_cluster
找到的 master的直接副本:
curl -s "http://my.orchestrator.service.com/api/cluster/alias/my_cluster" | jq '.[] | select(.ReplicationDepth==1) .Key.Hostname' -r
或者:
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
:
curl -s "http://my.orchestrator.service.com/api/cluster/alias/my_cluster" | jq '.[] | select(.MasterKey.Hostname!="") | select(.Replicas!=[]) .Key.Hostname'