文章目錄
- 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文件夾下修改,注意以下字段的配置。目前只是能夠運行起來,至于業務實際應用可能還有待驗證。