阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于阿里巴巴开源的分布式数据同步系统安装配置文档otter

134次阅读
没有评论

共计 13100 个字符,预计需要花费 33 分钟才能阅读完成。

otter 项目开源地址:https://github.com/alibaba/otter

canal 项目开源地址:https://github.com/alibaba/canal

我们的用这个系统的背景:主要是做异地容灾,可是我们需要的现网的数据需要同步到容灾区。

工作原理:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

原理描述:

1. 基于 Canal 开源产品,获取数据库增量日志数据。什么是 Canal, 请点击

2. 典型管理系统架构,manager(web 管理)+node(工作节点)

a. manager 运行时推送同步配置到 node 节点

b. node 节点将同步状态反馈到 manager 上

3. 基于 zookeeper,解决分布式状态调度的,允许多 node 节点之间协同工作.

组件解释:

canal:

什么是 canal?otter 之前开源的一个子项目,开源链接地址:http://github.com/alibaba/canal

定位:基于数据库增量日式解析,提供增量数据订阅 & 消费,目前主要支持了 mysql

工作原理:

原理相对简单:类似 MYSQL 原有的主从复制机制。

1.canal 模拟 mysql slave 的交互协议,伪装自己为 mysql slave,想 mysql master 发送 dump 协议

2.mysql master 收到 dump 请求,开始推送 binary log 给 slave(也就是 canal)

3.canal 解释 binary log 对象(原始为 byte 流)

相关文档:

See the wiki page for : wiki 文档

环境配置:

canal、otter 依赖 jdk 环境、node 依赖 aria2 启动:

apt-get update && apt-get install default-jdk aria2 -y

组件安装配置:

canal:

a. canal 原理基于 mysql  binlog 技术;需要 binlog 的支持,而且 log 的 format 格式为 ROW:

[mysqld]

log-bin=mysql-bin #添加这一行就 ok

binlog-format=ROW #选择 row 模式

server_id=1 #配置 mysql replaction 需要定义,不能和 canal 的 slaveId 重复

b. 授权 slave 同步:

CREATE USER canal IDENTIFIED BY ‘canal’;

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘canal’@’%’;

或者:GRANT ALL PRIVILEGES ON *.* TO ‘canal’@’%’ ;

FLUSH PRIVILEGES;

解压直接使用。

配置文件:

vi conf/example/instance.properties

#################################################

## mysql serverId

canal.instance.mysql.slaveId = 1234

# position info,需要改成自己的数据库信息

canal.instance.master.address = 127.0.0.1:3306  #指定 master 的 ip:port

canal.instance.master.journal.name =  #配置 binlog 的 file 可以不用配置(默认是以当前启动)

canal.instance.master.position =          #配置 binlog 的 postion 可以不用配置(默认是以当前启动)

canal.instance.master.timestamp =

#canal.instance.standby.address =

#canal.instance.standby.journal.name =

#canal.instance.standby.position =

#canal.instance.standby.timestamp =

# username/password,需要改成自己的数据库信息

canal.instance.dbUsername = canal    #配置为授权的账号

canal.instance.dbPassword = canal    #配置授权的密码

canal.instance.defaultDatabaseName =  #可以指定数据库

canal.instance.connectionCharset = UTF-8  #配置编码格式

# table regex

canal.instance.filter.regex = .*\\..*

#################################################

启动、停止:

bin/startup.sh  bin/stop.sh

zookeeper:

安装配置:

配置所有的 zk 主机的 hosts 文件

192.168.56.1  zk

192.168.56.2  re

192.168.56.3  yt

zk 配置文件:

vim conf/zoo.cfg

#################################################

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/local/zk_cluster/zookeeper-3.4.6_node1/data  #目录需要创建

#dataLogDir

# the port at which the clients will connect

clientPort=2181                        #每一个节点的 port 也不一样

server.1=zk:2887:3892              #不管是前面的 port 还是后面的 port。每一个节点都不一样

server.2=zk:2888:3893

server.3=zk:2889:3894

server.4=re:3386:3388:observer  #远端的 zkobserver 角色

server.5=re:3387:3389:observer  #远端的 zkobserver 角色

server.6=yt:2892:3895:observer  #远端的 zkobserver 角色

# the maximum number of client connections.

# increase this if you need to handle more clients

observer 配置:

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

peerType=observer  #指定此节点为 observer 类型

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/local/zk_cluster/zookeeper-3.4.6_node4/data

#dataLogDir

# the port at which the clients will connect

clientPort=2184

server.1=zk:2887:3892

server.2=zk:2888:3893

server.3=zk:2889:3894

server.4=re:2890:3890:observer

server.5=re:2891:3891:observer

server.6=yt:2892:3895:observer

# the maximum number of client connections.

# increase this if you need to handle more clients

启动、停止:

zookeeper-3.4.6_node4/bin/zkServer.sh start  zookeeper-3.4.6_node4/bin/zkServer.sh stop

注意:每一个节点都有一个唯一的 myid, 这个需要在 data 目录下创建一个 myid 文件并将本地节点对应的 server.x  x 的 id 写入 myid 中。data 目录需要建立哦

列如:第一个节点:

server.1=zk:2887:3892  只需要在 myid 文件中输入 1 即可

otter:

manager:

manager 是 web 管理界面,需要 mysql 数据库的支持,在 manager 上部署 mysql、授权。还需要原始的数据、载入原始数据;网上下载即可:

wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

配置文件:

vim conf/otter.properties

## otter manager domain name #修改为正确访问 ip,生成 URL 使用

otter.domainName = 192.168.56.4    #配置访问的域名或者 ip

## otter manager http port

otter.port = 8080                        #配置 web 访问的 port

## jetty web config xml

otter.jetty = jetty.xml

## otter manager database config,修改为正确数据库信息

otter.database.driver.class.name = com.mysql.jdbc.Driver

otter.database.driver.url = jdbc:mysql://127.0.01:3306/ottermanager  #配置 manager 链接数据库

otter.database.driver.username = otter                                                #配置连接数据库的用户名

otter.database.driver.password = otter                                                #配置连接数据库的密码

## otter communication port

otter.communication.manager.port = 1099                                        #配置 node 链接的 port

## otter communication pool size

otter.communication.pool.size = 10

## default zookeeper address,修改为正确的地址,手动选择一个地域就近的 zookeeper 集群列表

otter.zookeeper.cluster.default = 192.168.56.1:2181,192.168.56.1 :2182,192.168.56.1:2183,192.168.56.2:3384,192.168.56.2:3385,192.168.56.3:2186  #配置一个就近的 zk 群集地址 写离 manager 最近的一个也可以 例 如:192.168.56.1:2181

## default zookeeper sesstion timeout = 90s

otter.zookeeper.sessionTimeout = 90000

## otter arbitrate connect manager config

otter.manager.address = ${otter.domainName}:${otter.communication.manager.port

启动、停止:

bin/startup.sh    bin/stop.sh

访问 url:

http://192.168.168.4:8080

默认账号密码:admin/admin

node:

vim conf/otter.properties

# otter node root dir

otter.nodeHome = ${user.dir}/../

## otter node dir

otter.htdocs.dir = ${otter.nodeHome}/htdocs

otter.download.dir = ${otter.nodeHome}/download

otter.extend.dir= ${otter.nodeHome}/extend

## default zookeeper sesstion timeout = 60s

otter.zookeeper.sessionTimeout = 60000

## otter communication pool size

otter.communication.pool.size = 10

## otter arbitrate & node connect manager config

otter.manager.address = 192.168.56.4:1099  # 指定 manager 的 ip:port

启动、停止:注:node 启动需要先配置 nid,下面解释。

bin/startup.sh  bin/stop.sh

注意:这里提到一个 nid,这是 node 唯一的标识 我们如何得到这个 nid 的标识号呢?这个在 manager 上面添加的 node 产生的,下面会提到。这个 nid 文件需要在 node 的 conf 目录;也是只是添加标识号即可。nid 位于 conf 目录下。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-05/131368p2.htm

上面的是配置说明,下面的是配置过程:环境背景是两个数据库同步到异地的两个数据库:A-C、B-D。一共用了 5 台主机,192.168.64.132~134、139、140。zk 部署在 192.168.64.132~134。134 部署 3 个实例,

132、133 各部署一个实例;实例类型为 observer。node 节点也是在 192.168.64.132~134 上各配置 1 个。134 配置 2 个 canal 实例和 manager。

192.168.64.132~133、192.168.64.139~140 分别各部署一个 MySQL 实例。同步规则:139->132、140->133 其他的配置这里不说,在 manager 上配置的时候,简单说明一下。这里的服务器内部环境配置跳过。

manager 配置:

操作步骤:

1. 添加 zk 群集

2. 添加 node

3. 添加数据库:

a. 源库 jdbc:mysql://192.168.64.139:3306

b. 目标  jdbc:mysql://192.168.64.132:3306

4. 添加同步表信息:

a. 源数据表    .*

b. 目标数据表  .*

5. 添加 canal:

a. 提供数据库 IP 信息

6. 添加 channel:

7. 添加 pipeline:

a. 选择 node 节点

b. 选择 canal

8. 添加同步映射规则

a. 定义源表和目标表的同步关系

9. 启动

10. 测试数据

添加 zk 群集:机器管理 -> 添加 zookeeper 管理:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

群集列表以逗号分隔,冒号结束

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

添加 node 节点:机器管理 -> 添加 node 管理:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

机器端口建议为 2088

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

红色方框中的需要就是我们上面所说的 nid 标识

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

我们把 nid 添加到服务器的 node 里面吧,启动一下 node

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

添加数据库:这里使用默认的 test 库。源和目标库都要有相应的库:

字符集:

[client]

default-character-set=utf8

[mysqld]

character-set-server=utf8

表:

CREATE TABLE `user` (

`id` int(11) NOT NULL auto_increment COMMENT ‘ 用户 ID’,

`name` varchar(50) NOT NULL default ” COMMENT ‘ 名称 ’,

`sex` int(1) NOT NULL default ‘0’ COMMENT ‘0 为男,1 为女 ’,

PRIMARY KEY  (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

配置数据表:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

无论是目标还是源,都要有一样的库表存在

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

添加 canal:

这里是在一个服务器配置两个 canal 实例:需要考虑到 id、port 冲突:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

添加 channel:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

添加 pipelin:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

添加同步映像规则:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

开启同步:

测试数据:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

多个实例和单个实例都是一样的,在这个环境中;两个源库,用的是两个 canal 模拟 slave。不同的库关联相对应的 canal、node,即可。这里我们又想到,上面的实例只是单个库 —> 单个库。

若是多个库呢?如何破?其实都是一样的,我们可以在同一个 channal–> Pipeline–> 映射表;添加映射表即可。也可以做一个库表对应一个 channal–> Pipeline–> 映射表。方法有很多。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-05/131368.htm

otter 项目开源地址:https://github.com/alibaba/otter

canal 项目开源地址:https://github.com/alibaba/canal

我们的用这个系统的背景:主要是做异地容灾,可是我们需要的现网的数据需要同步到容灾区。

工作原理:

基于阿里巴巴开源的分布式数据同步系统安装配置文档 otter

原理描述:

1. 基于 Canal 开源产品,获取数据库增量日志数据。什么是 Canal, 请点击

2. 典型管理系统架构,manager(web 管理)+node(工作节点)

a. manager 运行时推送同步配置到 node 节点

b. node 节点将同步状态反馈到 manager 上

3. 基于 zookeeper,解决分布式状态调度的,允许多 node 节点之间协同工作.

组件解释:

canal:

什么是 canal?otter 之前开源的一个子项目,开源链接地址:http://github.com/alibaba/canal

定位:基于数据库增量日式解析,提供增量数据订阅 & 消费,目前主要支持了 mysql

工作原理:

原理相对简单:类似 MYSQL 原有的主从复制机制。

1.canal 模拟 mysql slave 的交互协议,伪装自己为 mysql slave,想 mysql master 发送 dump 协议

2.mysql master 收到 dump 请求,开始推送 binary log 给 slave(也就是 canal)

3.canal 解释 binary log 对象(原始为 byte 流)

相关文档:

See the wiki page for : wiki 文档

环境配置:

canal、otter 依赖 jdk 环境、node 依赖 aria2 启动:

apt-get update && apt-get install default-jdk aria2 -y

组件安装配置:

canal:

a. canal 原理基于 mysql  binlog 技术;需要 binlog 的支持,而且 log 的 format 格式为 ROW:

[mysqld]

log-bin=mysql-bin #添加这一行就 ok

binlog-format=ROW #选择 row 模式

server_id=1 #配置 mysql replaction 需要定义,不能和 canal 的 slaveId 重复

b. 授权 slave 同步:

CREATE USER canal IDENTIFIED BY ‘canal’;

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘canal’@’%’;

或者:GRANT ALL PRIVILEGES ON *.* TO ‘canal’@’%’ ;

FLUSH PRIVILEGES;

解压直接使用。

配置文件:

vi conf/example/instance.properties

#################################################

## mysql serverId

canal.instance.mysql.slaveId = 1234

# position info,需要改成自己的数据库信息

canal.instance.master.address = 127.0.0.1:3306  #指定 master 的 ip:port

canal.instance.master.journal.name =  #配置 binlog 的 file 可以不用配置(默认是以当前启动)

canal.instance.master.position =          #配置 binlog 的 postion 可以不用配置(默认是以当前启动)

canal.instance.master.timestamp =

#canal.instance.standby.address =

#canal.instance.standby.journal.name =

#canal.instance.standby.position =

#canal.instance.standby.timestamp =

# username/password,需要改成自己的数据库信息

canal.instance.dbUsername = canal    #配置为授权的账号

canal.instance.dbPassword = canal    #配置授权的密码

canal.instance.defaultDatabaseName =  #可以指定数据库

canal.instance.connectionCharset = UTF-8  #配置编码格式

# table regex

canal.instance.filter.regex = .*\\..*

#################################################

启动、停止:

bin/startup.sh  bin/stop.sh

zookeeper:

安装配置:

配置所有的 zk 主机的 hosts 文件

192.168.56.1  zk

192.168.56.2  re

192.168.56.3  yt

zk 配置文件:

vim conf/zoo.cfg

#################################################

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/local/zk_cluster/zookeeper-3.4.6_node1/data  #目录需要创建

#dataLogDir

# the port at which the clients will connect

clientPort=2181                        #每一个节点的 port 也不一样

server.1=zk:2887:3892              #不管是前面的 port 还是后面的 port。每一个节点都不一样

server.2=zk:2888:3893

server.3=zk:2889:3894

server.4=re:3386:3388:observer  #远端的 zkobserver 角色

server.5=re:3387:3389:observer  #远端的 zkobserver 角色

server.6=yt:2892:3895:observer  #远端的 zkobserver 角色

# the maximum number of client connections.

# increase this if you need to handle more clients

observer 配置:

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

peerType=observer  #指定此节点为 observer 类型

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/local/zk_cluster/zookeeper-3.4.6_node4/data

#dataLogDir

# the port at which the clients will connect

clientPort=2184

server.1=zk:2887:3892

server.2=zk:2888:3893

server.3=zk:2889:3894

server.4=re:2890:3890:observer

server.5=re:2891:3891:observer

server.6=yt:2892:3895:observer

# the maximum number of client connections.

# increase this if you need to handle more clients

启动、停止:

zookeeper-3.4.6_node4/bin/zkServer.sh start  zookeeper-3.4.6_node4/bin/zkServer.sh stop

注意:每一个节点都有一个唯一的 myid, 这个需要在 data 目录下创建一个 myid 文件并将本地节点对应的 server.x  x 的 id 写入 myid 中。data 目录需要建立哦

列如:第一个节点:

server.1=zk:2887:3892  只需要在 myid 文件中输入 1 即可

otter:

manager:

manager 是 web 管理界面,需要 mysql 数据库的支持,在 manager 上部署 mysql、授权。还需要原始的数据、载入原始数据;网上下载即可:

wget https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

配置文件:

vim conf/otter.properties

## otter manager domain name #修改为正确访问 ip,生成 URL 使用

otter.domainName = 192.168.56.4    #配置访问的域名或者 ip

## otter manager http port

otter.port = 8080                        #配置 web 访问的 port

## jetty web config xml

otter.jetty = jetty.xml

## otter manager database config,修改为正确数据库信息

otter.database.driver.class.name = com.mysql.jdbc.Driver

otter.database.driver.url = jdbc:mysql://127.0.01:3306/ottermanager  #配置 manager 链接数据库

otter.database.driver.username = otter                                                #配置连接数据库的用户名

otter.database.driver.password = otter                                                #配置连接数据库的密码

## otter communication port

otter.communication.manager.port = 1099                                        #配置 node 链接的 port

## otter communication pool size

otter.communication.pool.size = 10

## default zookeeper address,修改为正确的地址,手动选择一个地域就近的 zookeeper 集群列表

otter.zookeeper.cluster.default = 192.168.56.1:2181,192.168.56.1 :2182,192.168.56.1:2183,192.168.56.2:3384,192.168.56.2:3385,192.168.56.3:2186  #配置一个就近的 zk 群集地址 写离 manager 最近的一个也可以 例 如:192.168.56.1:2181

## default zookeeper sesstion timeout = 90s

otter.zookeeper.sessionTimeout = 90000

## otter arbitrate connect manager config

otter.manager.address = ${otter.domainName}:${otter.communication.manager.port

启动、停止:

bin/startup.sh    bin/stop.sh

访问 url:

http://192.168.168.4:8080

默认账号密码:admin/admin

node:

vim conf/otter.properties

# otter node root dir

otter.nodeHome = ${user.dir}/../

## otter node dir

otter.htdocs.dir = ${otter.nodeHome}/htdocs

otter.download.dir = ${otter.nodeHome}/download

otter.extend.dir= ${otter.nodeHome}/extend

## default zookeeper sesstion timeout = 60s

otter.zookeeper.sessionTimeout = 60000

## otter communication pool size

otter.communication.pool.size = 10

## otter arbitrate & node connect manager config

otter.manager.address = 192.168.56.4:1099  # 指定 manager 的 ip:port

启动、停止:注:node 启动需要先配置 nid,下面解释。

bin/startup.sh  bin/stop.sh

注意:这里提到一个 nid,这是 node 唯一的标识 我们如何得到这个 nid 的标识号呢?这个在 manager 上面添加的 node 产生的,下面会提到。这个 nid 文件需要在 node 的 conf 目录;也是只是添加标识号即可。nid 位于 conf 目录下。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-05/131368p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计13100字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中