Orchestrator介绍
Orchestrator(orch):go编写的MySQL高可用性和复制拓扑管理工具,支持复制拓扑结构的调整,自动故障转移和手动主从切换等。后端数据库用MySQL或SQLite存储元数据,并提供Web界面展示MySQL复制的拓扑关系及状态,通过Web可更改MySQL实例的复制关系和部分配置信息,同时也提供命令行和api接口,方便运维管理。相对比MHA来看最重要的是解决了管理节点的单点问题,其通过raft协议保证本身的高可用。GitHub的一部分管理也在用该工具进行管理。关于Orchestrator更详细的介绍可以看Github的介绍,大致的特点有:
① 自动发现MySQL的复制拓扑,并且在web上展示。
② 重构复制关系,可以在web进行拖图来进行复制关系变更。
③ 检测主异常,并可以自动或手动恢复,通过Hooks进行自定义脚本。
④ 支持命令行和web界面管理复制。
Orchestrator 安装
https://gitcode.com/gh_mirrors/or/orchestrator/tree/master
- Orchestrator下载地址
https://github.com/openark/orchestrator/releases
我这里下载的是 orchestrator-3.2.6-1.x86_64.rpm
- 下载后放入服务器自定义的目录下,然后执行以下命令
$ yum -y install jq
$ rpm ivh orchestrator-3.2.3-1.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:orchestrator-1:3.2.3-1 ################################# [100%]
......
$ rpm -ql orchestrator
/etc/systemd/system/orchestrator.service
/usr/local/orchestrator/orchestrator
/usr/local/orchestrator/orchestrator-sample-sqlite.conf.json
/usr/local/orchestrator/orchestrator-sample.conf.json
/usr/local/orchestrator/resources/bin/orchestrator-client
.....
安装完成之后,相应的目录为:
/usr/local/orchestrator
orchestrator:应用程序
*.json:默认的配置模板
resources:orchestrator相关的文件:client、web、伪GTID等相关文件。
- 在自定义的目录(/etc/mysql)下创建
orchestrator.conf.json
配置文件,用于配置 Orchestrator
配置文件主要内容:
"MySQLTopologyUser": "boo", -- 被管理的MySQL的用户
"MySQLTopologyPassword": "boo123456", -- 被管理的MySQL的密码
"MySQLOrchestratorHost": "127.0.0.1", -- orch后端数据库(orchestrator)地址 与 orchestrator在一个服务器
"MySQLOrchestratorPort": 3306,
"MySQLOrchestratorDatabase": "orchestrator", -- orch后端数据库名
"MySQLOrchestratorUser": "boo_orch", -- orch后端服务数据库用户名(明文)
"MySQLOrchestratorPassword": "boo_orch123456", -- orch后端服务数据库密码(明文)
完整的配置文件可在这里获取:https://download.youkuaiyun.com/download/HELLOMRP/87244660
运行部署
服务器环境:
三个mysql服务 分别在三台服务器
- mysql开启GTID
可以参考 mysql在线开启/关闭GTID - MySQL实例及主从结构
Master :192.168.1.16:3306
Slave1 :192.168.5.128:3306
Slave2 :192.168.5.129:3306
- hosts(位置:etc/hosts) 按需配置:
192.168.1.16 boo_mysql_1
192.168.5.128 boo_mysql_2
192.168.5.129 boo_mysql_3
创建账号
- 在orchestrator后端服务数据库(192.168.1.16)创建账号 , 用于orchestrator后台服务访问orchestrator数据库
CREATE USER 'boo_orch'@'127.0.0.1' IDENTIFIED BY 'boo_orch123456';
GRANT ALL ON orchestrator.* TO 'boo_orch'@'127.0.0.1';
orchestrator服务跟数据库在同一服务器上,所以创建用户只允许127.0.0.1访问并赋予其权限,
- 在被管理的数据库(master、slave)中创建账号,用于主从复制数据交互
CREATE USER 'boo'@'%' IDENTIFIED BY 'boo123456';
GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'boo'@'%';
GRANT SELECT ON mysql.slave_master_info TO 'boo'@'%';
GRANT SELECT ON meta.* TO 'boo'@'orc_host';
配置主从库
按照 上面 “MySQL实例及主从结构”将其配置成 一主二从即可
mysql主从配置可以参考 mysql数据库主从同步
注意不要重复创建用户
开启
./orchestrator --debug --config=/etc/mysql/orchestrator.conf.json http
运行报错: FATAL Error 1049: Unknown database 'orchestrator'
说明缺少 “orchestrator” 数据库,在 5.128上创建 orchestrator 数据库
运行报错:The MySQL server is running with the --read-only option so it cannot execute this statement
给数据库用户 boo_orch 添加数据库操作权限
在浏览器里输入orchestrator服务所在服务器IP加端口(http://192.168.1.16:3000)进入到Web管理界面
扩展-mysql配置主从复制
- 主节点需要做的工作就是创建用户并赋予
权限
,然后开启binlog
日志。 - 从服务器需要做的工作就是
配置同步日志
,指定主节点的ip,端口,用户,密码等,然后启动从节点
主节点操作
1.创建从节点用户
> create user 'slave01'@'192.168.1.66' identified by '123456';
> GRANT ALL PRIVILEGES ON *.* TO 'slave01'@'192.168.1.66';
> FLUSH PRIVILEGES;
确认一下授予权限的情况
> show grants for 'slave01'@'192.168.1.66';
GRANT USAGE ON *.* TO 'slave01'@'192.168.1.66' -- 主要是授予用户获取binlog日志的权限,这里是所有权限
2.修改mysql配置文件
> vim /etc/my.cnf -- 自己实际路径为准
- 主从复制配置
[mysqld]
...
# 启用二进制日志功能, 指定日志文件前缀为 mysql-bin
log-bin=mysql-bin
server-id=131 #和从节点不一样即可
3.重启mysql服务后 查看配置是否生效
> show master status;
# mysql 8.0.23 以上使用 SELECT VERSION();
> SHOW BINARY LOG STATUS;
File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
---|---|---|---|---|
mysql-bin.000001 | 154 | “” | “” | “” |
从节点操作
1.修改mysql配置文件
> vim /etc/my.cnf -- 自己实际路径为准
#主从复制配置
[mysqld]
...
log-bin=mysql-bin
server-id=137
2. 重启从节点mysql
3. 指定主节点信息
mysql 8.0.23 以下版本
change master to
master_host='192.168.1.66',
master_port=23306,
master_user='slave01',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=16771;
- master_host 是主节点ip
- master_user 和 master_password 是主节点创建给从节点的账号和密码
- master_log_file 和master_log_pos 根据主节点查询(
show master status;
)出来的File和Position值自行更换。
mysql 8.0.23 以上使用
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.1.66',
SOURCE_USER='slave01',
SOURCE_PASSWORD='123456',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=154;
4. 启动从节点并验证
mysql 8.0.23 以下版本
> start slave;
> show slave status;
扩展
stop slave;
reset slave;
start slave;
show slave status;
Slave_IO_Running 和 Slave_SQL_Running 是否都为YES
表示成功
如果不对,注意看日志、授权等
mysql 8.0.23 以上使用
> START REPLICA IO_THREAD;
> SHOW REPLICA STATUS;
参考:
https://blog.youkuaiyun.com/kdzandlbj/article/details/137482946
同步之前的数据
在 MySQL 主从复制中,从库不会自动同步主库中已有的数据。主从复制只会同步从配置复制开始之后的主库数据变更(如 INSERT、UPDATE、DELETE 等操作)。如果主库中已有数据,需要手动将这些数据同步到从库,然后再启动复制。
使用 mysqldump 导出和导入数据
1. 在主库上导出数据:
使用 mysqldump 工具导出主库的数据。例如,导出 mydatabase 数据库:
mysqldump -uslave01 -pslave01 --master-data=1 --single-transaction --routines --triggers --databases yourdb > yourdb.sql
–master-data=1:在导出文件中记录主库的二进制日志文件和位置。
–single-transaction:确保导出数据的一致性。
–routines 和 --triggers:导出存储过程和触发器。