认识和学习orchestrator之基本使用篇

  • Post author:
  • Post category:其他



01


介绍

orchestrator目前GitHub上star 4.5k+,非常适用于有多个数据中心MySQL集群的管理。该工具使用起来很简单,但能用好却不容易,其配置参数将近200个,后端存储表47张,下面将介绍orchestrator以及它的使用方法。


02


orchestrator是什么


2.1


功能

其是一个管理MySQL复制拓扑的高可用、管理、可视化的工具。会定时采集探测到的各个实例的元数据信息,并将其存储在后端的DB库中。后端库支持的DB类型有SQLite和MySQL两种。

相比较于MHA等常用管理工具,其支持高可用部署,并对故障进行一个完整的探测分析后才会做相应的故障转移,探测更精准、全面。

依赖于采集的各个实例的元数据信息,其具有如下功能和特色:


发现实例

通过指定复制集集群里任意一个节点实例,其可以主动遍历该复制集的拓扑结构,还能读取MySQL的相关信息,如复制信息、配置、状态信息等;


重构拓扑结构

对已经发现的复制集集群,其可以通过命令、图形化的拖拽等方式,对现有复制集的关系进行重构;


故障恢复

orchestrator通过一个整体的方式来探测Master或者中间库的故障,支持优雅切换、自动故障切换、手动强制切换等多种故障切换方式;


2.2 部署架构

测试环境中,使用单点即可。orchestrator本身基于 Raft 实现高可用,避免了单点故障问题。部署架构支持单点、半高可用、高可用等多种方式。关于部署架构,后面会单独介绍下。


生产推荐的部署架构


共享后端库架构

a6d2c709bc7b35d513e1756a60057cf2.png




raft部署架构

20a9a93ff24decbe94c0aeb7fb3978c2.png


03


相关配置


3.1




orchestrator后端库的配置和权限

orchestrator对各个实例的采集信息会存储在后端库中,后端库只供orchestrator自己本身使用,可做如下的配置:


MySQL

由于orchestrator会在后端创建一些表,且创建的库是由orchestrator自身使用,可以直接赋权库的all权限;

CREATE DATABASE IF NOT EXISTS orchestrator;
CREATE USER 'orch_backend'@'127.0.0.1' IDENTIFIED BY 'orch_backend_password';
GRANT ALL PRIVILEGES ON `orchestrator`.* TO 'orch_backend'@'127.0.0.1';


orchestrator.conf.json的配置

针对后端库的认证配置,使用如下参数进行配置

{
  "MySQLOrchestratorHost": "127.0.0.1",
  "MySQLOrchestratorPort": 3306,
  "MySQLOrchestratorMaxPoolConnections": 4,
  "MySQLOrchestratorDatabase": "orchestrator",
  "MySQLOrchestratorUser": "orch_backend",
  "MySQLOrchestratorPassword": "orch_backend_password",


  "MySQLOrchestratorUseMutualTLS": false,
}

还可以使用MySQLOrchestratorCredentialsConfigFile参数,指定一个类似.my.cnf文件格式的配置文件

{
  "MySQLOrchestratorCredentialsConfigFile": "/etc/mysql/orchestrator-backend.cnf",
}


## 配置文件格式
cat /etc/mysql/orchestrator-backend.cnf
[client]
user=orch_backend
password=orch_backend_password
host=127.0.0.1
port=3306



SQLite

orchestrator后端库还支持SQLite,SQLite默认已经嵌入到orchestrator,只需在配置参数中指定即可运行。

{
  "BackendDB": "sqlite",
  "SQLite3DataFile": "/var/lib/orchestrator/orchestrator.db",  
}


3.2

配置要管理的MySQL库

orchestrator在指定的探测间隔内,会对每一个管理的MySQL实例进行探测来收集相关信息,需要创建相应的账号

{
  "MySQLTopologyUser": "orch",
  "MySQLTopologyPassword": "orch",
  "MySQLTopologyCredentialsConfigFile": "",
  "MySQLTopologyUseMixedTLS": false,
}



MySQLTopologyCredentialsConfigFile参数

用法同MySQLOrchestratorCredentialsConfigFile参数


MySQLTopologyUseMixedTLS参数

如果在实例发现时,报如下错误,则因为启用了TLS,该参数默认值为true,且默认并没有在orchestrator.conf.json文件中配置,需要手动添加下并设置其为false

ERROR ReadTopologyInstance(xxxx:3306) show global status like 'Uptime': TLS requested but server does not support TLS


对应的权限

CREATE USER 'orch'@'orch_host' IDENTIFIED BY 'orch_topology_password';
GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orch'@'orch_host';
GRANT SELECT ON mysql.slave_master_info TO 'orch'@'orch_host';


-- Only for NDB Cluster
GRANT SELECT ON ndbinfo.processes TO 'orch'@'orch_host';



关于mysql.slave_master_info表的查询权限

在基于MySQL社区版本的MySQL实例中,通过读取该表的信息,获取用户名和密码,以此来重构主从关系。

但该权限不是必须的,如果生产环境中的主从账号比较固定,还可以通过ReplicationCredentialsQuery参数来配置一个查询参数,来获取用户名和密码等信息;

该参数需要返回一个单行5列的查询值,分别对应User、Password、SSLCaCert、SSLCert、SSLKey;

如果db中没有mysql.slave_master_info表或者不想给该表的select权限,则可以按照如下方式进行配置

{
    "ReplicationCredentialsQuery": "select 'rep','rep','','','';",
}


3.3 主从复制

故障探测使用MySQL拓扑本身作为信息来源,所以还需要对MySQL的复制做一些配置,以便能快速的判断。

-- 设置从库等待主库发送数据或者心跳的超时时间
set global slave_net_timeout = 4;


-- change master to 设置尝试连接的间隔秒数和尝试连接的次数
CHANGE MASTER TO MASTER_CONNECT_RETRY=1, MASTER_RETRY_COUNT=86400;



04


安装和启动

orchestrator采用golang进行编写,可以直接在官网上下载二进制包进行部署即可。


4.1 下载和安装

sudo mkdir -p /usr/local
sudo cd /usr/local
sudo tar xzfv orchestrator-3.2.6-linux-amd64.tar.gz


4.2 配置文件

orchestrator启动时,会读取一个json格式的配置文件,可以通过-config参数来指定具体的配置文件,如果不指定该参数,则orchestrator默认读取配置文件的路径依次为:

  • /etc/orchestrator.conf.json

  • orchestrator家目录下的conf/orchestrator.conf.json

  • orchestrator家目录下的orchestrator.conf.json

orchestrator的参数将近200个,大部分的配置参数可以先忽略,可以先使用orchestrator-sample.conf.json示例配置文件,并做一些简单的更改。


4.3 运行和启动

orchestrator是已编译的二进制文件,可以直接运行。

## 二进制直接运行
nohup ./orchestrator http &


## 指定配置文件运行
nohup ./orchestrator -config ./orchestrator.conf.json http &


## systemd方式运行
systemctl start orchestrator



05


故障探测

orchestrator使用整体的比较全面的方法来检测master或者intermediate master是否故障,并对故障类型做相应的分析分类。

其充分利用复制拓扑,不仅观察master本身,还观察它的replicas,如要针对一个dead master类型的判定,必须同时满足以下情况,才会将集群判定为DeadMaster:

  • 连不上master;

  • 能够连上master的副本,并且所有的副本均不能连接到master;


5.1 常见的故障分析类型

orchestrator通过分析后端采集信息,来对故障探测的类型做分析,实例采集间隔由InstancePollSeconds参数控制。

常见的故障类型分析:


DeadMasterWithoutReplicas

最近一次检查master为不可达,且没有从库;这种情况说明master是一个故障单点。


DeadMaster

最近一次检查master为不可达、且其所有的从库最近一次检查都可达、从库全无复制;这种情况说明master故障,如果配置了自动故障转移,则会执行。


DeadMasterAndReplicas

最近一次检查master为不可达、且其所有的从库最近一次检查都不可达、从库全无复制;这种情况可能是orchestrator自身的问题;


DeadMasterAndSomeReplicas

最近一次检查master为不可达、且其部分从库可达,从库全无复制;当master所在的数据中心有问题时则可能出现这种情况,如果配置了自动故障转移,则会执行;


UnreachableMasterWithLaggingReplicas

最近一次检查master为不可达、且所有的从库都有延迟;部分从库有复制;这种情况说明master可能处于濒死的边缘,等待下一个轮询的判定;


UnreachableMaster

以下两种情况均判定为该类型:

最近一次检查master为不可达、且其部分从库可达、部分从库有复制;

最近一次检查master为不可达,但部分检查有效,部分从库可达,部分从库有复制;

这种情况说明master可能处于濒死的边缘,等待下一个轮询的判定;


NoWriteableMasterStructureWarning

检查master可达,且处于只读状态,并且其有从库可达,同时配置了RecoverNonWriteableMaster参数;

这种情况很明显主库设置了只读属性,如果配置RecoverNonWriteableMaster参数为true,则orchestrator会将master的只读属性摘除;


MasterSingleReplicaNotReplicating

检查master可达,且其唯一的一个从库可达,但停止了复制;这种情况说明唯一的从库复制线程有问题;


MasterSingleReplicaDead

检查master可达,且其唯一的一个从库不可达;这种情况说明唯一的从库有问题;


AllMasterReplicasNotReplicating

检查master可达,且所有的从库可达,但都停止了复制;这种情况说明主从的复制线程有问题;


其他类型

除此以外,还有很多其他的类型,如关于半同步的、级联复制拓扑结构中的中间库状态的等等,详细的其他类型可在GetReplicationAnalysis函数中查看;



06


检查和恢复

在分析完当前MySQL的故障类型后,orchestrator会对不同的场景分析做不同的处理:


checkAndRecoverDeadMaster

针对DeadMaster、DeadMasterAndSomeReplicas场景的分析,则可能会执行checkAndRecoverDeadMaster函数,来决定是否要采取恢复流程;


checkAndRecoverNonWriteableMaster

针对NoWriteableMasterStructureWarning场景的分析,尝试使用该流程进行恢复;


checkAndRecoverGenericProblem

是一个通用的问题检查恢复,不做具体动作。针对DeadMasterAndReplicas、UnreachableMaster、UnreachableMasterWithLaggingReplicas、AllMasterReplicasNotReplicating、AllMasterReplicasNotReplicatingOrDead这些场景的分析,会使用该恢复流程做处理;

其他场景类型

除以上外,针对半同步、级联中间库、双主、MGR等场景,都会有不同的恢复流程来处理。


07


故障切换

orchestrator支持优雅切换、自动故障切换、手动强制切换等多种故障切换方式。


7.1 自动恢复

在满足故障探测、相关分析、和设置切换的条件后,orchestrator会对主库所有的从库做一个全面的综合考量,如考虑从库执行的位置点、数据中心、版本的兼容、binlog格式、是否满足相应的参数、promotion_rule规则的判定等等,来寻找一个符合设定条件的候选节点并尝试提升其为新的主库,从而完成自动故障恢复;

关于候选节点的选取流程,后面会单独介绍。


7.2 优雅的、有计划的恢复

在计划范围内的,可以通过graceful-master-takeover和graceful-master-takeover-auto这两个命令来做恢复;

graceful-master-takeover与graceful-master-takeover-auto的区别在于老主库作为新主库的从库,是否会开启复制,前者不会开启,后者会自动开启;


7.3 手动恢复

使用recover和recover-lite命令来做恢复,自动恢复也是使用该命令;

两者的区别在于recover-lite不会执行hooks定义的脚本;


7.4 手动强制恢复、故障转移

使用force-master-failover和force-master-takeover命令来强制故障恢复;


force-master-failover

丢弃master并强制启动一个故障转移,该操作是让orchestrator自己选择一个合适的从库来替换master;


force-master-takeover

丢弃master并强制启动故障转移,该操作是将人为指定的从库作为新master,区别于force-master-failover;


7.5 防止摇摆

在一些场景下,当完成一次故障恢复后,可能短时间内又发生了一次相同的故障,orchestrator通过RecoveryPeriodBlockSeconds参数来阻止下一次恢复的发生,该参数默认设置为3600秒。


7.6 故障后的ack

针对一次自动恢复后的,还可以通过ack方式确认后,让其继续执行故障恢复。

ack-all-recoveries表示ack全部的故障恢复;

ack-cluster-recoveries表示ack指定的集群故障恢复;

ack-instance-recoveries表示ack指定的实例故障恢复;


08


hooks

orchestrator支持在故障检测、故障切换之前、故障切换后等阶段自定义脚本,以通过hooks的方式来做一些额外的处理动作;

hooks支持一个数组参数,即可以在任意一个hooks中,可以定义多个脚本;


8.1 脚本处理说明

  • 如果process数组中的脚本以&结尾,则脚本将会被异步执行,执行状态会被忽略,不影响整体流程;

  • 如果process数组中的搅拌不以&结尾,则执行时脚本任意一步退出状态码不为0,则会终止整个流程;

  • hooks中指定多个脚本时,orchestrator将按照脚本定义的顺序来执行;

  • orchestrator同时也支持一些参数和执行变量,以便供自定义的脚本引用,具体可参考官方文档;


8.2 支持的hooks有如下几种


PreGracefulTakeoverProcesses

在执行graceful master takeover切换前被调用;


PreFailoverProcesses

在执行恢复动作之前被调用;


PostMasterFailoverProcesses

在Master故障成功恢复后调用;


PostIntermediateMasterFailoverProcesses

在中间master或者replication group的成员成功恢复后调用;


PostFailoverProcesses

在任意恢复成功之后调用(包括PostMasterFailoverProcesses和PostIntermediateMasterFailoverProcesses);


PostUnsuccessfulFailoverProcesses

在任意未完全成功恢复之后调用;


PostGracefulTakeoverProcesses

在执行graceful master takeover切换后被调用;

在成功执行take-master之后,执行的动作

在探测到故障时被调用;


PostTakeMasterProcesses

在成功执行take-master之后,被调用;


8.3


Hooks的参数和环境

orchestrator为所有的hooks提供failure/recovery(故障/恢复)相关信息变量,如认证失败的实例、认证提升master的实例、影响的副本、故障的类型、集群的名称等;


简单举例

## 以下为提供的部分参数,可以在脚本中以占位符的方式进行引用
{failureType}
// 失败的类型


{instanceType}
// 实例的类型,输出的值有("master", "co-master", "intermediate-master")


{isMaster} 
// 是否为master 输出的值有:(true/false)


{isCoMaster} (true/false)


{failureDescription}
// 输出故障描述


{failedHost}
// 输出失败的主机


{failedPort}
// 输出失败的端口


{failureCluster}
// 失败的集群名


{failureClusterAlias}
// 失败的集群别名


{failureClusterDomain}
// 失败的集群域名


{countReplicas} (replaces {countSlaves})
// 副本的数量,替代countSlaves


引用示例

这些信息变量可以通过环境变量或脚本中特殊引用两种方式被引用:

{
  "PreGracefulTakeoverProcesses": [
    "echo 'Planned takeover about to take place on {failureCluster}. Master will switch to read_only' >> /tmp/recovery.log",
    "scripts/send_alarm.sh &",
  ],   
}




09


简单使用

orchestrator默认监听的端口是3000,启动后,可以通过web界面进行访问。


9.1 web上的样子

通过给定一个实例后,orchestrator会根据该实例进行拓扑发现,并将拓扑架构在web界面上展示。如下图,通过给定任意一个要发现的实例,则一段时间后,orchestrator会自动探测出该实例所在集群的整个拓扑结构:

2a09120dc8bf3f639553dee4bb8d8643.png

通过访问web界面的Clusters下的Discover,如url路径如下:http://localhost:3000/web/discover,指定主从关系的任意一个实例,则orchestrator会自动发现其主从关系,并在Dashboard下展示。

9fb974cb2ac8762e6765c2d22c72c3f2.png


9.2 管理和操作方式

orchestrator相关命令的操作,有多种方式,可以通过如下来进行管理。


使用orchestrator二进制文件管理

orchestrator二进制文件本身也具有客户端命令操作的功能


使用orchestrator-client来管理

该文件是一个包裹api操作的shell脚本,其特点是不用到处部署orchestrator,其本质上是调用orchestrator提供的api来访问;

## 设置orchestrator的api环境变量
export ORCHESTRATOR_API=https://orchestrator.myservice.com:3000/api


## 部署了多个orchestrator节点(如生产环境3个节点组成raft)
export ORCHESTRATOR_API="https://orchestrator.host1:3000/api https://orchestrator.host2:3000/api https://orchestrator.host3:3000/api"


使用API方式来管理

api操作通过url的方式进行访问;


使用Web 界面来管理

通过界面的拖拽等方式来进行管理(功能有限)。


9.3 示例

查看当前所有集群的相关信息

## 使用orchestrator命令 
./orchestrator -c clusters


## orchestrator-client命令 
./orchestrator-client -c clusters 


## 调用api的方式 
curl -s http://orchestrator.myservice.com:3000/api/clusters-info|jq 


## 浏览器中使用web界面查看 
http://orchestrator.myservice.com:3000/web/clusters/



10


orchestrator常用命令

需要说明的是:

虽然大部分的命令都可以通过orchestrator、api方式进行调用,但个别命令可能只能通过orchestrator或api方式进行调用,具体可参见命令帮助文档;


10.1 查询信息相关

orchestrator提供了很多查询的命令,很多见名知意,以下只列出常用的一些命令


clusters

查询出当前orchestrator探测到的所有MySQL集群;


clusters-alias

列出当前orchestrator探测到的所有MySQL集群和别名;


all-clusters-masters

列出当前探测到的所有集群可写的master实例;


topology

通过给定的任意一个实例或集群别名,显示其整个集群的拓扑结构;


命令对应的API

## clusters
 clusters-info
 
 ## clusters-alias
 clusters-info
 
 ## all-clusters-masters
 masters
 
 ## topology
 topology/:clusterHint
 topology/:host/:port


相关示例


## 列出当前探测的所有MySQL集群
./orchestrator-client -c clusters


## 列出当前orchestrator探测到的所有MySQL集群别名
./orchestrator-client -c clusters-alias


## 列出当前探测到的所有集群可写的master实例
./orchestrator-client -c all-clusters-masters


## 通过给定的任意一个实例,显示其整个集群的拓扑结构
./orchestrator-client -c topology -i instance.belonging.to.a.topology.com


## 通过给定集群的别名,显示整个集群的拓扑结构
./orchestrator-client -c topology -alias cluster_3306


10.2 实例的发现和移除管理


discover

通过给定的一个实例,来发现它并探测其所在MySQL的集群拓扑结构;


forget

忘记一个指定的实例;说明:

  • 如果忘记的实例,仍然在主从拓扑结构中存在,则会在下一次探测时再次被发现;

  • 忘记实例操作,只是将实例的相关信息从orchestrator的后端库中移除,并不影响MySQL集群实际的主从关系;


forget-cluster

忘记指定的集群。该命令只在api中支持,可以将整个集群中所有实例全部忘记。同forget一样,只是删除存储在orchestrator后端库的信息,并不影响MySQL集群实际的主从关系;


命令对应的API

## discover
discover/:host/:port


## forget
forget/:host/:port


## forget-cluster
forget-cluster/:clusterHint


相关示例

## 发现一个实例并拓扑其所在的MySQL集群拓扑结构;
./orchestrator-client -c discover -i instance.to.discover.com:3306


## 忘记某个实例
./orchestrator-client -c forget -i instance.to.forget.com:3306


## 忘记整个集群
./orchestrator-client -c forget-cluster -alias cluster_for_forget


10.3 拓扑重构

orchestrator支持基于Oracle GTID、MariaDB GTID、Pseudo GTID等多种类型的MySQL拓扑结构,针对每一种其都提供了相应的拓扑重构命令,但最常用的还是smart重构命令,smart重构命令会根据当前拓扑结构的具体类型,调用不同的重构命令进行拓扑重构。


relocate

将一个实例重构于另一个(目标)实例之下,其目标实例几乎可以是任意一个。


relocate-replicas

将指定实例的所有或者部分副本重构于另一个(目标)实例之下,可以通过-pattern 正则来指定要匹配的部分副本(如果不指定,则影响全部),通常这样比一个个relocate重构要快。

需要说明的是:

  • 该操作并不影响指定的实例,只影响其副本或部分副本;

  • orchestrator会分多步骤来处理该指令,并不保证原子性,重构后可能有的会成功有的会失败;


take-siblings

将指定副本的所有兄弟副本重构为自己的子副本。


regroup-replicas

给定一个实例(可能是已经crashed的),挑选一个它的副本,并将其提升为master;

说明:

  • 给定的实例只能是master,且无法指定副本具体是哪一个(指定也是忽略),orchestrator会自己判断选取合适的副本来完成重构;

  • 该操作实际上是执行了RegroupReplicas函数,对当前master的所有副本依据一定的规则排序后,选出一个候选节点,并对其他剩余副本做change master操作,这在故障转移章节会介绍;

  • 该命令只支持在orchestrator中使用;


take-master

将一个副本变成其master的master,就是将主从互换下角色;

说明:

  • 该操作只影响切换的两个实例,这两个实例上的其他实例结构并不会改变;

  • 要操作实例的master必须也是一个副本;


命令对应的API

## relocate
relocate/:host/:port/:belowHost/:belowPort


## relocate-replicas
relocate-slaves/:host/:port/:belowHost/:belowPort


## take-siblings
enslave-siblings/:host/:port


## regroup-replicas
regroup-slaves/:host/:port


## take-master
enslave-master/:host/:port


相关示例


relocate示例

## relocate
./orchestrator-client -c relocate -i replica.to.relocate.com -d instance.that.becomes.its.master


relocate-replicas示例

## 现有拓扑结构
# ./orchestrator-client -c topology -alias 3200_cluster
db84.add.dbserver.com:3200 (3200_db84)     [0s,ok,5.6.51-91.0-log,rw,ROW,>>,GTID]
+ db85.add.dbserver.com:3300 (3300_db85)   [0s,ok,8.0.20-11,rw,ROW,>>,GTID]
  + db86.add.dbserver.com:3200 (3200_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3300 (3300_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3400 (3400_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]


## 执行relocate-replicas操作,将db85下的所有副本全部挂到db84下
# ./orchestrator-client -c relocate-replicas -i db85.add.dbserver.com:3300 -d db84.add.dbserver.com:3200      
db86.add.dbserver.com:3300
db86.add.dbserver.com:3400
db86.add.dbserver.com:3200


## 查看新的拓扑结构
# ./orchestrator-client -c topology -alias 3200_cluster
db84.add.dbserver.com:3200 (3200_db84)   [0s,ok,5.6.51-91.0-log,rw,ROW,>>,GTID]
+ db85.add.dbserver.com:3300 (3300_db85) [0s,ok,8.0.20-11,rw,ROW,>>,GTID]
+ db86.add.dbserver.com:3200 (3200_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
+ db86.add.dbserver.com:3300 (3300_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
+ db86.add.dbserver.com:3400 (3400_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]


take-siblings示例

## 现有拓扑结构
# ./orchestrator-client -c topology -alias 3200_cluster
db84.add.dbserver.com:3200 (3200_db84)   [0s,ok,5.6.51-91.0-log,rw,ROW,>>,GTID]
+ db85.add.dbserver.com:3300 (3300_db85) [0s,ok,8.0.20-11,rw,ROW,>>,GTID]
+ db86.add.dbserver.com:3200 (3200_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
+ db86.add.dbserver.com:3300 (3300_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
+ db86.add.dbserver.com:3400 (3400_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]

## 执行take-siblings操作(将db85下的所有兄弟副本,都挂载到db85下)
# ./orchestrator-client -c take-siblings -i db85.add.dbserver.com:3300
db85.add.dbserver.com:3300<db84.add.dbserver.com:3200

## 查看重构后的拓扑结构
# ./orchestrator-client -c topology -alias 3200_cluster                              
db84.add.dbserver.com:3200 (3200_db84)     [0s,ok,5.6.51-91.0-log,rw,ROW,>>,GTID]
+ db85.add.dbserver.com:3300 (3300_db85)   [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3200 (3200_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3300 (3300_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3400 (3400_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]


regroup-replicas示例

## 现有拓扑结构
# ./orchestrator-client -c topology -alias 3200_cluster
db84.add.dbserver.com:3200 (3200_db84)   [0s,ok,5.6.51-91.0-log,rw,ROW,>>,GTID]
+ db85.add.dbserver.com:3300 (3300_db85) [0s,ok,8.0.20-11,rw,ROW,>>,GTID]
+ db86.add.dbserver.com:3200 (3200_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
+ db86.add.dbserver.com:3300 (3300_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
+ db86.add.dbserver.com:3400 (3400_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]


## 执行regroup-replicas操作(该命令只支持使用orchestrator来操作)
# ./orchestrator -c regroup-replicas -i db85.add.dbserver.com:3300


## 查看重构后的拓扑结构
# ./orchestrator-client -c topology -alias 3200_cluster                              
db84.add.dbserver.com:3200 (3200_db84)     [0s,ok,5.6.51-91.0-log,rw,ROW,>>,GTID]
+ db85.add.dbserver.com:3300 (3300_db85)   [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3200 (3200_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3300 (3300_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]
  + db86.add.dbserver.com:3400 (3400_db86) [0s,ok,8.0.20-11,ro,ROW,>>,GTID]


take-master示例

## 查看当前拓扑(db162是一个中间主库,其包含2个从库db163和db165)
./orchestrator-client -c topology -i db161.add.dbserver.com:3000
db161.add.dbserver.com:3000     [0s,ok,5.6.36-log,rw,ROW,>>,GTID]
+ db162.add.dbserver.com:3000   [0s,ok,5.6.36-log,ro,ROW,>>,GTID]
  + db163.add.dbserver.com:3000 [0s,ok,5.6.36-log,ro,ROW,>>,GTID]
  + db165.add.dbserver.com:3000 [0s,ok,5.6.36-log,rw,ROW,>>,GTID]


## 对db163执行take-master操作(实际调换db163和db162)
## 即将dbpnew163作为db162的master -i指定要操作的实例
# ./orchestrator-client -c take-master -i db163.add.dbserver.com:3000
db163.add.dbserver.com:3000<db161.add.dbserver.com:3000


## 执行后的拓扑结构(这两个实例上的其他副本结构不变,db165实例依然还是db162的副本)
# ./orchestrator-client -c topology -i db161.add.dbserver.com:3000
db161.add.dbserver.com:3000       [0s,ok,5.6.36-log,rw,ROW,>>,GTID]
+ db163.add.dbserver.com:3000     [0s,ok,5.6.36-log,ro,ROW,>>,GTID]
  + db162.add.dbserver.com:3000   [0s,ok,5.6.36-log,ro,ROW,>>,GTID]
    + db165.add.dbserver.com:3000 [0s,ok,5.6.36-log,rw,ROW,>>,GTID]


10.4 命令的帮助

可通过以下方式获取帮助。

## 输出orchestrator命令行常用命令帮助
./orchestrator -h


## 输出orchestrator操作相关命令帮助
./orchestrator help


## 查看orchestrator某个具体命令的帮助
./orchestrator help <command>
Detailed help for a given command (e.g. "relocate")
orchestrator help relocate



11


认证与安全

当通过web或api的方式访问orchestrator时,可以通过以下方式来进行安全认证。


11.1 基本认证(basic)

指定AuthenticationMethod类型为basic,配置用户名和密码即可;

{
 "AuthenticationMethod": "basic",
 "HTTPAuthUser":         "orch",
 "HTTPAuthPassword":     "orch"
}


11.2


基本认证扩展(multi)

该认证方式同basic工作模式,但其还配置了一个用户名为readonly的用户,其密码可以是任意的;readonly用户只能查看,不能操作;

{
 "AuthenticationMethod": "multi",
 "HTTPAuthUser":         "orch",
 "HTTPAuthPassword":     "orch"
}


11.3


orchestrator-client的认证配置

如果orchestrator启用了认证,则客户端可以通过以下方式进行访问。


配置参数

## 添加配置认证的参数
export ORCHESTRATOR_AUTH_USER=username
export ORCHESTRATOR_AUTH_PASSWORD=password


执行时使用-b参数

./orchestrator-client -b username:password -c <command>


api的配置

curl时添加认证即可;

curl -u username:password -s http://orchestrator.myservice.com:3000/api/clusters-info|jq


12


总结

orchestrator通过一个整体全面的分析,对MySQL集群进行管理,支持MySQL主从复制拓扑关系的调整、主库故障切换、手动切换等,还提供了web界面展示拓扑关系图和通过拖拽的方式来操作MySQL集群。另外提供了Restful API便于集成在别的系统中,同时相比于MHA等其他管理工具,避免了单点故障等,是一个值得推荐的MySQL高可用管理和复制拓补显示工具。



版权声明:本文为ZVAyIVqt0UFji原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。