使用 Docker 部署 canal 服务实现MySQL和ES实时同步

这篇具有很好参考价值的文章主要介绍了使用 Docker 部署 canal 服务实现MySQL和ES实时同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考
ClientAdapter: Canal的Adapter配置项目
Sync ES:Canal的Adapter中ES同步的配置项
使用 Docker 部署 canal 服务
docker canal-server canal-adapter mysql
Canal(基于Docker同步mysql数据到elasticsearch)
Canal部署过程中的错误

0. 环境介绍

  • Canal 1.1.4
  • Canal Adapter 1.1.4
  • Kibana: 6.8.8
  • ElasticSearch: 6.4.3

由于Canal 1.1.4只能适配 ElasticSearch: 6.4.3,因此使用了上述的版本。
Kibana选择 6.8.8是因为他可以用中文?但我没有配置成功。此外Kibana的6.8可以和ES6.4结合。其他情况下需要版本一一对应

关于Kibana和ES的版本对应以及中文设置问题,可以参考

  • Kibana 汉化相关配置 i18n 及版本问题
  • Kibana将语言设置为中文
  • Elasticsearch和Kibana版本对应关系

0. 前置步骤

dokcer服务网络准备
参考让ELK在同一个docker网络下通过名字直接访问, 首先用docker设置一个网络,以后所有相关的容器都放到这里。

docker network create mynetwork

ES的内存准备
命令行输入

sysctl -w vm.max_map_count=262144

1. 安装Kibana和Elasticsearch

参考我之前的博客Ubuntu服务器ELK部署与实践。
注:不同的版本对应的配置方案也需要修改,我的修改有:

Kibana修改
原配置(7.8.0)

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch:9200"]
# 操作界面语言设置为中文
i18n.locale: "zh-CN"

现配置(6.8.8)

server.port: 5601
server.host: "0.0.0.0"
server.basePath: "/kibana" # 这个是用来配置nginx访问用的
# server.host: "127.0.0.1"
# 注意看这里的参数变了
elasticsearch.url: "http://elasticsearch:9200"
# 操作界面语言设置为中文
# 6.4不支持
# i18n.locale:  "zh-CN"

此外,由于版本变更,相关的API也发生了变更,请多多留意
Create index API 7.8.0
Create index 6.4

数据来自Kaggle的新闻,因此按照数据字段名称,新建如下字段

PUT news_2
{
	"mappings": {
		"_doc": {
			"properties": {
				"id": {
					"type": "text",
					"index": true
				},
				"title": {
					"type": "text",
					"analyzer": "ik_max_word"
				},
				"_desc": {
					"type": "text",
					"analyzer": "ik_max_word"
				},
				"image": {
					"type": "text",
					"analyzer": "ik_max_word"
				},
				"url": {
					"type": "text",
					"analyzer": "ik_max_word"
				},
				"news_source": {
					"type": "text",
					"analyzer": "ik_max_word"
				},
				"_date": {
					"type": "date"
				}
			}
		}
	}
}

2. 安装Canal和Canal Adapter

Canal是用来做数据库slave的,他的原理就是读取数据库的日志文件,实现实时同步(相比logstash的cron表达式可以更加实时)。

2.1 修改数据库配置

2.1.1 修改配置

首先新建数据库的docker镜像

docker run -p 3306:3306 --name mysql \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

接下来去/data/mysql/conf路径下,新建my.cnf文件,输入以下内容

[mysqld]
#binlog setting
log-bin=mysql-bin  # 开启logbin
binlog-format=ROW  # binlog日志格式
server-id=1  # mysql主从备份serverId,canal中不能与此相同

docker restart重启mysql

2.1.2 验证mysql binlog配置

新建新闻表

CREATE SCHEMA MyTest;

use MyTest;

create table News
(
id INT(11),
title VARCHAR(2125),
desc VARCHAR(2125),
image VARCHAR(2125),
url VARCHAR(2125),
source VARCHAR(2125),
date Date
)DEFAULT CHARSET=utf8;

检查该新闻表的状态

mysql -u root -p  // mysql登录
>show databases;
>use MyTest;  // 开启数据库
>show variables like 'log_%';
>show variables like 'binlog_format';
>show master status;  // binlog日志文件 mysql-bin.000001
>reset master;  // 重置日志

以下截图来自https://blog.csdn.net/qq_32836247/article/details/116561732,展示了应有的配置结果
使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch

2.1.3 查看日志文件
cd /var/lib/mysql  // 进入日志文件目录
mysqlbinlog -vv mysql-bin.000001  // row格式查看日志

使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch

2.1.4 用JDBC代码插入数据库

这个就自己实现吧。不用全部插入,因为Adapter要基于新的日志和ES同步。

2.2 安装Canal Server

首先安装canal-server,复制配置文件到外面

# 启动docker
docker pull canal/canal-server:v1.1.4
docker run --name canal-server -id canal/canal-server:v1.1.4

# 复制配置文件
docker cp canal-server:/home/admin/canal-server/conf/ /data/canal_/canal
docker cp canal-server:/home/admin/canal-server/logs/ /data/canal_/canal

# 删除并重新启动
docker stop canal-server && docker rm canal-server

docker run --name canal -p 11111:11111 \
-v /data/canal_/canal/conf/example/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-v /data/canal_/canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties \
-v /data/canal_/canal/logs/:/home/admin/canal-server/logs/ \
--network mynetwork \ # 这个是我“让ELK在同一个docker网络下通过名字直接访问”博客中新建的网络,以后所有127.0.0.1都写成docker的name就可以
-d canal/canal-server:v1.1.4

修改Server配置文件example/instance.properties
使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch
注意,canal.properties中的destination要和后续的Canal Adapter保持一致
使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch

验证服务是否启动成功

docker exec -it [c_id]/bin/bash
cd canal-server/bin/
./start.sh  // 启动服务
cd canal-server/logs/example/
tail -100f example.log  // 查看日志

使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch

2.3 安装Canal Adapter

# 启动docker
docker pull slpcat/canal-adapter:v1.1.4
docker run --name canal-adapter -id slpcat/canal-adapter:v1.1.4

# 复制配置文件
docker cp canal-adapter:/opt/canal-adapter/conf /data/canal_/canal-dapter
docker cp canal-adapter:/opt/canal-adapter/logs /data/canal_/canal-dapter

# 删除并重新启动
docker stop canal-adapter && docker rm canal-adapter

docker run --name canal-adapte -p 8081:8081 \
-v /data/canal_/canal-dapter/conf:/opt/canal-adapter/conf \
-v /data/canal_/canal-dapter/logs:/opt/canal-adapter/logs \
--network mynetwork \
-d slpcat/canal-adapter:v1.1.4
修改两处配置文件
配置文件取消注释一定要自己手动删除#,不要用快捷键。否则会导致文件格式出问题

配置文件详解
ClientAdapter: Canal的Adapter配置项目 application.ym(application.yml)
Sync ES:Canal的Adapter中ES同步的配置项 (user.yml)

修改配置文件application.yml

使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch
name logger就是在发生数据修改的时候,直接实时更新到log中,如下图使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch

修改完上述配置,可以看到name为es的canalAdapters被启动了。因此要去es文件夹下修改,注意以下字段的配置。目前只是能够运行起来,至于业务实际应用可能还有待验证。

使用 Docker 部署 canal 服务实现MySQL和ES实时同步,docker,mysql,elasticsearch文章来源地址https://www.toymoban.com/news/detail-649488.html

到了这里,关于使用 Docker 部署 canal 服务实现MySQL和ES实时同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Canal —— 一款 MySql 实时同步到 ES 的阿里开源神器

    Canal —— 一款 MySql 实时同步到 ES 的阿里开源神器

    目录 一. 前言 二. Canal 简介和使用场景 2.1. Canal 简介 2.2. Canal 使用场景 三. Canal Server 设计 3.1. 整体设计 3.2. EventParser 设计 3.3. CanalLogPositionManager 设计 3.4. CanalHAController 类图设计 3.5. EventSink 类图设计和扩展 3.6. EventStore 类图设计和扩展 3.7. MetaManager 类图设计和扩展 四. Can

    2024年01月25日
    浏览(12)
  • MySQL如何实时同步数据到ES?试试阿里开源的Canal

    MySQL如何实时同步数据到ES?试试阿里开源的Canal

    前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——  Canal  。在了解了它的工作原理和使用场景后,顿时产生了浓厚的兴趣。今天,就让我们跟随我的脚步,一起来揭开它神秘的面纱吧。 目录 前言 简介  工作原理  MySQL主备复制原理 canal 工作原理 Canal架构  C

    2024年02月20日
    浏览(5)
  • 使用canal+rocketmq实现将mysql数据同步到es

    使用canal+rocketmq实现将mysql数据同步到es

    实际开发过程中,经常遇到数据库与缓存不一致的问题,造成这种问题的原因有很多,其中缓存数据没有及时更新、缓存中过期的数据没有及时更新,导致缓存中存在失效数据,导致数据库与缓存不一致。而这种问题的出现大部分都是因为同步延迟、缓存失效、过期和错误使

    2024年02月11日
    浏览(28)
  • canal实时同步mysql数据到elasticsearch(部署,配置,测试)(一)

    canal实时同步mysql数据到elasticsearch(部署,配置,测试)(一)

    canal基于MySQL数据库增量日志解析,提供增量数据订阅和消费,是阿里开源CDC工具,它可以获取MySQL binlog数据并解析,然后将数据变动传输给下游。基于canal,可以实现从MySQL到其他数据库的实时同步 MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫

    2023年04月08日
    浏览(9)
  • canal实现MySQL和ES同步实践

    canal实现MySQL和ES同步实践

    canal是阿里开源的数据同步工具,基于binlog可以将数据库同步到其他各类数据库中,目标数据库支持mysql,postgresql,oracle,redis,MQ,ES等。 MySQL的主从复制是依赖于binlog,也就是记录MySQL上所有操作的逻辑日志保存在磁盘上。主从复制就是将binlog中的数据从主库传输到从库上,一般这

    2024年04月14日
    浏览(19)
  • Canal同步Mysql实时操作日志至RabbitMQ,并实现监听及解析处理

    Canal同步Mysql实时操作日志至RabbitMQ,并实现监听及解析处理

    关于Canal的介绍及原理不在此赘述,可自行查阅。笔者在使用Canal同步Mysql实时操作记录至RabbitMQ的过程中,也翻阅了一些大牛们的文章,可能是我使用的Canal版本与文中版本不一致,出现了一些问题,在此总结记录一下可行的方案。 注:本文使用的Canal为 v1.1.7 先查看目标数据

    2024年04月10日
    浏览(19)
  • Springcloud Alibaba 使用Canal将MySql数据实时同步到Elasticsearch

    本篇文章在Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性-CSDN博客 基础上使用canal将mysql数据实时同步到Elasticsearch。 公共包 实体类Sku @Column注解 用来标识实体类中属性与数据表中字段的对应关系 name 定义了被标注字段在数据库表中所对应字段的名称;由

    2024年02月03日
    浏览(9)
  • 使用canal同步MySQL5.7到ES中小白配置教程

    使用canal同步MySQL5.7到ES中小白配置教程

    在本篇博客中,我们将深入探讨如何使用Canal进行MySQL到Elasticsearch (ES) 的数据同步。本文将涵盖Canal的基本概念、安装过程、配置步骤以及具体的同步操作,旨在帮助开发者和数据工程师理解并实现实时数据处理。包括:Canal介绍、MySQL同步、Elasticsearch配置、实时数据同

    2024年04月24日
    浏览(7)
  • Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性

    Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性

    目录   1. 背景 2. Windows系统安装canal 3.Mysql准备工作 4. 公共依赖包 5. Redis缓存设计 6. mall-canal-service   canal [kə\\\'næl] ,译意为水道/管道/沟渠,主要用途是 基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 。其诞生的背景是早期阿里巴巴因为杭州和美国双机房部署,存

    2024年02月03日
    浏览(7)
  • docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中

    docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中

    🚀 本文提供的指令完全可以按顺序逐一执行,已进行了多次测试。因此如果你是直接按照我本文写的指令一条条执行的,而非自定义修改过,执行应当是没有任何问题的。 🚀 本文讲述:使用docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elas

    2024年02月02日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包