-
Notifications
You must be signed in to change notification settings - Fork 413
0.0_QuickStart
-
a. DataLink为纯java编写,windows/linux/Mac均可支持,建议linux
b. jdk建议使用1.8以上的版本,稳定可靠,目前DataLink使用1.8版本整个DataLink数据同步由Manager和Worker两部分组成,分别需要预先进行安装
注:受限于架构设计,Manager提供的部分页面操作,需要依赖于Worker(原因:需要通过Worker调用部分插件提供的功能,只有worker提供了classloader隔离机制),所以操作manager时,请至少启动一个worker,后续我们会对该缺陷进行重构DataLink依赖于Zookeeper进行分布式调度,需要安装一个Zookeeper节点或者集群
Datalink的运行需要依赖各种配置信息、以及在运行过程中会动态产生监控和统计数据,统一保存到Mysql中
-
DataLink运行需要依赖各种配置信息统一用Mysql存储,所以需要预先安装mysql,并初始化DataLink Manager的系统表结构
a. 安装mysql
b. 初始化DataLink Manager系统表:
//下载数据库脚本文件:
wget https://github.com/ucarGroup/DataLink/blob/master/dl-biz/src/main/resources/biz/sql/ucar_datalink.sql
//导入数据库脚本:
source ucar_datalink.sqlDataLink Manager的高可用依赖于zookeeper,所以需要预先安装zookeeper.
a. manager需要在manager.properties中指定zookeeper集群地址,格式:ip:port,ip:port,... -
//直接下载 ,可访问:https://github.com/ucarGroup/DataLink,会列出所有历史的发布版本包下载方式
or
//将项目的Git仓库复制一份出来
git clone git@github.com/ucarGroup/DataLink.git
//在项目根目录下打包
mvn clean package -Dmaven.test.skip=true
打包完成后,会在根目录下产生target文件夹,下面包含dl-manager子文件夹和dl-manager.tar.gz,这里使用dl-manager子文件,也可以将dl-manager.tar.gz解压之后使用。cd /target/dl-manager/conf
//根据需要修改zk与数据库配置(1)设置zk的地址:
manager.properties里面zk的默认配置如下
zookeeper.servers=localhost:2181
注:若zk没有在本机器启动,需要将localhost设置为zk所在机器的ip
(2)设置ucar_datalink数据库的ip、用户名、密码:
datasource.properties里面数据库的默认配置如下
datasource.url=jdbc:mysql://localhost:3306/ucar_datalink
datasource.username=root
datasource.password=722b14aca98fcafe
注:将localhost设置为ucar_datalink所在机器的ip,密码可以设置为明文或密文(通过代码中DbConfigEncryption的encrypt方法加密),(上述默认配置中的密码“722b14aca98fcafe”对应的明文是“121121”,可以参考使用)。//通过脚本启动manager
sh /target/dl-manager/bin/startup.sh
注意:
Mac终端下执行sh startup.sh脚本可能会报如下日志
/var/spool/cron/root: No such file or directory
/var/spool/cron/root: Permission denied
首先查看是否存在目录/var/spool/cron,若存在则直接用管理员权限创建root文件:sudo -s touch root,若不存在该目录需要先创建。
然后,针对mac 下终端访问文件出现“Permission Denied”,解决方案如下:
一个文件有3种权限,读、写、可执行,你这个文件没有可执行权限,需要加上可执行权限。
1)终端下先 cd到该文件的目录下
2)执行命令sudo chmod a+x ./root
这样就可以打开该文件了more /target/dl-manager/logs/manager/manager.log
2018-07-19 16:22:59.350 [main] INFO com.ucar.datalink.manager.core.server.JettyServer - ##Jetty Embed Server is started.
2018-07-19 16:22:59.353 [main] INFO com.ucar.datalink.manager.core.monitor.MonitorManager - MonitorManager is started.
2018-07-19 16:22:59.362 [main] INFO com.ucar.datalink.manager.core.schedule.ScheduleService - schedule service change to standby mode success.
2018-07-19 16:22:59.362 [main] INFO com.ucar.datalink.manager.core.schedule.ScheduleServer - ##ScheduleServer is started.
2018-07-19 16:22:59.362 [main] INFO com.ucar.datalink.manager.core.server.ServerContainer - ServerContainer is started.
2018-07-19 16:22:59.362 [main] INFO com.ucar.datalink.manager.core.boot.ManagerBootStrap - ## the datalink manager is running now ......
出现类似日志,代表启动成功访问: http://ip:8080/,ip即为manager所部署机器的ip,出现DataLink的页面,即代表启动成功:
访问:http://ip:8080/userReq/login,初始用户名和密码为:admin/admin,即可完成登录。admin默认角色为超级管理员,拥有所有操作权限,开发者可以根据场景需求自定义用户角色,通过分配角色权限来进行系统的权限控制,目前的权限控制精确到按钮和action级别。
//通过脚本关闭manger
sh /target/dl-manager/bin/stop.sh
-
DataLink Worker会受DataLink Manager进行管理,所以需要预先按上述步骤安装DataLink Manager。
完成Manager安装后,需要在Manager页面为Worker配置信息
a. 由于每个Worker都属于一个分组,所以首先新增分组信息:访问Manager页面的集群管理/分组管理页面,点击新增按钮添加分组:
b.访问Manager页面的集群管理/机器管理页面,点击新增按钮添加机器:
几点说明:
分组名称和机器名称可以随意定义,方便自己记忆即可
所属分组:每个Worker节点都有唯一一个所属的分组
机器ip:对应Worker节点将要部署的机器ip
Rest端口:对应Worker节点提供rest服务的端口,建议值:8083
注:原则上允许单机多Worker指定不同的端口,通过client.id显示指定Worker,但是在非开发环境为了简化运维成本,一台机器上部署一个Worker,这样,可以通过IP反查来定位Worker。 -
//直接下载 ,可访问:https://github.com/ucarGroup/DataLink ,会列出所有历史的发布版本包下载方式
or
//将项目的Git仓库复制一份出来
git clone git@ github.com/ucarGroup/DataLink.git
//在项目根目录下打包
mvn clean package -Dmaven.test.skip=true
打包完成后,会在根目录下产生target文件夹,下面包含dl-worker子文件夹和dl-worker.tar.gz,这里使用dl-worker子文件夹。cd /target/dl-worker/conf
//根据需要修改worker.properties中的manager和zk配置,以及其他配置
(1)设置跟worker进行通信的manager配置
#datalink-manager
bootstrap.servers=localhost:8898,localhost:8899
注:若manager没有在本机启动,则需要将localhost设置为manager所在机器的ip
(2)设置zk配置
#zookeeper
zookeeper.servers=localhost:2181
注:若zk没有在本机器启动,需要将localhost设置为zk所在机器的ip
其他配置默认如下:
#worker运行模式,distributed/standalone
worker.bootMode=distributed
zookeeper.session.timeout.ms = 30000
zookeeper.connection.timeout.ms = 10000
注:Worker支持两种启动方式:standalone和distributed,前者启动时只依赖于数据库,后者启动时需要同时依赖数据库、datalink-manager和zookeepersh /target/dl-worker/bin/startup.sh
注意:
如果下载的是0.0.1版本,由于该版本设置的启动内存为5G,最大内存为6G,启动的时候可能会报错'Cannot allocate memory',需要手动修改脚本,将内存调小点。more /target/dl-worker/logs/worker/worker.log
2018-09-18 08:08:09.071 [main] INFO com.ucar.datalink.worker.core.runtime.WorkerController - Worker Controller started.
出现类似日志,代表启动成功
2018-09-18 08:08:09.071 [main] INFO com.ucar.datalink.worker.core.boot.WorkerBootStrap - ## the datalink worker is running now ......
访问: http://ip:8080,ip即为manager所部署机器的ip,查看集群管理/机器管理列表中对应的Worker节点状态,如果机器状态变为了“正常”,并且启动时间变为了你刚刚启动的时间,代表已经正常启动,否则,机器状态会是“异常”。
sh /target/dl-worker/bin/stop.sh
关闭后,可查看下Manager页面,检查下Worker节点状态.
推荐开发工具:IDEA
Jdk版本要求:8
开发库配置:ucar_datalink
(若需启动多个Manager,添加新的配置文件和启动配置即可),如下所示:
(若需启动多个worker,添加新的配置文件和启动配置即可),如下所示:
在t_dl_group表中创建一个自己的分组(不要使用别人的分组)。
或者,也可以如上述Worker_QuickStart中介绍的在页面上创建分组
在t_dl_worker表中添加自己的机器配置,主要是指定IP和GroupId(不要将自己的机器注册到别人的分组下面,以免影响他人的使用)。
或者,也可以如上述Worker_QuickStart中介绍的在页面上配置Worker
设置client.id的值为上一步中worker的id值
(注:Worker端支持两种类型的worker配置发现方式,一种是通过client.id显示指定,一种是通过IP定位,前者一般在开发环境使用,便于在一台机器上启动多个worker进程,在非开发环境采用的都是第二种方式)
设置bootstrap.servers的值为Manager的host和port,多个的话,逗号分隔
设置classloader.type的值为Dev,开发环境用Dev,部署环境用Rel
Manager需要依托于Zookeeper实现高可用,Worker端需要将任务运行状态注册到Zookeeper
开源版本只有release版本的profile,开发过程中可以根据需要添加其他版本例如dev、test、pre、prod等环境的profile。
profile的指定比较灵活,下图是开发环境所指定的dev环境,当需要去测试环境Debug时当然可以设置成测试环境的profile,指定环境是为了保证编译后的配置是对应环境的配置。
必须提前打一次包,原因在于:Task运行时,插件依赖的jar包需要从打包后的路径获取
(注:为了实现版本隔离,我们自定义了DevPluginClassLoader,不会用编译器提供的classloader)
启动Manager,启动Worker,To Meet a new world!!!
- 确保源数据库已开启binlog,并且binlog_format为ROW。
mysql> show variables like '%binlog_format%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+
- 进行一张表的数据同步测试,测试的源表名为t_dl_test_source,包含id、name、create_time、modify_time几个字段,目标表名为t_dl_test_target,字段与源表相同。
//在源库创建表 CREATE TABLE `t_dl_test_source` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `create_time` datetime NOT NULL, `modify_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; //在目标库创建表 CREATE TABLE `t_dl_test_target` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `create_time` datetime NOT NULL, `modify_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
在介质管理新增两个RDBMS数据库,分别作为源库和目标库。RDBMS数据库配置如下图所示:
schema:为目标库的名字
host配置:一个写IP,两个读IP分别作为主备(需要新增一个读IP),一个Etl-Host用于全量同步,不需要的话可以配置成跟读IP一样的(我们在公司内部的系统还集成了全量同步部分,但此次开源只有增量部分)
读写库用户配置:同时配置读写库用户是为了复用数据源,一个数据源可以作为一个同步任务的源端,亦可作为另一个同步任务的目标端
注:这里配置的数据库密码要用明文。
在增量任务-Task管理-MysqlTask新增Task,执行源端为Mysql的同步任务
a. 基础配置:选择Task所属分组和目标状态,Task名称格式为“源库名称_2_xxx”
b. Reader配置:关联数据源选择正确的源端数据库,其他参数无特殊需求可使用默认设置
c. Writer配置:选择目标库类型,其他参数无特殊需求可使用默认设置
a. 任务名称:选择上一步新建的Task
b. 目标库名称:选择要同步到的目标库
c. 源表名称:选择源端要同步的表t_dl_test_source
d. 表别名:为源表对应的目标端的表名,默认和源表名称相同,这里改为t_dl_test_target
e. 更多配置:点击“修改”,可以设置同步的映射模式(列的黑白名单、列别名)、拦截器、主键跳过等其他功能
手动在源库插入或更改数据,例如:
INSERT INTO `t_dl_test_source` (`name`, `create_time`, `modify_time`) VALUES ('release', now(), now());
然后快速在目标库进行查看数据,验证数据是否同步成功:
mysql> select * from t_dl_test_target; +----+---------+---------------------+---------------------+ | id | name | create_time | modify_time | +----+---------+---------------------+---------------------+ | 53 | release | 2018-09-19 18:30:12 | 2018-09-19 18:30:12 | +----+---------+---------------------+---------------------+