淘东电商项目(44) -Docker下搭建ElasticSearch集群

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 淘东电商项目(44) -Docker下搭建ElasticSearch集群

引言

本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop

之前我写过在Linux下安装ElasticSearch以及搭建集群:

同时也讲解了在Docker下安装ElasticSearch:

大家在阅读本文之前可以阅读上面的三篇博客,有助于解决遇到的问题。

ElasticSearch在不同环境下的安装基本讲完,剩下的就是在Docker下安装ElasticSearch集群,本文来讲解下。

本文目录结构:

l____引言

l____ 1. 为什么要安装ElasticSearch集群?

l____ 2. Docker下安装ElasticSearch集群的步骤

l________ 2.1 配置文件

l________ 2.2 以挂载的方式docker启动es

l____ 3. 测试

l____ 4. 总结

1. 为什么要安装ElasticSearch集群?

「淘东电商」项目接下来将要讲解 “商品搜索” 功能,项目使用的是SpringBoot开发的,需要引入spring-boot-starter-data-elasticsearch依赖,要求ES必须以集群的方式连接,否则会报错,如下:

ERROR:None of the configured nodes are available.

下面开始讲解如何在docker下安装es集群。

2. Docker下安装ElasticSearch集群的步骤

由于机子的性能问题,只能在同一个虚拟机里搭建两个es集群,以端口号区分,分别为93019302

2.1 配置文件

先贴上配置文件的模板代码:

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.162.134
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.162.134:9301","192.168.162.134:9302"]
discovery.zen.minimum_master_nodes: 1
字段名字 解析
cluster.name 集群名字
node.name 节点名字
network.bind_host 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0
network.publish_host 实际服务器ip地址
http.port 设置对外服务的http端口
transport.tcp.port 设置节点间交互的tcp端口
http.cors.enabled 是否允许跨域
node.master 指定该节点是否有资格被选举成为node
node.data 指定该节点是否存储索引数据
discovery.zen.ping.unicast.hosts 多个服务集群ip
discovery.zen.minimum_master_nodes 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点

2.2 以挂载的方式docker启动es

1.创建es配置文件目录

cd /usr/local
mkdir -p es/config
cd es
mkdir data1
mkdir data2
mkdir  plugins1
mkdir  plugins2

2.开启防火墙端口

firewall-cmd --add-port=9301/tcp
firewall-cmd --add-port=9302/tcp

3.进入config目录,新建es1.yml,填写配置内容:

cd /usr/local/es/config
vi es1.yml

配置内容如下:

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.162.134
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.162.134:9301","192.168.162.134:9302"]
discovery.zen.minimum_master_nodes: 1

4.进入config目录,新建es2.yml,填写配置内容:

cd /usr/local/es/config
vi es2.yml

配置内容如下:

cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.162.134
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true  
discovery.zen.ping.unicast.hosts: ["192.168.162.134:9301","192.168.162.134:9302"]
discovery.zen.minimum_master_nodes: 1

5.进入插件目录下载中文ik分词器(注意版本要和ES版本一致):

cd /usr/local/es/plugins1
mkdir ik
cd /usr/local/es/plugins2
mkdir ik
cd /usr/local/es/plugins1/ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch-analysis-ik-7.6.1.zip
unzip elasticsearch-analysis-ik-7.6.1.zip
cp elasticsearch-analysis-ik-7.6.1.zip /usr/local/es/plugins2/ik
cd /usr/local/es/plugins2/ik
unzip elasticsearch-analysis-ik-7.6.1.zip

6.docker以挂载的方式启动第一个ES容器:

docker run \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-d -p 9201:9201 -p 9301:9301 \
-v /usr/local/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/es/plugins1:/usr/share/elasticsearch/plugins \
-v /usr/local/es/data1:/usr/share/elasticsearch/data \
--name ES01 elasticsearch:7.6.1

查看日志发现报错了:

docker logs -f ES01

这是由于宿主主机的data文件夹没有读写权限导致的,所以赋予权限:

chmod 777 /usr/local/es/data1
chmod 777 /usr/local/es/data2

移除容器再次启动:

docker rm ES01
docker run \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-d -p 9201:9201 -p 9301:9301 \
-v /usr/local/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/es/plugins1:/usr/share/elasticsearch/plugins \
-v /usr/local/es/data1:/usr/share/elasticsearch/data \
--name ES01 elasticsearch:7.6.1

从日志里可以看到启动成功:

7.docker以挂载的方式启动第二个ES容器:

docker run \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-d -p 9202:9202 -p 9302:9302 \
-v /usr/local/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/es/plugins2:/usr/share/elasticsearch/plugins \
-v /usr/local/es/data2:/usr/share/elasticsearch/data \
--name ES02 elasticsearch:7.6.1

3. 测试

浏览器访问:http://192.168.162.134:9201/_cat/nodes?pretty,可以看到集群节点,说明ES集群搭建成功:

如果报如下错误,解决方案参考我的博客《解决es集群启动完成后报master_not_discovered_exception》

4. 总结

本文主要讲解在Docker下搭建ElasticSearch集群的方式,以及常见的填坑方法。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
索引
elasticsearch集群健康状态查看
elasticsearch集群健康状态查看
9 2
|
2月前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
113 0
|
2月前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
181 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
1月前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
111 0
|
7天前
|
算法 Nacos Docker
docker部署nacos集群
docker部署nacos集群
17 0
|
7天前
|
Java 应用服务中间件 Docker
【Docker】部署启动java项目
【Docker】部署启动java项目
15 2
|
7天前
|
NoSQL Redis Docker
使用Docker搭建Redis主从集群
使用Docker搭建Redis主从集群
20 1
|
13天前
|
Java Linux 虚拟化
Docker 部署spring-boot项目(超详细 包括Docker详解、Docker常用指令整理等)
Docker 部署spring-boot项目(超详细 包括Docker详解、Docker常用指令整理等)
53 1
|
13天前
|
存储 Kubernetes Docker
构建高效稳定的Docker容器集群:从原理到实践
【4月更文挑战第19天】 在当今微服务架构盛行的时代,容器化技术已经成为了软件开发和部署的标准实践。本文深入探讨了如何利用Docker容器技术,结合Kubernetes集群管理工具,构建一个高效、稳定且可扩展的容器化环境。文章首先简述了Docker的核心原理及其优势,接着详细阐述了Kubernetes的基本概念与组件,最后通过一个实际案例来指导读者如何从零开始搭建并优化一个基于Docker和Kubernetes的容器集群系统。
20 1
|
20天前
|
Linux Docker 容器
使用Docker来安装ElasticSearch,并且配置ik分词器
使用Docker来安装ElasticSearch,并且配置ik分词器
32 0