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

文章目录

    • 0. 环境介绍
    • 0. 前置步骤
    • 1. 安装Kibana和Elasticsearch
    • 2. 安装Canal和Canal Adapter
      • 2.1 修改数据库配置
        • 2.1.1 修改配置
        • 2.1.2 验证mysql binlog配置
        • 2.1.3 查看日志文件
        • 2.1.4 用JDBC代码插入数据库
      • 2.2 安装Canal Server
      • 2.3 安装Canal Adapter
        • 修改两处配置文件
        • 配置文件取消注释一定要自己手动删除`#`,不要用快捷键。否则***会导致文件格式出问题***

参考
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,展示了应有的配置结果
在这里插入图片描述

2.1.3 查看日志文件

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

在这里插入图片描述

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-serverdocker 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
在这里插入图片描述
注意,canal.properties中的destination要和后续的Canal Adapter保持一致
在这里插入图片描述

验证服务是否启动成功

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

在这里插入图片描述

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

在这里插入图片描述在这里插入图片描述
name logger就是在发生数据修改的时候,直接实时更新到log中,如下图在这里插入图片描述

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/91982.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器 - 事件循环机制详解

目录 1,浏览器进程模型进程线程浏览器的进程和线程1,浏览器进程2,网络进程3,渲染进程 2,渲染主线程事件循环异步同步 JS 为什么会阻塞渲染任务优先级 3,常见面试题1,如何理解 js 的异步2&#x…

如何使用CSS实现一个响应式网格布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现响应式网格布局⭐ 设置基本的HTML结构⭐ 创建基本的CSS样式⭐ 添加媒体查询以实现响应式效果⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端…

【wiki】电竞助手掉落提醒 EsportsHelper「Webhook」「钉钉」「饭碗警告」「企业微信」「Discord」

介绍 本项目链接 Github电竞助手链接 github上项目电竞助手(EsportsHelper)的掉落提醒配置教程,当有掉宝的时候会发送你信息提示. 至于这个脚本是怎么使用的简单说一下,就是通过自动观看英雄联盟直播 从而获取奖励(仅限直营服),有兴趣的可以去github上看readme,非常详细,支持…

ARM--day2(cpsr、spsr、数据搬移指令、移位操作指令、位运算操作指令、算数运算指令、比较指令、跳转指令)

.text .global _gcd _gcd:mov r0,#9mov r1,#15b loop loop:cmp r0,r1beq stopsubhi r0,r1bhi loopsubcc r1,r0bcc loopstop:b stop.end用for循环实现1~100之间和5050 .text .global _gcd _gcd:mov r0,#0x0mov r1,#0x1mov r2,#0x64b loop loop:cmp r1,r2bhi stopadd r0,r0,r1ad…

epoll数据结构

目录 1.大量的fd 集合。选择什么数据结构?2、Epoll 数据结构Epitem 的定义Eventpoll 的定义 1.大量的fd 集合。选择什么数据结构? 查找频率很高的数据结构 1.红黑树 2.哈希(扩容缩容) 3. b/btree (降低树的高度&#…

【学会动态规划】环形子数组的最大和(20)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

UI设计师个人工作总结范文精选

UI设计师个人工作总结范文(一) 在忙忙碌碌中,2019年又将过去了,在这一年当中,设计部无论是在运作模式、设计产值、还是人员结构,各方面的变化都比较大。 设计部的运作模式是从7月底开始进行调整的,以独立承包制的运营方…

pgsql checkpoint机制(1)

检查点触发时机 检查点间隔时间由checkpoint_timeout设置pg_xlog中wall段文件总大小超过参数max_WAL_size的值postgresql服务器在smart或fast模式下关闭手动checkpoint 为什么需要检查点? 定期保持修改过的数据块作为实例恢复时起始位置(问题&#xf…

网盘与相册服务PDS

引言:作为一名开发者,我将通过对PDS(Personal/Enterprise Drive System)的体验使用,分享一下本人对以下方面的使用体验。 1. 开发个人/企业网盘 功能与应用 PDS作为一种网盘服务中间件产品,为开发者提供了…

【调整奇数偶数顺序】

调整奇数偶数顺序 1.题目 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 2.题目分析 这道题首先用到的方法是冒泡排序的思想,首先通过冒泡排序…

C#__匿名方法和Lambda表达式

class Program{static void Main(string[] args){// 匿名方法&#xff1a;方法没有名字Func<int, int, int> plus delegate (int a, int b){return a b;};// 这里相当于直接把要引用的方法直接写在后面// 优点&#xff1a;减少了要编写的代码&#xff0c;减少代码的复杂…

大数据大屏的分析

今天又进行了大屏的训练&#xff0c;就是很多的报表头是最难的&#xff0c;因为确定了头&#xff0c;就确定了大屏的风格了。 今天的还是有点丑但是也是学习了。报班报班~~~~

论文略读:城市道路场景下车辆编队运动规划与控制算法研究

1. 一些观点&#xff1a; &#xff08;1&#xff09;我曾经认为不能复现的论文都是垃圾。我现在看到能够量产的论文之后发现&#xff0c;论文的复现实属难得&#xff0c;即使给你代码&#xff0c;反复钻研&#xff0c;一个月之久才敢说略微看懂&#xff0c;所以论文的复现实在是…

xarray 简易体会与实现

1 基础原理 xarray1主要由 xarray 结点组成&#xff0c;xarray 结点主要由槽位&#xff08;即指针&#xff09;、父节点指针等组成。xarray 根据整型索引组织 xarray 结点实现对目标值的高效存、查、删操作。 此文以 存查删等流程对应源码2具体实例 —— xarray 结点槽位数 …

E8—Aurora 64/66B ip实现GTX与GTY的40G通信2023-08-12

1. 场景 要在贴有K7系列FPGA芯片的板子和贴有KU系列FPGA芯片的板子之间通过光模块光纤QSFP实现40G的高速通信。可以选择的方式有多种&#xff0c;但本质的方案就一种&#xff0c;即实现4路GTX与GTY之间的通信。可以选择8B/10B编码通过GT IP核实现&#xff0c;而不能通过Aurora…

深入探索:解读创意的力量——idea的下载、初步使用

目录 ​编辑 1.IDEA的简介 2.IDEA的下载 2.1下载路径https://www.jetbrains.com/zh-cn/idea/download/?sectionwindows​编辑​ 2.2下载的步骤 3 idea的初步使用 3.1新建一个简单的Java项目 3.1.1首先需要创建一个新的工程 3.1.2创建一个新的项目&#xff08;模块&am…

Spring项目整合过滤链模式~实战应用

代码下载 设计模式代码全部在gitee上,下载链接: https://gitee.com/xiaozheng2019/desgin_mode.git 日常写代码遇到的囧 1.新建一个类,不知道该放哪个包下 2.方法名称叫A,干得却是A+B+C几件事情,随时隐藏着惊喜 3.想复用一个方法,但是里面嵌套了多余的逻辑,只能自己拆出来…

WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调&#xff1a;以下内容仅供学习和测试&#xff0c;一切行为均在…

使用wxPython和PyMuPDF提取PDF页面指定页数的内容的应用程序

在本篇博客中&#xff0c;我们将探讨如何使用wxPython和PyMuPDF库创建一个简单的Bokeh应用程序&#xff0c;用于选择PDF文件并提取指定页面的内容&#xff0c;并将提取的内容显示在文本框中。 C:\pythoncode\new\pdfgetcontent.py 准备工作 首先&#xff0c;确保你已经安装了…

【Python机器学习】实验10 支持向量机

文章目录 支持向量机实例1 线性可分的支持向量机1.1 数据读取1.2 准备训练数据1.3 实例化线性支持向量机1.4 可视化分析 实例2 核支持向量机2.1 读取数据集2.2 定义高斯核函数2.3 创建非线性的支持向量机2.4 可视化样本类别 实例3 如何选择最优的C和gamma3.1 读取数据3.2 利用数…