Docker部署ElasticSearch、ELK、canal组件
编辑一、ElasticSearch
1、ElasticSearch简介
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。
2、Docker安装ElasticSearch
拉取镜像
docker pull elasticsearch:7.6.2
查看镜像
docker images
运行容器
docker run -d -p 9200:9200 -p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
--name elasticsearch \
elasticsearch:7.6.2
把配置文件挂载到主机上
docker run -d -p 9200:9200 -p 9300:9300 \
-v /home/docker/elasticsearch/config:/usr/share/elasticsearch/config \
-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /home/docker/elasticsearch/logs:/usr/share/elasticsearch/logs \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
-e "discovery.type=single-node" \
--name elasticsearch \
elasticsearch:7.6.2
-e "discovery.type=single-node" 设置为单节点
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 在启动时要设置ES的初始内存和最大内存,初始设置为2G,可能因为过大导致启动不了ES。
访问ES,查看ES相关信息(ip:9200)
容器已经启动完成。现在可以在浏览器输入 ip + 端口号访问。
安装ElasticSearch的中文分词器IK
使用了Elasticsearch中默认的标准分词器,这个分词器在处理中文的时候会把中文单词切分成一个一个的汉字,因此引入中文的分词器就能解决这个问题。
下载Ik分词器地址
下载Ik分词器地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.6.2
注意:IK分词器版本号应和ES版本号一致
进入容器
docker exec -it elasticsearch /bin/bash
在/usr/share/elasticsearch/plugins目录下创建ik文件夹
mkdir /usr/share/elasticsearch/plugins/ik
退出容器
将/home文件夹中的elasticsearch-analysis-ik-7.6.2.zip拷贝到容器ik文件夹中:
docker cp /home/elasticsearch-analysis-ik-7.6.2.zip elasticsearch:/usr/share/elasticsearch/plugins/ik/
重新进入容器的ik文件夹,并解压和删除elasticsearch-analysis-ik-7.10.1.zip:
docker exec -it elasticsearch /bin/bash
cd /usr/share/elasticsearch/plugins/ik
unzip elasticsearch-analysis-ik-7.6.2.zip
rm -rf elasticsearch-analysis-ik-7.6.2.zip
退出容器并重启容器
exit
docker restart elasticsearch
测试效果
未使用ik,使用默认
POST archives_info/_analyze
{
"text": "我是中国人"
}
使用ik分词器
POST archives_info/_analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
二、ElasticSearch Head管理界面
1、ElasticSearch Head简介
elasticsearch-head将是一款专门针对于elasticsearch的客户端工具。提供集群管理、数据可视化、增删改查工具, elasticsearch语句可视化等功能。
2、Docker安装ElasticSearch Head
拉取镜像
docker pull mobz/elasticsearch-head:5
运行容器
因和后面Canal配置端口冲突此处映射端口改为9001
docker run -d -p 9001:9100 --name elasticsearch-head mobz/elasticsearch-head:5
访问并连接elasticsearch(ip:9001)
可能遇到的问题
可能会出现跨域拒绝访问问题,无法连接ES服务
解决方法:
进入elasticsearch容器内部,修改配置文件elasticsearch.yml
cd ./config
vim elasticsearch.yml
在elasticsearch.yml中添加:
http.cors.enabled: true
http.cors.allow-origin: "*"
重启 elasticsearch容器
Docker容器ElasticSearch-Head创建索引无响应406
解决方法:修改head的 Content-Type 设置,需要安装vi
1、进入容器
docker exec -it 容器id /bin/bash
2、修改vendor.js
vim /usr/src/app/_site/vendor.js
3、6886行 /contentType: "application/x-www-form-urlencoded
改成 contentType: "application/json;charset=UTF-8"
7574行 var inspectData = s.contentType === "application/x-www-form-urlencoded" &&`
改成 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
4、退出容器,重启容器
三、ElasticSearch监控工具 - cerebro
1、cerebro简介
监控es集群状态
管理es节点信息
通过REST结构对索引进行操作
2、docker安装cerebro
拉取镜像
docker pull lmenezes/cerebro
运行容器
docker run -d --name cerebro -p 9001:9000 lmenezes/cerebro
注意:cerebro的9000端口会与Portainer端口重复,所以这里映射成9001端口。
访问cerebro,连接es服务(ip:9001)
四、ELK Stack
“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。Elastic Stack 是 ELK Stack 的更新换代产品。新增了一个Beats,它是一系列轻量型的单一功能数据采集器,如Filebeat它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
1、Docker安装Kibana
拉取镜像
docker pull kibana:7.6.2
注意:版本必须与es一致
运行容器
docker run -d -p 5601:5601 --link 37d1e505576f:elasticsearch --name kibana f70986bc5191
37d1e505576f:es的容器id
访问域名:5601
汉化kibana
安装后,默认是英文的,可以修改一下kibana的配置文件,显示成中文
登录容器,然后修改配置文件kibana.yml
,加上一行配置i18n.locale: zh-CN
。
重启kibana
常用工具:用来通过rest请求查询es中数据
2、Docker安装Logstash
拉取镜像
docker pull logstash:7.6.2
运行容器
docker run --name logstash -d -p 5044:5044 fa5b3b1e9757
根据实际需要配置logstash
3、Docker安装Filebeat
拉取镜像
docker pull elastic/filebeat:7.6.2
运行容器
// 临时启动容器
docker run -d --name=filebeat elastic/filebeat:7.6.2
// 拷贝数据文件
docker cp filebeat:/usr/share/filebeat ./
五、canal
1、canal简介
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
简单来说canal的原理是根据mysql的主从复制原理实现的,canal伪装成slave库从而向master库读取binlog日志获取增量日志。
canal-admin(非必须但推荐使用):为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。
canal-server:服务端,从mysql读取binlog日志获取增量日志,可以通过tcp、kafka、RocketMQ等方式与客户端通信;通过zookeeper搭建集群。
canal-adapter:客户端,根据canal-server获取的增量日志执行适配到其他诸如elasticsearch、redis、mysql等端,实现数据同步。
2、准备
1)使用canal-server需要先准备mysql,对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,/mysql.conf.d/mysqld.cnf
中配置如下:
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
配置完成后重启mysql,并查询是否配置生效:
show variables like 'log_bin%';
show variables like 'binlog_format%';
2)授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant。
CREATE USER canal IDENTIFIED BY '123456';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
3、docker安装canal-admin
拉取镜像
docker pull canal/canal-admin:latest
运行容器
docker run -d -p 8089:8089 -e server.port=8089 --name canal-admin canal/canal-admin
用户名:admin
密码:123456
4、docker安装canal-server
拉取镜像
docker pull canal/canal-server:latest
运行容器
docker run -d -p 9100:9100 -p 11110:11110 -p 11111:11111 -p 11112:11112 \
-v /home/docker/canal-server/logs:/home/admin/canal-server/logs \
-e canal.admin.manager=192.168.8.128:8089 \
-e canal.admin.port=11110 \
-e canal.admin.user=admin \
-e canal.admin.passwd=4ACFE3202A5FF5CF467898FC58AAB1D615029441 \
--name=canal-server \
--restart=always \
canal/canal-server
应用配置
canal-server
启动完成后访问canal-admin
链接(IP:8089)因为docke启动的时候配置admin
地址,canal-admin
服务管理里会自动识别到canal-server
的服务
第一步:现在 Instance 管理
里添加一个实例,先输入实例名称和选择服务,点击载入模板
修改数据库配置
...
# position info
canal.instance.master.address=192.168.8.128:3306
...
# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=linewell@123
# table regex
canal.instance.filter.regex=archives_center\\..*
# mq config
canal.mq.topic=example
canal.mq.partition=0
第二部:在Server 管理
中选择操作下拉框配置,在配置文件99行添加刚配置的实例名称,多个用,
(逗号)隔开
#################################################
######### destinations #############
#################################################
canal.destinations = archives
5、docker安装canal-adapter
拉取镜像
docker pull liazhan/canal-adapter:v1.1.5
运行容器
docker cp canal-adapter:/opt/canal/adapter/conf /home/docker/canal-adapter
docker run -d -p 8081:8081 \
-v /home/docker/canal-adapter/conf:/opt/canal/adapter/conf \
-v /home/docker/canal-adapter/logs:/opt/canal/adapter/logs \
--name canal-adapter \
liazhan/canal-adapter:v1.1.5
应用配置
修改/conf/application.yml配置文件中的canalServerHost
、数据源及instance
和ES服务器地址
server:
port: 8081
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
# canal conf
canal.conf:
mode: tcp
canalServerHost: 192.168.8.128:11111 # canal server host
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
username:
password:
vhost:
srcDataSources:
defaultDS:
url: jdbc:mysql://192.168.8.128:3306/archives_center?useUnicode=true
username: canal
password: linewell@123
canalAdapters:
- instance: archives # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: es7
hosts: 192.168.8.128:9300 # 127.0.0.1:9200 for rest mode
properties:
mode: transport # or rest
# security.auth: test:123456 # only used for rest mode
cluster.name: docker-cluster
参考文献
1、Docker安装ElasticSearch
https://blog.csdn.net/qq_32101993/article/details/100021002
2、docker安装elasticsearch及head插件
https://www.cnblogs.com/afeige/p/10771140.html
3、Docker容器ElasticSearch-Head创建索引无响应406
https://blog.csdn.net/gang_luo/article/details/104210051/
4、docker搭建cerebro(elasticsearch监控工具)
https://blog.csdn.net/wyfsxs/article/details/89305935
5、使用Docker安装IK分词器
https://blog.csdn.net/qq_49470767/article/details/112463810
6、安装Kibana:7.6.2完整教程
https://blog.csdn.net/WoAiShuiGeGe/article/details/106647832
7、docker部署elk时汉化Kibana服务
https://www.cnblogs.com/abclife/p/12697866.html
8、docker logstash安装
https://blog.csdn.net/qq_33547169/article/details/86629261
9、docker安装canal同步mysql8与elasticsearch7数据
https://blog.csdn.net/daziyuanazhen/article/details/106098887
10、github——canal
- 0
- 0
-
赞助
赞赏 -
分享