mysql otter安装部署

mysql环境已经都安装就绪node

otter用的mysql库的用户权限配置:mysql

grant all privileges on *.* to 'canal'@'%'identified by 'canal';linux

grant all privileges on *.* to'canal'@'localhost' identified by 'canal';c++

delete from user where user='';git

flush privileges;github

安装otter依赖的几个包web

aria2-1.17.1.tar.gzsql

jdk-8u111-linux-x64.rpm数据库

manager.deployer-4.2.13.tar.gzvim

node.deployer-4.2.13.tar.gz

zookeeper-3.4.10.tar.gz

1.安装jdk

直接rpm安装便可

 

2.安装zookeeper(端口2181)

tar -xvzf zookeeper-3.4.10.tar.gz -C/usr/local/

cd /usr/local/zookeeper-3.4.10

mkdir data

echo 1 > data/myid


mv conf/zoo_sample.cfg conf/zoo.cfg

编辑这个配置文件中修改一下dataDir=/usr/local/zookeeper/data

autopurge.purgeInterval=1

 

修改bin/zkEnv.sh脚本

将ZOO_LOG_DIR="."修改成ZOO_LOG_DIR="/usr/local/zookeeper/data"

将ZOO_LOG4J_PROP=”INFO,CONSOLE”修改成ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

修改bin/zkServer.sh脚本:
vi /usr/local/zookeeper/bin/zkServer.sh
将ZOOBIN="${BASH_SOURCE-$0}" 修改成ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`

修改bin/zkCli.sh脚本:
vi /usr/local/zookeeper/bin/zkCli.sh
将ZOOBIN="${BASH_SOURCE-$0}" 修改成ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`

创建软链接
ln -s /usr/local/zookeeper/bin/zkServer.sh /usr/local/bin/zk-server
ln -s /usr/local/zookeeper/bin/zkCli.sh/usr/local/bin/zk-cli

 

启动:zk-server start
关闭:zk-server stop

3.安装manager

tar -xvzf manager.deployer-4.2.13.tar.gz -C/soft/otter/manager/

 

获取初始化数据库脚本

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

 

执行

mysql -uroot -poracle <otter-manager-schema.sql

 

cd /soft/otter/manager/conf

vim otter.properties

========================================

## otter manager domain name #修改成正确访问ip(内网访问配置内网地址外网访问配置外网地址),生成URL使用

otter.domainName = 172.16.32.152

## otter manager http port

otter.port = 8080

## 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://172.16.32.104:3307/otter

otter.database.driver.username = canal

otter.database.driver.password = canal

 

## default zookeeper address,修改成正确的地址,手动选择一个地域就近的zookeeper集群列表,zookeeper默认端口 2181

otter.zookeeper.cluster.default = 172.16.32.152:2181

========================================

其余暂时不用改

 

启动manager

/usr/local/manager/bin/startup.sh

 

观察/usr/local/manager/logs/manager.log

最后几行输出

[root@host-172-16-32-152 manager]# tail -flogs/manager.log

OpenJDK 64-Bit Server VM warning: ignoringoption MaxPermSize=128m; support was removed in 8.0

2018-02-10 23:10:17.962 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## start themanager server.

2018-02-10 23:10:26.029 [] INFO com.alibaba.otter.manager.deployer.JettyEmbedServer - ##Jetty EmbedServer is startup!

2018-02-10 23:10:26.029 [] INFO com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## the managerserver is running now ......说明正常启动

 

测试用网页访问172.16.32.152:8080正常便可

 

 

node部分:

4.aria2安装配置

它是一个文件通道来保证须要同步的数据经过极快的速度同步到须要同步的服务器上

须要提早安装gcc相关包

yum install gcc

yum install gcc-c++

tar -xvzf aria2-1.17.1.tar.gz -C/soft/otter/aria2/

cd /soft/otter/aria2/aria2-1.17.1

./configure

make

make install

 

验证是否安装成功

aria2c -v

 

 

5.安装node

#mkdir /usr/local/node

tar -xvzf node.deployer-4.2.13.tar.gz  -C /usr/local/node

cd /usr/local/node

#nid配置node的ID多个node协同工做时不能重复

echo 1 > conf/nid

修改配置文件

vim conf/otter.properties

主要确认manager地址是否正确

## otter arbitrate & node connectmanager config

otter.manager.address = 172.16.32.152:1099

配置完成以后咱们不要着急启动node,由于启动了node要是manager没有配置是无法创建链接的,顺序是先配置好manager在开启node.

6.部署canal

官网地址:https://github.com/alibaba/canal/releases #下载canal.deployer

mkdir/usr/local/canal
tar zxvf canal.deployer-1.0.24.tar.gz -C /usr/local/canal

7.关联manager,node,zookeeper

(1)网页访问172.16.32.152:8080

点击右上角图标

默认超管用户名密码都是admin

 

选择机器管理添加zookeeper

 

选择机器管理添加node

配置好node的一些参数

·      机器名称:能够随意定义,方便本身记忆便可

·      机器ip:对应node节点将要部署的机器ip,若是有多ip时,可选择其中一个ip进行暴露. (ip是整个集群通信的入口,实际状况千万别使用127.0.0.1,不然多个机器的node节点会没法识别)

·      机器端口:对应node节点将要部署时启动的数据通信端口,建议值:2088

·      下载端口:对应node节点将要部署时启动的数据下载端口,建议值:9090

·      外部ip :对应node节点将要部署的机器ip,存在的一个外部ip,容许通信的时候走公网处理。

·      zookeeper集群:为提高通信效率,不一样机房的机器可选择就近的zookeeper集群.

启动node

bin/startup.sh

root@host-172-16-32-152 node]# catlogs/node/node.log

OpenJDK 64-Bit Server VM warning: ignoringoption MaxPermSize=128m; support was removed in 8.0

2018-02-10 23:34:02.538 [main] WARN com.alibaba.otter.shared.common.utils.AddressUtils - Failed to retrivinglocal host ip address, try scan network card ip address. cause:host-172-16-32-152: host-172-16-32-152: Name or service not known

2018-02-10 23:34:02.570 [main] WARN com.alibaba.otter.shared.common.utils.AddressUtils - Failed to retrivinglocal host ip address, try scan network card ip address. cause:host-172-16-32-152: host-172-16-32-152: Name or service not known

2018-02-10 23:34:02.630 [main] INFO  com.alibaba.otter.node.deployer.OtterLauncher- INFO ## the otter server is running now ......

NODE 启动成功

配置单向复制链路:

 

 

 

先在源库和目标库新建一个测试表

table级别写表名便可,在验证链接表和下面的schema&table这里都能正常经过

schema级别复制写.*便可,在验证链接表这里会提示失败,可是查询schema&table是能成功的

配置canal:

同步管理

在主库中增长、修改、删除数据,在从库中会准实时跟着变动

 

附:

遇到的问题:

1、人为操做从库DDL,致使与主库的DDL冲突,报错提示表已经存在,点channel的推送按钮后状态变为挂起,数据没法正常同步,以后想尝试在主库节点drop此表,依然没法同步成功。

解决方法:

(1)   中止channel

(2)   编辑pipeline,选择高级选项,勾选跳过DDL异常

 

2、增量数据同步问题

源端表数据不停增长

此时须要在此基础上先进行数据初始化,而后使用otter新建的channel来同步增量数据

(1)   使用mysqldump导出表数据并记录当前位置

(2)   导入目标数据库表中

 

(3)   编辑channel中的canal里的位点信息

(4)   启动对应的channel将增量数据补齐

##

存在问题:一、添加新库没法同步

                     解决办法:主从手动建立须要的DB,主库添加的表及数据便可同步

                二、删除DB不一样步也不报错

                     解决方法:手动删除MS便可

                三、主库添加新库表及数据,在管理端CHANNEL中显示挂起

             

            四、出现数据冲突解决办法:具体看监控日志信息.

             

                    

                     从新点”解挂”能够,不选择跳过DDL异常是没法解挂

##更多细节等待测试,数据一致性测试等

3.双主部署

一、机器管理配置zk

配置2个node节点

最后可见配置:

数据源配置:

配置管理 -->  数据源配置,配置104机、11机两个MySQL 数据源

数据表配置:

配置管理 -->  数据表配置,配置A机、B机两个MySQL 数据源所须要同步的数据表(本身的数据库,如hll),其中table name配置若是想同步全部表则配置为.*,不然则配置对应表名便可

配置后如图

Canal配置

canal看做是AB两机的从库便可,github上解释道,canal模拟mysql slave的交互协议,假装本身为mysql slave,向mysql master发送dump协议。

配置管理 -->  canal配置,配置A机、B机两个canal。实质上两个canal分别运行在AB两机上的Node节点上。配置以下,其余使用默认配置。

同步任务配置

同步管理 --> Channel管理,添加一个Channel

添加两个Pipeline,如图是其中一个方向,另一个方向SelectLoad机器相反。canal选择与Node机器选择一致方向,即要与Select机器同样。选择其中一个Pipeline做为主站点,并在高级设置中勾选支持ddl同步,另一个主站点勾选否,支持ddl同步选择否

另一个pipeline

添加映射关系列表

104到11关系

11到104关系

最后启动:

(1)   基本原则

wget https://raw.github.com/alibaba/otter/master/node/deployer/src/main/resources/sql/otter-system-ddl-mysql.sql

获取两端的初始化脚本建立retl库

测试一下复制

根据文档中说的是,只能在主站点上执行ddl操做,非主站点上

目前遇到的问题:

(1)没主键的表

没有主键的表复制会出现数据混乱的状况(很简单的测试已经测试出来了)

出现重复数据

目前云平台上知道的比较关键的没有主键的表就是首页统计的最后数据表

(2)只能在当前的主站点上执行DDL语句

建表试过了,能够复制到非主站点上去,非主站点上建表等DDL语句是没法复制的

而且在主站点上若是有建库操做,非主站点上没法复制建库操做

(3)支持部分ddl语句

支持create table / drop table / alter table /truncate table / rename table / create index / drop index,其余类型的暂不支持

 

这个不能复制,已经测试过了,包括create user也不能,那么数据库里若是建立新用户的话,目标表就只能从新全表导入了,比较麻烦,修改密码的话可使用update+flush privileges来实现

 

(4)因为第三点问题不支持复制建立触发器的语句,因此使用pt-osc进行修改也许是能够被复制的。。。