12

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

 2 years ago
source link: https://zyun.360.cn/blog/?p=2169
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

二、orchestrator是什么

2.1、功能

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

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

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

发现实例

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

重构拓扑结构

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

故障恢复

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

2.2、 部署架构

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

生产推荐的部署架构

共享后端库架构

raft部署架构

三、相关配置

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_backendpassword=orch_backend_passwordhost=127.0.0.1port=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 ClusterGRANT 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;

四、安装和启动

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

4.1、下载和安装

sudo mkdir -p /usr/localsudo cd /usr/localsudo 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

五、故障探测

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函数中查看;

六、检查和恢复

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

checkAndRecoverDeadMaster

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

checkAndRecoverNonWriteableMaster

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

checkAndRecoverGenericProblem

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

其他场景类型

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

七、故障切换

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指定的实例故障恢复;

八、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 &",  ],   }

九、简单使用

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

9.1、web上的样子

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

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

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/

十、orchestrator常用命令

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

10.1、查询信息相关

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

clusters

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

clusters-alias

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

all-clusters-masters

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

topology

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

命令对应的API

## clustersclusters-info ## clusters-aliasclusters-info ## all-clusters-mastersmasters ## topologytopology/:clusterHinttopology/: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

## discoverdiscover/:host/:port ## forgetforget/:host/:port ## forget-clusterforget-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

## relocaterelocate/:host/:port/:belowHost/:belowPort ## relocate-replicasrelocate-slaves/:host/:port/:belowHost/:belowPort ## take-siblingsenslave-siblings/:host/:port ## regroup-replicasregroup-slaves/:host/:port ## take-masterenslave-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_clusterdb84.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:3300db86.add.dbserver.com:3400db86.add.dbserver.com:3200 ## 查看新的拓扑结构# ./orchestrator-client -c topology -alias 3200_clusterdb84.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_clusterdb84.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:3300db85.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_clusterdb84.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:3000db161.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:3000db163.add.dbserver.com:3000<db161.add.dbserver.com:3000 ## 执行后的拓扑结构(这两个实例上的其他副本结构不变,db165实例依然还是db162的副本)# ./orchestrator-client -c topology -i db161.add.dbserver.com:3000db161.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

十一、认证与安全

当通过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=usernameexport 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

十二、总结

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK