elasticsearch+canal的安装和配置

论坛 期权论坛 脚本     
匿名技术用户   2021-1-7 14:33   93   0

安装环境:macOS(类似Linux)

1.安装elasticsearch

  1. elasticsearch的版本:6.7.0,在elasticsearch官网上下载压缩包。elasticsearch官网的地址

  2. elasticsearch基本不用什么特别的配置,默认的端口是9200,9300,可以自行调整端口配置,如果不需要调整,直接启动即可,直接启动/bin/elasticsearch。

2.安装elasticsearch WEB工具Kibana

  1. kibana的版本需要与elasticsearch的版本保持一致,需要下载6.7.0版本。kibana需要在官网下载地址。

  2. 需要重新配置/conf/kibana.yml,如没有特殊配置,只需要配置elasticsearch的访问地址。

  3. 我这里是在本地启动的es,所以,直接写的localhost,如果是服务器的话,不在同一台服务器上的情况下,需要写外网访问地址,端口是自己配置的端口,如果没有改动,则是9200.也可以直接拿这个路径放在浏览器上访问,正常情况下,这个路径是可以直接访问到的。

  4. kibana至此就可以进行启动了,直接双击/bin/kibana,就可以启动。

安装并且配置成功了elasticsearch和kibana就可以直接利用elasticsearch client、elasticsearchTemplate、ElasticsearchRepository,对elasticsearch进行CRUD的操作。这部分可以自行百度,内容很多,这里主要解决利用canal来对mysql和elasticsearch进行数据同步。

canal需要安装的是canal-deployer和canal-adapter两个,canal与elasticsearch版本没有什么特别大的关系,可以自行下载最新的release版本的canal,我这里是用的当时最新版本,1.1.4

3.安装canal-deployer。

  1. 首先是下载1.1.4版本的canal-deployer。github下载地址。

  2. 使用canal-server需要对mysql开启binlog日志,这部分github的官方的文档里边有介绍,这里再贴一下。

  3. 对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下
    [mysqld]
    log-bin=mysql-bin # 开启 binlog
    binlog-format=ROW # 选择 ROW 模式
    server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

    如果是阿里的RDS数据库,不需要这个操作,阿里的RDS数据库默认是开启binlog的。修改了my.cnf以后,可能需要重启一下mysql服务,让这些配置生效。

  4. 授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
    CREATE USER canal IDENTIFIED BY 'canal';  #创建canal用户
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';#赋予权限
    -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
    FLUSH PRIVILEGES; #刷新权限

    创建canal用户,这个用户是给canal来读取binlog的。

  5. 修改/conf/example/instance.properties,进行一些简单的修改。

  6. 最简单的只需要修改框起来这三个参数,修改成自己的配置,mysql的ip的话,如果是外网访问的,直接写外网ip。

  7. 这样就可以直接启动canal-deployer,启动 sh /bin/startup.sh

  8. 查看日志 /logs/example/example.log,如果是上图这样,就算是启动成功了。

4.安装canal-adapter。

  1. 同样是在github上下载canal-adapter的压缩包。github地址。

  2. 修改canal-adapter的配置。

  3. server:
      port: 8081  #可以配置端口,如果与其他端口冲突可以修改
    spring:
      jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: GMT+8
        default-property-inclusion: non_null
    
    canal.conf:
      mode: tcp # kafka rocketMQ
      canalServerHost: 127.0.0.1:11111
    #  zookeeperHosts: slave1:2181
    #  mqServers: 127.0.0.1:9092 #or rocketmq
    #  flatMessage: true
      batchSize: 500
      syncBatchSize: 1000
      retries: 0
      timeout:
      accessKey:
      secretKey:
      srcDataSources:
        defaultDS: #请记住这个名字(后边会用到)
          url: jdbc:mysql://localhost:3306/test_comment?useUnicode=true#配置自己的数据库的ip
          username: root #数据库账号
          password: 8888 #数据库密码
      canalAdapters:
      - instance: example # 请记住这个名字(后边会用到)canal instance Name or mq topic name
        groups:
        - groupId: g1
          outerAdapters:
          - name: logger
    #      - name: rdb
    #        key: mysql1
    #        properties:
    #          jdbc.driverClassName: com.mysql.jdbc.Driver
    #          jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
    #          jdbc.username: root
    #          jdbc.password: 121212
    #      - name: rdb
    #        key: oracle1
    #        properties:
    #          jdbc.driverClassName: oracle.jdbc.OracleDriver
    #          jdbc.url: jdbc:oracle:thin:@localhost:49161:XE
    #          jdbc.username: mytest
    #          jdbc.password: m121212
    #      - name: rdb
    #        key: postgres1
    #        properties:
    #          jdbc.driverClassName: org.postgresql.Driver
    #          jdbc.url: jdbc:postgresql://localhost:5432/postgres
    #          jdbc.username: postgres
    #          jdbc.password: 121212
    #          threads: 1
    #          commitSize: 3000
    #      - name: hbase
    #        properties:
    #          hbase.zookeeper.quorum: 127.0.0.1
    #          hbase.zookeeper.property.clientPort: 2181
    #          zookeeper.znode.parent: /hbase
          - name: es  #这里本来是注释掉的,放开注释
            hosts: 127.0.0.1:9300 # 这个是es的可以访问的那个路径
            properties:
              #mode: transport # or rest
              # security.auth: test:123456 #  only used for rest mode
              cluster.name: elasticsearch
    
    

    需要配置的内容都在里边标注了,配置的时候注意一下。

  4. 再配置conf/es/里边的yml文件,这些文件是用来做数据同步的,可以多个,个性化配置。

  5. dataSourceKey: defaultDS #在上个配置中的那个名字
    destination: example #在上个配置中的名字
    groupId: g1
    esMapping:
      _index: newscomment #es的索引的名称
      _type: _doc #es中的索引下边的名称
      _id: _id #主键的名称,这个地方名称要跟下边的sql中的主键的一致,这样才能同步
      upsert: true
    #  pk: id
      sql: "SELECT com.inner_id AS _id, com.user_id AS commentUserId, com.topic_type AS topicType, com.topic_id AS topicId, com.comment_type AS commentType, com.level AS commentLevel,
       com.content AS commentContent, com.status AS commentStatus, com.is_use AS commentIsUse, us.nick_name AS commentNickName, com.create_time AS commentCreateTime, com.update_time AS commentUpdateTime,
       ne.title AS newsTitle FROM comment com LEFT JOIN qlwb_test_online.user_base us ON us.id = com.user_id
       LEFT JOIN qlwb_test_online.news_base ne ON ne.inner_id = com.topic_id "
    #    这个sql就是用来数据同步的,这个sql里边不要出现‘’,因为如果使用navicat写的sql,有时候会出现用‘’引起来的字段,千万不要有这个‘’,会导致无法同步。
    #  objFields:
    #    _labels: array:;
    #  etlCondition: "where h.id > 0"#sql的查询条件写在这里
      commitBatch: 3000

    这个配置里边需要注意的地方。

  6. 这时候可以启动 sh /bin/startup.sh

  7. 查看 /log/adapter/adapter.log,如果没错误就显示成功了。

由于写的比较着急,有些成功的截图没有放上,如果有其他的问题,请在评论中直接联系我,我看到后会第一时间回复。

欢迎对我的安装过程提出建议,由于是第一次搭建,整个过程也是摸索了好几天才把所有的问题都解决,并且能够完整的实现功能,可能还有很多不足的地方,欢迎指正。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP