安装环境:macOS(类似Linux)

1.安装elasticsearch

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

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

2.安装elasticsearch WEB工具Kibana

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

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


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

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.4版本的canal-deployer。github下载地址。

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

对于自建 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服务,让这些配置生效。

授权 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的。

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

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

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

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

4.安装canal-adapter。

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

修改canal-adapter的配置。

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

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

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

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

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

  1. 这时候可以启动 sh  /bin/startup.sh
  2. 查看  /log/adapter/adapter.log,如果没错误就显示成功了。
由于写的比较着急,有些成功的截图没有放上,如果有其他的问题,请在评论中直接联系我,我看到后会第一时间回复。欢迎对我的安装过程提出建议,由于是第一次搭建,整个过程也是摸索了好几天才把所有的问题都解决,并且能够完整的实现功能,可能还有很多不足的地方,欢迎指正。