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

网友投稿 270 2022-10-22

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

引言

本文代码已提交至Github,有兴趣的同学可以下载来看看:​​-Linux环境下安装Elasticsearch》​​​​《分布式系列教程(37) -Linux下搭建ElasticSearch集群》​​

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

​​《淘东电商项目(38) -Docker下安装ES&Kibana(一次填完所有的坑)》​​

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

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集群,以端口号区分,分别为​​9301​​​和​​9302​​。

2.1 配置文件

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

cluster.name: elasticsearch-clusternode.name: es-node1network.bind_host: 0.0.0.0network.publish_host: 192.168.162.1349201transport.tcp.port: 9301true"*"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地址

data-id="t4606665-op3eK7ME" style="min-width: auto; overflow-wrap: break-word; margin: 4px 8px; border: 1px solid rgb(217, 217, 217); padding: 4px 8px; cursor: default; vertical-align: top;">

设置对外服务的data-id="t6b20032-WqQ3ZRIa" style="">

transport.tcp.port

设置节点间交互的tcp端口

data-id="t4606665-J87XKHIa" style="min-width: auto; overflow-wrap: break-word; margin: 4px 8px; border: 1px solid rgb(217, 217, 217); padding: 4px 8px; cursor: default; vertical-align: top;">

是否允许跨域

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/localmkdir -p es/configcd esmkdir data1mkdir data2mkdir plugins1mkdir plugins2

​2.开启防火墙端口​

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

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

cd /usr/local/es/configvi es1.yml

配置内容如下:

cluster.name: elasticsearch-clusternode.name: es-node1network.bind_host: 0.0.0.0network.publish_host: 192.168.162.1349201transport.tcp.port: 9301true"*"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/configvi es2.yml

配置内容如下:

cluster.name: elasticsearch-clusternode.name: es-node2network.bind_host: 0.0.0.0network.publish_host: 192.168.162.1349202transport.tcp.port: 9302true"*"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/plugins1mkdir ikcd /usr/local/es/plugins2mkdir ikcd /usr/local/es/plugins1/ikwget elasticsearch-analysis-ik-7.6.1.zipcp elasticsearch-analysis-ik-7.6.1.zip /usr/local/es/plugins2/ikcd /usr/local/es/plugins2/ikunzip 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/data1chmod 777 /usr/local/es/data2

移除容器再次启动:

docker rm ES01docker 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. 测试

浏览器访问:​​​总结

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解决Docker拉取慢的问题
下一篇:Java十分钟精通多态与抽象类的使用与原理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~