Skip to content

0.0_QuickStart

lulu2panpan edited this page Mar 25, 2020 · 40 revisions

概要

  • 【环境准备】

    1. 操作系统

    a. DataLink为纯java编写,windows/linux/Mac均可支持,建议linux
    b. jdk建议使用1.8以上的版本,稳定可靠,目前DataLink使用1.8版本

    2. 组成部分

    整个DataLink数据同步由Manager和Worker两部分组成,分别需要预先进行安装
    注:受限于架构设计,Manager提供的部分页面操作,需要依赖于Worker(原因:需要通过Worker调用部分插件提供的功能,只有worker提供了classloader隔离机制),所以操作manager时,请至少启动一个worker,后续我们会对该缺陷进行重构

    3. Zookeeper

    DataLink依赖于Zookeeper进行分布式调度,需要安装一个Zookeeper节点或者集群

    4. Mysql

    Datalink的运行需要依赖各种配置信息、以及在运行过程中会动态产生监控和统计数据,统一保存到Mysql中

环境安装

Manager_Quickstart

  • 【环境准备】

    1. 初始化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.sql

    2. 安装Zookeeper

    DataLink Manager的高可用依赖于zookeeper,所以需要预先安装zookeeper.
        a. manager需要在manager.properties中指定zookeeper集群地址,格式:ip:port,ip:port,...

  • 【启动步骤】

    1. 下载DataLink Manager

    //直接下载 ,可访问: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解压之后使用。

    2. 配置修改

    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”,可以参考使用)。

    3. 准备启动

    //通过脚本启动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
    这样就可以打开该文件了

    4. 查看日志

    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 ......
    出现类似日志,代表启动成功

    5. 验证

    访问: http://ip:8080/,ip即为manager所部署机器的ip,出现DataLink的页面,即代表启动成功:

    mainPage 访问:http://ip:8080/userReq/login,初始用户名和密码为:admin/admin,即可完成登录。admin默认角色为超级管理员,拥有所有操作权限,开发者可以根据场景需求自定义用户角色,通过分配角色权限来进行系统的权限控制,目前的权限控制精确到按钮和action级别。

    6. 关闭

    //通过脚本关闭manger
    sh /target/dl-manager/bin/stop.sh

Worker_Quickstart

  • 【环境准备】

    1. 安装DataLink Manager

    DataLink Worker会受DataLink Manager进行管理,所以需要预先按上述步骤安装DataLink Manager。

    2. 配置Worker

    完成Manager安装后,需要在Manager页面为Worker配置信息
    a. 由于每个Worker都属于一个分组,所以首先新增分组信息:访问Manager页面的集群管理/分组管理页面,点击新增按钮添加分组:

    group
    b.访问Manager页面的集群管理/机器管理页面,点击新增按钮添加机器:

    worker
    几点说明:
    分组名称和机器名称可以随意定义,方便自己记忆即可
    所属分组:每个Worker节点都有唯一一个所属的分组
    机器ip:对应Worker节点将要部署的机器ip
    Rest端口:对应Worker节点提供rest服务的端口,建议值:8083
    注:原则上允许单机多Worker指定不同的端口,通过client.id显示指定Worker,但是在非开发环境为了简化运维成本,一台机器上部署一个Worker,这样,可以通过IP反查来定位Worker。

  • 【启动步骤】

    1. 下载DataLink 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子文件夹。

    2. 配置修改

    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和zookeeper

    3. 准备启动

    sh /target/dl-worker/bin/startup.sh
    注意:
    如果下载的是0.0.1版本,由于该版本设置的启动内存为5G,最大内存为6G,启动的时候可能会报错'Cannot allocate memory',需要手动修改脚本,将内存调小点。

    4. 查看日志

    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 ......

    出现类似日志,代表启动成功

    5. 验证

    访问: http://ip:8080,ip即为manager所部署机器的ip,查看集群管理/机器管理列表中对应的Worker节点状态,如果机器状态变为了“正常”,并且启动时间变为了你刚刚启动的时间,代表已经正常启动,否则,机器状态会是“异常”。

    workerStatus

    6. 关闭

    sh /target/dl-worker/bin/stop.sh
    关闭后,可查看下Manager页面,检查下Worker节点状态.

Flinker_Quickstart

类似datalink-manager和datalink-worker,打包完成后,进入dl-flinker目录,修改conf/admin.properties的相关配置,然后执行bin/startup.sh即可

IDEA_Quickstart

【相关资源】

推荐开发工具:IDEA
Jdk版本要求:8
开发库配置:ucar_datalink

【搭建流程】

1. 配置Manager

(若需启动多个Manager,添加新的配置文件和启动配置即可),如下所示:

idea-1

2. 配置Worker

(若需启动多个worker,添加新的配置文件和启动配置即可),如下所示:

idea-2

3. 创建分组

在t_dl_group表中创建一个自己的分组(不要使用别人的分组)。
或者,也可以如上述Worker_QuickStart中介绍的在页面上创建分组

idea-3

4. 注册Worker

在t_dl_worker表中添加自己的机器配置,主要是指定IP和GroupId(不要将自己的机器注册到别人的分组下面,以免影响他人的使用)。
或者,也可以如上述Worker_QuickStart中介绍的在页面上配置Worker

idea-4

5. 修改worker1.properties文件

设置client.id的值为上一步中worker的id值
(注:Worker端支持两种类型的worker配置发现方式,一种是通过client.id显示指定,一种是通过IP定位,前者一般在开发环境使用,便于在一台机器上启动多个worker进程,在非开发环境采用的都是第二种方式)

idea-5
设置bootstrap.servers的值为Manager的host和port,多个的话,逗号分隔
设置classloader.type的值为Dev,开发环境用Dev,部署环境用Rel

6. 启动Zookeeper

Manager需要依托于Zookeeper实现高可用,Worker端需要将任务运行状态注册到Zookeeper

7. 设置profile

开源版本只有release版本的profile,开发过程中可以根据需要添加其他版本例如dev、test、pre、prod等环境的profile。
profile的指定比较灵活,下图是开发环境所指定的dev环境,当需要去测试环境Debug时当然可以设置成测试环境的profile,指定环境是为了保证编译后的配置是对应环境的配置。

idea-6

8. 编译项目并打包

必须提前打一次包,原因在于:Task运行时,插件依赖的jar包需要从打包后的路径获取
(注:为了实现版本隔离,我们自定义了DevPluginClassLoader,不会用编译器提供的classloader)

idea-7

9. 开启愉快之旅

启动Manager,启动Worker,To Meet a new world!!!

同步任务示例

【示例说明】

  1. 确保源数据库已开启binlog,并且binlog_format为ROW。
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
  1. 进行一张表的数据同步测试,测试的源表名为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;

【同步任务配置步骤】

1. 添加数据源

在介质管理新增两个RDBMS数据库,分别作为源库和目标库。RDBMS数据库配置如下图所示:

RDBMS
schema:为目标库的名字
host配置:一个写IP,两个读IP分别作为主备(需要新增一个读IP),一个Etl-Host用于全量同步,不需要的话可以配置成跟读IP一样的(我们在公司内部的系统还集成了全量同步部分,但此次开源只有增量部分)
读写库用户配置:同时配置读写库用户是为了复用数据源,一个数据源可以作为一个同步任务的源端,亦可作为另一个同步任务的目标端
注:这里配置的数据库密码要用明文。

2. 添加Task

在增量任务-Task管理-MysqlTask新增Task,执行源端为Mysql的同步任务
a. 基础配置:选择Task所属分组和目标状态,Task名称格式为“源库名称_2_xxx”
b. Reader配置:关联数据源选择正确的源端数据库,其他参数无特殊需求可使用默认设置
c. Writer配置:选择目标库类型,其他参数无特殊需求可使用默认设置

3. 添加同步映射(同步表信息、映射规则等)

a. 任务名称:选择上一步新建的Task
b. 目标库名称:选择要同步到的目标库
c. 源表名称:选择源端要同步的表t_dl_test_source
d. 表别名:为源表对应的目标端的表名,默认和源表名称相同,这里改为t_dl_test_target
e. 更多配置:点击“修改”,可以设置同步的映射模式(列的黑白名单、列别名)、拦截器、主键跳过等其他功能

4. 添加映射成功之后,重启Task

5. 同步任务配置完成后,测试数据

手动在源库插入或更改数据,例如:

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 |
+----+---------+---------------------+---------------------+
Clone this wiki locally