MySQL新高可用管理切换工具--orchestrator
1、简介
Orchestrator
英 [ɔː'kɪstreɪtə]
美 [ɔːr'kɪstreɪtə]
orchestrator是一款MySQL高可用工具,其支持:
- 集群拓扑探测
- 集群拓扑重塑
- 故障恢复
提供3种使用方式:
- 命令行
- HTTP API
- web页面
orchestator github地址 : https://github.com/openark/orchestrator
https://github.com/outbrain/orchestrator/wiki/Orchestrator-Manual
https://github.com/github/orchestrator/tree/master/docs
Orchestrator是一款开源的MySQL复制拓扑管理工具,采用go语言编写,支持MySQL主从复制拓扑关系的调整、支持MySQL主库故障自动切换、手动主从切换等功能。
Orchestrator后台依赖于MySQL或者SQLite存储元数据,能够提供Web界面展示MySQL集群的拓扑关系及实例状态,通过Web界面可更改MySQL实例的部分配置信息,同时也提供命令行和api接口,以便更加灵活的自动化运维管理。
相比于MHA,Orchestrator更加偏重于复制拓扑关系的管理,能够实现MySQL任一复制拓扑关系的调整,并在此基础上,实现MySQL高可用,另外Orchestrator自身可以部署多个节点,通过raft分布式一致性协议,保证自身的高可用。
2. 特征
Orchestrato主要有以下几个特征:
-
自动监测数据库复制的结构及其状态
-
提供了GUI,CLI,API等接口来检查复制拓扑的状态以及做一些调整的操作
-
支持自动的master failover,当复制结构的server挂掉以后(不管手动还是自动的),能够重新形成复制的拓扑结构
-
不依赖于特定的server版本或分支(MySQL, Percona Server, MariaDB or even MaxScale binlog servers)
-
支持多种类型的拓扑结构,不管是单个的主从还是成百上千个server组成的多级复制都不在话下
-
他的GUI不只是做向你report拓扑状态而已,你可以在Orchestrator web页面通过拖拽或者删除节点来改变复制拓扑(CLI和API也能做)
从下面的动态图能看出这一炫酷的功能
How Does It Work?
1.Orchestrator是用go来写的(binaries, including rpm and deb packages are available for download).
2.它本身需要自己的数据库后台来存储管理数据库集群拓扑结构的相关信息
3.至少需要一个Orchestrator后台进程,但是推荐在多个不同的主机上运行多个Orchestrator后台,这些后台节点共用一个后台数据库,但是同时只有一个是active的(可以在web界面的status菜单中查看哪一个节点是active的,也可以通过数据库中的active_node表查看)
Using MySQL As Database Backend, Isn’t That A SPOF?
中间件的HA也应该是DBA必须应该考虑到的问题,后台数据库使用单点,会不会出现SPOF呢?
答案是不是不会,而是不用担心。
如果Orchestrator后台数据库挂了,并不是我们监控的MySQL集群就不提供服务了,只是说不受orchestrator的监控了,这跟MHA的原理类似,一切照旧,就是不能执行failover,直至MHA failback。
稍显别扭的是他需要后台数据库存储,对HA也明确的支持,在这一点上,希望将来有所改变吧
Database Server Installation Requirements
Orchestrator只需要带有 SUPER , PROCESS , REPLICATION SLAVE , RELOAD权限的一个用户来连接数据库server集群,有了这些权限,他就能够检查节点的复制状态以及执行复制结构变换,他支持多种不同的方式的复制:基于binlog位点的,GTID的, 伪GTID以及binlog server
没有必要在db server上安装其他软件
Automatic Master Failure Recovery
下面是一个master挂掉然后提升一个slave为master的例子,他将会选择最新的slave来提升为master。
在上面的测试中,我们挂掉rep1(master),Orchestrator将rep4提升为new master,别的slave从新master开始复制数据
一般默认的设置是,rep1 failback回来的话,将恢复成原来rep1作为master的结构,如果不想用这个默认设置的话,可以在配置中配置 ApplyMySQLPromotionAfterMasterFailover : True
Command Line Interface
下面是使用CLI的一些例子
1.打印拓扑结构
> orchestrator -c topology -i rep1:3306 cli
rep1:3306 [OK,5.6.27-75.0-log,ROW,>>]
+ rep2:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
+ rep3:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
+ rep4:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
+ rep5:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
2.移动slave
orchestrator -c relocate -i rep2:3306 -d rep4:3306
结果如下
> orchestrator -c topology -i rep1:3306 cli
rep1:3306 [OK,5.6.27-75.0-log,ROW,>>]
+ rep3:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
+ rep4:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
+ rep2:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
+ rep5:3306 [OK,5.6.27-75.0-log,ROW,>>,GTID]
正如所想,rep2级联到rep4上去了
Long Queries
GUI上还有一个很nice的功能是他能展现整个复制结构中所有内部节点上的慢查询,而且我们还可以通过GUIkill掉这些慢查询
Orchestrator Configuration Settings
orchestraor的配置保存在 / etc / orchestrator .conf .json文件中,包含有很多的配置选项,下面抽取一些比较重要的解释一下:
1.SlaveLagQuery:检查复制延迟
2.AgentAutoDiscover:设置为true的话,orchestrator将会自动发现复制拓扑的变化
3. HTTPAuthPassword and HTTPAuthUser:避免谁都可以登录web管理页面来改变复制拓扑
4.RecoveryPeriodBlockSeconds:避免资源抖动
5.RecoverMasterClusterFilters:定义哪些集群可以自动failover/recover
6.PreFailoverProcesses:定义failover前orchestrator做什么操作
7.PostFailoverProcesses:定义failover后orchestrator做什么操作
8.ApplyMySQLPromotionAfterMasterFailover:failover后将提升为master的slave独立出来
9.DataCenterPattern:如果有多个数据中心,可以采用不同颜色标记
Limitations
orchestrator提供给我们丰富的功能,同时,我们也应该意识到他说存在的限制于不足
关键一点是一个简单的方式来让我们将一个slave提升为master,这在master需要升级的时候会用到这一功能,还有就是计划好的failover( known)
功能限制
1.slave不能手动提升为master
2.不支持多源复制
3.不支持并行复制
4.不支持与PXC联合使用
Is Orchestrator Your High Availability Solution?
如果你还在手动的处理一些复制的问题,你都可以将他们集成到你的HA架构中,或者囊括到你的failover处理逻辑中,为了实现这一切,我们只需在orchestrator中配置相关的功能即可
1.应用连接变更
a.vip处理
b.DNS变更
c.proxy server连接变更
。 。 。
2.自动将从库设置为只读,以免发生在非主节点上写出数据导致的数据一致性问题
3.隔离宕掉的master,以免crashed master failback而发生脑裂
4.是否采用半同步以免master failure而导致数据丢失,这个功能也需要手动添加到配置里面
相比MHA或者failover而言,上面这些都是需要orchestrator做的事情
orchestrator是一款开源对MySQL复制提供高可用、拓扑的可视化管理工具,采用go语言编写,它能够主动发现当前拓扑结构和主从复制状态,支持MySQL主从复制拓扑关系的调整、支持MySQL主库故障自动切换(failover)、手动主从切换(switchover)等功能。
orchestrator后台依赖于MySQL存储元数据,能够提供Web界面展示MySQL集群的拓扑关系及实例状态,可以通过Web界面可更改MySQL实例的部分配置信息,同时也提供命令行和api接口,以便更加灵活的自动化运维管理。
Orchestrator 对MySQL主库的故障切换分为自动切换和手动切换。手动切换又分为recover、force-master-failover、force-master-takeover以及graceful-master-takeover.
相比于MHA,Orchestrator更加偏重于复制拓扑关系的管理,能够实现MySQL任一复制拓扑关系的调整,并在此基础上,实现MySQL高可用。
Orchestrator本身也可以部署多个节点,通过raft分布式一致性协议,保证其自身高可用性。
Orchestrator
特性如下:
1、发现(discover)
orchestrator主动搜寻MySQL拓扑并进行映射。它能读取基本的MySQL信息,例如复制状态和配置。即使遇到故障,也可以为MySQL环境的拓扑提供流畅的可视化效果,包括复制问题。
2、重构(Refactoring)
orchestrator了解复制规则。它知道binlog文件:位置,GTID,伪GTID,Binlog服务器。
重构复制拓扑可以是将副本拖放到另一个主副本下的问题。移动副本是安全的:orchestrator将拒绝非法的重构尝试。通过各种命令行选项可以实现细粒度的控制。
3、恢复(recover)
orchestrator使用全面方法来检测主库故障和级联中间主库的故障。根据从拓扑本身获得的信息,它可以识别各种故障情况。
可通过配置,orchestrator可以选择执行自动恢复(或允许用户选择手动恢复的类型)。在内部实现中间主库的恢复。orchestrator通过Hooks进行自定义脚本支持故障切换。
我们先来安装Orchestraor体验一把。
1、部署MySQL复制环境
OS:Redhat 6.4
数据库版本为:MySQL 5.7.27
10.104.0.12 mydb01 master
10.104.0.13 mydb02 slave
10.104.0.14 mydb03 slave
2、安装orchestrator
(1)安装相关依赖包
rpm -ivh libonig2-5.9.2-4.1.x86_64.rpm libjq1-1.5-11.3.x86_64.rpm jq-1.5-7.1.x86_64.rpm
(2)安装软件
rpm -ivh orchestrator-3.1.2-1.x86_64.rpm
rpm -ivh orchestrator-cli-3.1.2-1.x86_64.rpm
[root@mydb01 orchestrator]# rpm -qa|grep orch
orchestrator-3.1.2-1.x86_64
orchestrator-cli-3.1.2-1.x86_64
检查
[root@mydb01 orchestrator]# which orchestrator
/usr/bin/orchestrator
(3)升级glibc到2.14以上版本
wget http://rpm.pbone.net/index.php3/stat/4/idpl/23589702/dir/redhat_el_6/com/glibc-2.28-7.2.x86_64.rpm
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar -xvf glibc-2.18.tar.gz
cd glibc-2.18
mkdir build && cd build && ../configure --prefix=/usr && make -j4 && make install
3、配置orchestrator后台数据库:
10.103.0.12 3307实例
CREATE DATABASE IF NOT EXISTS orchestrator;
GRANT ALL PRIVILEGES ON `orchestrator`.* TO 'orches'@'%' IDENTIFIED BY 'orches';
4、配置
cp /usr/local/orchestrator/orchestrator-sample.conf.json /etc/orchestrator/orchestrator.conf.json
修改并配置如下参数:
"MySQLTopologyUser": "orchcli", --拓扑管理用户
"MySQLTopologyPassword": "orchcli",
--拓扑管理用户的密码
"MySQLOrchestratorPort": 3307, --后台数据库端口
"MySQLOrchestratorDatabase": "orchestrator", --后台数据库名称
"MySQLOrchestratorUser": "orches", --后台数据库 访问用户
"MySQLOrchestratorPassword": "orches", --后台数据库 访问用户密码
"InstancePollSeconds": 3, -- Orchestrator连接实例的间隔秒数,默认5秒
"MySQLTopologyReadTimeoutSeconds": 3, --MySQL拓扑结构读超时时间,指发现之外的超时
"MySQLDiscoveryReadTimeoutSeconds": 3, --MySQL拓扑结构发现超时时间
"RecoveryPeriodBlockSeconds": 3600, --在该时间内再次出现故障,不会进行切换,避免出现并发恢复和不稳定。默认3600
"RecoverMasterClusterFilters": ["*"], --
"RecoverIntermediateMasterClusterFilters": ["*"],
这两项是定义自动近期故障切换的指标。
PostFailoverProcesses:定义failover后orchestrator做什么操作
4、启动orchestrator
cd /usr/local/orchestrator && ./orchestrator http &
5、启动打开web访问 orchest rator
可以自动发现,也可以手动发现:
点击Clusters--discover

完成后,MySQL的拓扑显示如下:

二、环境准备
1. IP规划
2. 设置hostname解析
三、安装部署Orchestrator
源码地址:https://github.com/github/orchestrator.git
1. 下载
2. rpm安装
安装完成后,目录在/usr/local/orchestrator
3. 修改my.cnf
MySQL配置文件加一个report_host参数,report_host为只读参数,必须重启才可生效
说明:不加report_host ,show slave hosts 不会显示host,会导致程序报错的
4. 创建数据库及用户
(1) 拓扑库操作:
CREATE DATABASE IF NOT EXISTS orchestrator; GRANT ALL PRIVILEGES ON `orchestrator`.* TO 'orche'@'%' IDENTIFIED BY 'xxxxx';
(2) 主从库操作:
如果是主从复制,主从分别操作
5. 修改orchestrator配置文件
# cd /usr/local/orchestrator/ # cp orchestrator-sample.conf.json orchestrator.conf.json # vim orchestrator.conf.json ========================================================= { "Debug": true, "EnableSyslog": false, "ListenAddress": ":3000", #http开放端口 "MySQLTopologyUser": "orche", #mysql管理账号,所有被管理的MySQL集群都需要有该账号 "MySQLTopologyPassword": "xx", #mysql管理账号密码 "MySQLTopologyCredentialsConfigFile": "", "MySQLTopologySSLPrivateKeyFile": "", "MySQLTopologySSLCertFile": "", "MySQLTopologySSLCAFile": "", "MySQLTopologySSLSkipVerify": true, "MySQLTopologyUseMutualTLS": false, "MySQLOrchestratorHost": "xx", #后台mysql数据库地址,orchestrator依赖MySQL或者SQLite存储管理数据 "MySQLOrchestratorPort": 3306, #后台mysql数据库端口 "MySQLOrchestratorDatabase": "orchestrator", #后台mysql数据库名 "MySQLOrchestratorUser": "orche", #后台mysql数据库账号 "MySQLOrchestratorPassword": "xx", #后台mysql数据库密码 ................. ] =========================================================
注意:MySQLTopologyUser 这个配置项为被管理的MySQL集群的admin账号,该账号需要有super,process,reload,select,replicatiopn slave,replicatiopn client 权限。
6. 启动orchestrator
7. 发现实例
8. 访问
Web页面:http://172.26.151.69:3000
到这里就完成orchestrator的搭建工作了。
About Me
........................................................................................................................ ● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除 ● 本文在个人微 信公众号( DB宝)上有同步更新 ● QQ群号: 230161599 、618766405,微信群私聊 ● 个人QQ号(646634621),微 信号(db_bao),注明添加缘由 ● 于 2020年12月完成 ● 最新修改时间:2020年12月 ● 版权所有,欢迎分享本文,转载请保留出处 ........................................................................................................................ ● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麦苗OCP、OCM、高可用、MySQL、DBA学习班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ........................................................................................................................ 请扫描下面的二维码来关注小麦苗的微 信公众号( DB宝)及QQ群(230161599、618766405)、添加小麦苗微 信(db_bao), 学习最实用的数据库技术。
........................................................................................................................ |