作者简介
马听,多年 DBA 经验,对MySQL、 Redis、MongoDB、Go等有一定了解,书籍《MySQL DBA精英实战课》作者,慕课网DBA体系课(https://class.imooc.com/sale/dba)讲师
上周一开始,体系课《DBA数据库工程师》活动(原价1999,限时减500),已经有6位朋友加入学习了。
到目前,总共有139位朋友加入了学习。
上周五,第20周的内容已经更新:
如上图,有一个项目就是讲数据库上云的,这中间就涉及到MySQL数据同步到公有云上,当然,有很多方案,比如阿里云的DTS,我们这一节就来分享一下另外一种方案:通过Otter把机房MySQL数据同步到公有云。
1 测试环境准备
有一套本地MySQL和一套云上的RDS MySQL版。
并在云上的RDS上创建同步用户:
用户名:otter_user
密码:Td9Agcadf7
权限:对所有业务库都有查询权限。
并且给RDS开通外网访问地址。
2 把机房全量数据导入公有云
在机房MySQL备份业务库的所有数据
mysqldump -uroot -p --set-gtid-purged=OFF --master-data=2 onlinestore >onlinestore.sql
复制
在RDS创建业务库onlinestore。
把数据导入到RDS:
mysql -hxxx -uotter_user -pTd9Agcadf7 onlinestore <onlinestore.sql
复制
3 构造增量数据
这一步骤,是为了验证Otter是否能同步全备到创建同步这期间的增量数据。
在机房的MySQL中:
insert into t1 values (666,666,666);
复制
4 准备用来存放Otter元数据的数据库
Otter本身需要一个实例来存放元数据,我们找一个MySQL实例,先创建用户:
create user 'otter_rw'@'%' identified with mysql_native_password by 'Yd8G6qG91';
GRANT all ON otter.* TO 'otter_rw'@'%';
复制
再下载Otter的元数据并导入这个实例
wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
mysql -uroot -p otter <otter-manager-schema.sql
复制
5 安装zookeeper
Otter允许多个节点之间协同工作,通过zookeeper来解决分布式调度。
我们就来安装zookeeper
mkdir /data/zookeeper
cd /data/zookeeper
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz
tar zxvf apache-zookeeper-3.9.1-bin.tar.gz
cd apache-zookeeper-3.9.1-bin
cd conf/
cp zoo_sample.cfg zoo.cfg
复制
修改配置文件
vim zoo.cfg
复制
加入(所有zookeeper节点)
server.1=192.168.12.161:2888:3888
server.2=192.168.12.162:2888:3888
server.3=192.168.12.163:2888:3888
复制
配置myid
mkdir /tmp/zookeeper/
echo 1 >/tmp/zookeeper/myid
复制
另外两台机器分别是2和3。
启动zookeeper
/data/zookeeper/apache-zookeeper-3.9.1-bin/bin/zkServer.sh start
复制
6 Otter manager部署
下载并解压otter manager:
cd /data/otter
wget https://github.com/alibaba/otter/releases/download/otter-4.2.18/manager.deployer-4.2.18.tar.gz
mkdir manager
tar zxvf manager.deployer-4.2.18.tar.gz -C manager
复制
修改配置文件
vim data/otter/manager/conf/otter.properties
复制
修改如下内容:
## otter manager domain name
otter.domainName = 192.168.152.70
## otter manager http port
otter.port = 8080
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://192.168.152.30:3306/otter
otter.database.driver.username = otter_rw
otter.database.driver.password = xxx
## default zookeeper address
otter.zookeeper.cluster.default = 192.168.152.70:2181
复制
其中:
otter.domainName 是访问Otter的地址,建议设置成IP;
otter.database.driver 开头的这几个参数,就是Otter元数据使用的MySQL的连接信息;
otter.zookeeper.cluster.default 配置zookeeper的IP和端口。
启动otter manager:
./bin/startup.sh
复制
访问
http://IP:9090/
复制
用户名密码默认都是admin。
7 管理页面增加zookeeper
点击:机器管理-zookeeper管理-添加
将我们前面安装的zookeeper集群配置好:
8 Otter Node部署
点击:机器管理-Node管理-添加
如下图,查看节点的编号,这个编号等会要写入到node的nid文件中
安装配置node
wget https://github.com/alibaba/otter/releases/download/otter-4.2.18/node.deployer-4.2.18.tar.gz
cd /data/otter
mkdir node
tar zxvf node.deployer-4.2.18.tar.gz -C node
复制
配置nid,这个就是我们在页面上查看到的node ID
echo 1 > conf/nid
复制
修改配置文件
vim conf/otter.properties
复制
修改manager的地址
## otter arbitrate & node connect manager config
otter.manager.address = 127.0.0.1:1099
复制
启动node
./bin/startup.sh
复制
可以查看日志:
tail -f logs/node/node.log
复制
如果显示这个,就表示安装成功
2024-03-07 10:55:00.640 [main] INFO com.alibaba.otter.node.deployer.OtterLauncher - INFO ## the otter server is running now ......
复制
在到otter manager,看下节点的状态。
如果显示“已启动”,就表示node安装成功。
9 添加数据源
在机房的MySQL中创建用户:
create user 'otter_user'@'%' identified with mysql_native_password by 'Td9Agcadf7';
GRANT all ON *.* TO 'otter_user'@'%';
复制
进到Manager管理页面:
配置管理-数据源配置
先配置同步源,如下图,点击“验证连接数据源”:
用户名密码就是刚才我们创建的:
otter_user
Td9Agcadf7
再配置同步目标:
10 增加数据表配置
这一步,也就是配置要同步的库和表。
配置管理-数据表配置-添加
源端配置如下:
schema name为要同步的库;
table name是要同步的表,(.*)表示同步这个库所有表;
数据源选择我们在第9步添加的数据源。
一般配置完之后,需要点击“查询Schema&Table”按钮验证一下:
目标端
11 配置canal
配置管理-canal配置-添加
这里要注意,需要配置备份时的位点信息,可以去查看上面第2步备份文件onlinestore.sql。
12 添加Channel
同步管理-添加
13 添加pipeline
进到上一步添加的Channel中,添加pipeline。
14 添加映射关系
在点击进入到这个新建的Pipeline中
点击:添加
选择对应的数据表(前者机房MySQL,后者RDS)
15 启动同步
同步管理-在对应的Channel,点击启用
16 确定增量数据有没有同步
在RDS上,执行
select * from t1;
复制
看是否有我们在第3步构造的增量数据。
17 再测试DDL和DML同步
机房MySQL执行:
CREATE TABLE `t2024` (
`id` int NOT NULL,
`c1` int DEFAULT NULL,
`a` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
insert into t2024 values ( 666,666,666);
复制
RDS确定数据:
select * from t2024;
复制
更多MySQL实战项目,欢迎订购小编的DBA体系课。
关注公众号
回复“高可用”,可获取8篇MySQL高可用文章;
回复“DBA面试题”,可获取一份DBA面试题PDF。
点击阅读原文跳转到课程。