otter数据同步工具

写在前面的话:新手安装otter遇到坑无数,特记录下
组件:
1.mysql ---数据库
2.zookeeper ---分布式调度工具
3.otter-manager otter管理界面web
4.otter-node otter节点工具node

安装顺序:

mysql-->zookeeper-->manager-->node
mysql       默认端口3306
zookeeper   默认端口2181,  zookeeper3.4版本以后会有一个zkadmin,默认会占用8080端口
manager     默认端口8080
node        默认端口1090

目录结构:

/otter
/otter/zookeeper
/otter/manager
/otter/node

环境安装

java-->java环境
aria2-->只再node端安装
nc-->不记得了,有个地方报错,需要安装,反正先安装上吧

yum install java vim aria2 -y

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

脚本:删除日志以及停止服务

rm -rf /otter/zookeeper/logs/*.*  #清理zk日志
rm -rf /otter/manager/logs/ #清理manager日志
rm -rf /otter/node/logs/node/*.log  #清理node日志
sh /otter/node/bin/stop.sh      #停止node
sh /otter/manager/bin/stop.sh       #停止manager
sh /otter/zookeeper/bin/zkServer.sh stop    #停止zookeeper

1.安装zookeeper

cd /
mkdir otter
cd /otter
wget http://down.starli.top/database-tools/zookeeper/apache-zookeeper-3.7.0-bin.tar.gz
tar -zxf apache-zookeeper-3.7.0-bin.tar.gz
mv apache-zookeeper-3.7.0-bin zookeeper
mv /otter/zookeeper/conf/zoo_sample.cfg /otter/zookeeper/conf/zoo.cfg
echo "admin.serverPort=8081">>/otter/zookeeper/conf/zoo.cfg    #zk3.5以后自带控制台会占用8080,和manager默认端口冲突,所以先改写,防冲突
rm -rf /otter/zookeeper/*.txt
rm -rf /otter/zookeeper/*.md

删除日志

rm -rf /otter/zookeeper/logs/*.*  #清理zk日志

启动zk

sh /otter/zookeeper/bin/zkServer.sh stop
sh /otter/zookeeper/bin/zkServer.sh start

查看zookeeper启动状态

cat /otter/zookeeper/logs/*.out

zookeeper可能会遇到的问题

zookeeper3.5以后自带管理控制台会通过jetty启动,占用8080口
决绝方法:
(1).删除jetty。
(2)修改端口。
修改方法的方法有两种,一种是在启动脚本中增加 -Dzookeeper.admin.serverPort=你的端口号.一种是在zoo.cfg中增加admin.serverPort=没有被占用的端口号
(3)停用这个服务,在启动脚本中增加"-Dzookeeper.admin.enableServer=false"
(4)进入data目录下修改zoo.cfg文件。在文件最后一行添加admin.serverPort=8123

2.manager

a.步骤一

cd /otter
wget http://down.starli.top/database-tools/otter/manager.deployer-4.2.18.tar.gz
wget http://down.starli.top/database-tools/otter/otter-manager-schema.sql
wget http://down.starli.top/database-tools/otter/otter-system-ddl-mysql.sql
mkdir manager
tar -zxf manager.deployer-4.2.18.tar.gz -C manager

b.步骤二
新建数据,一般不用老数据库,会报错,不知道啥情况。

依次导入otter-manager-schema.sql和otter-system-ddl-mysql.sql

编辑配置文件

vim /otter/manager/conf/otter.*
修改两处
otter.domainName = 127.0.0.1   #改为外网IP,后面node配置里面也需要填这IP,也可以填写域名
otter.port = 8080   #修改8080->8088(其他端口都行,没被占用的都行)
otter.zookeeper.cluster.default = 127.0.0.1:2181   # zookeeper的IP和端口,如果zookeeper和manager在同一服务器就不用管了
otter.database.driver.url = jdbc:mysql://127.0.0.1:3306/otter  #如果后面在面板验证数据编码一直不通过,就尝试加一个 ?useSSL=false,关闭数据库SSL验证
otter.database.driver.username = root
otter.database.driver.password = otter

查看配置文件

cat /otter/manager/conf/otter.*

一键命令

rm -rf /otter/manager/logs/ #清理manager日志
sh /otter/manager/bin/stop.sh       #停止manager
sh /otter/manager/bin/startup.sh    #启动manager
cat /otter/manager/logs/manager.log  #查看日志

访问地址:

外网ip:port  或者
域名:port

manager可能遇到的问题

问题一:http报错503错误

原因:一般是配置文件或者数据库问题,依次排查
方案:1.检查otter配置文件件,外网IP是否修改
     2.端口是否被占用,修改8080->8088(其他端口都行,没被占用的都行)
问题二:HTTP ERROR 500
Problem accessing /channelList.htm. Reason:
    Failed to invoke Valve[#2/3, level 3]: com.alibaba.citrus.turbine.pipeline.valve.PerformTemplateScreenValve#231df705:PerformTemplateScreenValve
原因:数据库链接信息报错,检查权限问题====
解决:1.检查配置连接信息 /otter/manager/conf/otter.*
     2.检查mysql账户的用户权限

问题3:manager面板报错
报错:WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
原因:Mysql开启了ssl验证,关闭就好了
解决方案:数据库连接信息关闭ssl
修改/otter/manager/conf/otter.*
   jdbc:mysql://localhost:3306/testdb?useSSL=false

问题4:如果在遇到添加数据源的时候,一直提示编码报错,
mysql例子: jdbc:mysql://10.20.144.15:3306
oracle例子 : jdbc:oracle:thin:@10.20.144.29:1521:OINTEST
media例子 : jdbc:mysql://groupKey=key (更改 key)
后面直接加上
?useSSL=false
例如: jdbc:mysql://10.20.144.15:3306?useSSL=false,一般就通过了

node安装

写在配置前面的话:
node安装需要manager生成的一些参数
1.添加zookeeper管理节点: xxx.xxx.xxx.xxx:2181,实际zookeeper 外网Ip如果同一台服务器可以用127.0.0.1
2.添加一个node,填写端口2088就行了,完成以后这里生成的node的ID,就是下面要用的nid,再启动node

node一键安装命令

yum install aria2 java -y
mkdir /otter
cd /otter
mkdir node
wget http://down.starli.top/database-tools/otter/node.deployer-4.2.18.tar.gz
tar -zxf node.deployer-4.2.18.tar.gz -C node

修改nid -- 需要现在manager添加生成id,再写入

一般添加的第一台默认生成的id为1,为了方便我就直接写入了
echo "1" >/otter/node/conf/nid

修改zk连接端口

vi /otter/node/conf/otter.*
otter.manager.address= xx.xxx.xxx.xx:1099 这个IP是你manager配置文件中的外网IP

一键启动命令

rm -rf /otter/node/logs/node/*.log  #清理node日志
sh /otter/node/bin/stop.sh
sh /otter/node/bin/startup.sh
cat /otter/node/logs/node/node.log  #node日志

node可能遇到的问题

==============================================
Caused by: com.alibaba.otter.shared.common.model.config.ConfigException: nid is not set!
这个是没有nid ID ,这个iD是在manager界面添加生成的ID

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000700000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)
这个是程序内存不足造成的

node出现java.lang.OutOfMemoryError : Gc overhead limit exceeded.

解决方案:
单node建议的同步任务,建议控制下1~2wtps以下,不然内存不够用. 出现不够用时,具体的解决方案:
调大node的-Xms,-Xmx内存设置,默认为3G,heap区大概是2GB
减少每个同步的任务内存配置.
a. canal配置里有个内存存储buffer记录数参数,默认是32768,代表32MB的binlog,解析后在内存中会占用100MB的样子.
b. pipeline配置里有个批次大小设置,默认是6000,代表每次获取6MB左右,解析后在内存占用=并行度6MB3,大概也是100MB的样子.
所以默认参数,全速跑时,单个通道占用200MB的样子,2GB能跑几个大概能估算出来了

#####################jdk安装==============

jkd1.8 自行官网下载

https://www.java.com/zh-CN/download/manual.jsp

java安装

cd /otter
wget http://down.starli.top/java/jdk-7u80-linux-x64.tar.gz
tar -zxf jdk-7u80-linux-x64.tar.gz
mv jdk1.7.0_80 jdk17

编辑java文件

vim /etc/profile
修改
export JAVA_HOME=/otter/jdk17
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

#使环境变量生效
source /etc/profile

Manager日志报错

pid:2 nid:null exception:channel:can't restart by no select live node
该异常代表pipelineId = 2,select模块的node没有可用的节点.

pid:-1 nid:null exception:cid:2 restart recovery successful for rid:-1
该异常代表channelId = 2,成功发起了一次restart同步任务的操作.

pid:-1 nid:null exception:nid:2 is dead and restart cids:[1,2]
该异常代表node id = 2,因为该node挂了,触发了channelId = 1 / 2的两个同步任务发起restart同步任务的操作. (一种failover的机制)

pid:3 nid:2 exception:setl:load miss data with keys:[MemoryPipeKey[identity=Identity[channelId=2,pipelineId=3,processId=8128],time=1659345913389,dataType=DB_BATCH]]

可能会用到的命令

查看程序进程

ps -aux | grep node
top -u root  #查看root下进程

查看端口

lsof -i 8080
netstat -lnpt|grep 8080

查看进程PID

ps -ef   或者 ps -aux

强制结束进程

kill -s 9 PID

标签

发表评论