使用 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.pswp.cn/news/36315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36315.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 命令篇

一、啟動網絡命令 ip addr 查看網卡信息 service network start 啟動網卡 service network stop 關閉網卡 service network restart 重啟網絡 二、pwd 命令 查看當前目錄的路徑 linux 下所有的絕對路徑都是從根目錄 "/" 開始 root:是linux下root用戶的根目…

初識mysql數據庫之引入mysql客戶端庫

目錄 一、下載第三方庫 1. 準備工作 1. 使用mysql官網提供的庫 2. yum源安裝 二、測試第三方庫是否可用 三、mysql常用接口介紹 1. 查看官方文檔 2. 初始化 3. 關閉mysql 4. 連接mysql 5. 下達sql指令 四、一個簡單的C客戶端庫連接mysql程序 1. 頭文件 2. 初始化…

FFmpeg接收UDP碼流

一、FFmpeg參數初始化: //在打開碼流前指定各種參數比如:探測時間/超時時間/最大延時等//設置緩存大小,1080p可將值調大av_dict_set(&options, "buffer_size", "8192000", 0);//以tcp方式打開,如果以udp方式打開將tcp替換為udpav_dict_set(…

Could not resolve host: mirrorlist.centos.org; Unknown error解決方法

今天服務器安裝完CentOS系統后,安裝網絡的時候,出現無法聯網yum yum -y install net-tools 以上代碼無法運行并報錯,這里我要提醒大家,如果在初始安裝的時候選中安裝網絡工具模塊就不用在安裝net-tools了,因為我選中…

Angular 性能優化實戰

Angular 性能優化實戰 Angular 是一個非常強大的前端框架,但是如果不注意性能優化,應用程序可能會變得非常慢并增加加載時間。 以下是一些Angular性能優化經驗的實戰建議: 1. 使用 OnPush 變更檢測策略 默認情況下,Angular檢查…

vite跨域配置踩坑,postman鏈接后端接口正常,但是前端就是不能正常訪問

問題一:怎么都鏈接不了后端地址 根據以下配置,發現怎么都鏈接不了后端地址,proxy對了呀。 仔細看,才發現host有問題 // 本地運行配置,及反向代理配置server: {host: 0,0,0,0,port: 80,// cors: true, // 默認啟用并允…

爆肝整理,性能測試方法與關鍵指標以及瓶頸定位思路,一篇貫通...

目錄:導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結(尾部小驚喜) 前言 性能測試方法 1、…

Python編程實現百度AI開放平臺的接口對接方法,詳解和實踐指南

Python編程實現百度AI開放平臺的接口對接方法,詳解和實踐指南 引言 百度AI開放平臺提供了豐富的人工智能接口,包括語音識別、圖像識別、自然語言處理等功能。本文將通過Python編程,詳解如何對接百度AI開放平臺的接口,并提供實際代碼示例。準備工作 在開始之前,我們需要先完…

智能家居(1)---工廠模式實現燈光控制(繼電器組)以及火災報警模組的封裝

采用工廠模式以面向對象的方式來封裝各種設備模塊&#xff0c;方便整合項目以及后期的維護和擴展 mainPro.c&#xff08;主函數&#xff09; #include <stdio.h> #include "controlDevice.h"struct Devices *pdeviceHead NULL; //設備工廠鏈…

抓包工具Fiddler下載與安裝

一、Fiddler介紹 1.Fiddler簡介 Fiddler 是一款免費、靈活、操作簡單、功能強大的 HTTP 代理工具&#xff0c;是目前最常用的 HTTP 抓包工具之一。可以抓取所有的 HTTP/HTTPS 包、過濾會話、分析請求詳細內容、偽造客戶端請求、篡改服務器響應、重定向、網絡限速、斷點調試等…

數據結構刷題訓練:隊列實現棧

目錄 前言 1. 題目&#xff1a;使用隊列實現棧 2. 思路 3. 分析 3.1 創建棧 3.2入棧 3.3 出棧 3.4 棧頂數據 3.5 判空和 “ 棧 ” 的銷毀 4. 題解 總結 前言 我們已經學習了棧和隊列&#xff0c;也都實現了它們各自的底層接口&#xff0c;那么接下我們就要開始棧和隊列的專項刷…

go內存管理機制

golang內存管理基本是參考tcmalloc來進行的。go內存管理本質上是一個內存池&#xff0c;只不過內部做了很多優化&#xff1a;自動伸縮內存池大小&#xff0c;合理切割內存塊。 基本概念&#xff1a; Page&#xff1a;頁&#xff0c;一塊 8 K大小的內存空間。Go向操作系統申請和…

2.Model、ModelMap和ModelAndView的使用詳解

1.前言 最近SSM框架開發web項目&#xff0c;用得比較火熱。spring-MVC肯定用過&#xff0c;在請求處理方法可出現和返回的參數類型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;對于MVC框架&#xff0c;控制器Controller執行業務邏輯&#xff0c;用于產生模型數據…

Spring Cloud構建微服務斷路器介紹

什么是斷路器 斷路器模式源于Martin Fowler的Circuit Breaker一文。“斷路器”本身是一種開關裝置&#xff0c;用于在電路上保護線路過載&#xff0c;當線路中有電器發生短路時&#xff0c;“斷路器”能夠及時的切斷故障電路&#xff0c;防止發生過載、發熱、甚至起火等嚴重后果…

【Redis】使用Docker鏡像配置集群時的Operation timed out問題

不知道有沒有小伙伴跟我一樣是使用的Docker鏡像進行Redis集群案例模擬的&#xff08;三臺虛擬機確實帶不動 &#xff09;&#xff0c;然后我遇到了一個問題&#xff1a;Could not connect to Redis at 172.17.0.2:6379: Operation timed out 172.17.0.2是我其中一個Redis實例的…

如何測試Linux磁盤的讀寫速度

在Linux系統中也有很多命令可以測試硬盤的讀寫速度指標。以下是幾個常用命令&#xff08;注意&#xff1a;在執行測試命令之前&#xff0c;請務必備份數據以避免數據丟失&#xff01; 1、dd 命令 首先掛載磁盤 mount /dev/sdb /testdd 命令可用于進行硬盤讀寫速度測試。 例…

uniapp踩坑之項目:判斷字符串長度自動調整選項卡寬度

利用動態:class來判斷字長調整選項卡uni-data-select 寬度 //html <view><view style"width:100%" :class"checkLength(text)>4 ? textexplode:textshrink"><uni-data-select v-model"value" :localdata"rangeTag"…

android 開發中常用命令

1.反編譯 命令&#xff1a;apktool d <test.apk> -o <folderdir> 其中&#xff1a;test.apk是待反編譯文件的路徑&#xff0c;folderdir是反編譯后的文件的存儲位置。 apktool d -f <test.apk> -o <folderdir> 注意&#xff1a;如果dir已經存在&am…

從零學算法34

34.給你一個按照非遞減順序排列的整數數組 nums&#xff0c;和一個目標值 target。請你找出給定目標值在數組中的開始位置和結束位置。 如果數組中不存在目標值 target&#xff0c;返回 [-1, -1]。 你必須設計并實現時間復雜度為 O(log n) 的算法解決此問題。 示例 1&#xff1…

React Native 在高IOS版本下無法顯示圖片的問題處理

圖片在低ios版本下可以看到圖片&#xff0c;在高版本ios下顯示不了圖片 直接上解決方法 找文件 /node_modules/react-native/Libraries/Image/RCTUIImageViewAnimated.m 修改源碼 原代碼 if (_currentFrame) {layer.contentsScale self.animatedImageScale;layer.contents…