当前位置: 首页 > 编程笔记 >

docker安装ElasticSearch:7.8.0集群的详细教程

沙宣
2023-03-14
本文向大家介绍docker安装ElasticSearch:7.8.0集群的详细教程,包括了docker安装ElasticSearch:7.8.0集群的详细教程的使用技巧和注意事项,需要的朋友参考一下

ElasticSearch集群支持动态请求的方式搭建集群和静态配置文件搭建集群

关于集群的动态连接方式官方的文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html

前置准备工作

关于参数的官网说明:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html

下载elsticsearch 7.8.0

docker pull elasticsearch:7.8.0

创建一个网络es_net 用来放elasticsearch集群

docker network create --subnet=172.18.0.0/24 es_net

根据官网的dockerFile文件中的信息 WORKDIR /usr/share/elasticsearch可以得知 elasticsearch 的安装位置在/usr/share/elasticsearch目录下,为了方便后面的操作,创建数据卷将elasticsearch产生的数据映射到主机中,防止es宕机数据无法恢复。

创建数据卷

docker volume create es_data01
docker volume create es_data02
docker volume create es_data03
#公共配置文件,以及插件存放位置
docker volume create es_conf
docker volume create es_plugins

分别存放数据、配置、插件
创建3个yml配置文件

动态的方式搭建ElasticSearch集群(推荐)

意味着只要启动ElasticSearch然后通过ES自带的RestFul风格的操作既可以完成集群的搭建
dockerhub中官方的启动方式是单节点的启动
先单独启动3个ElasticSearch节点

启动es01

docker run -it -d --restart always -p 9201:9200 -p 9301:9300 \
--name es01 --network=es_net --ip=172.18.0.101 \
-v es_data01:/usr/share/elasticsearch/data \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

启动es02

docker run -it -d --restart always -p 9202:9200 -p 9302:9300 \
--name es02 --network=es_net --ip=172.18.0.102 \
-v es_data02:/usr/share/elasticsearch/data \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

启动es03

docker run -it -d --restart always -p 9203:9200 -p 9303:9300 \
--name es03 --network=es_net --ip=172.18.0.103 \
-v es_data03:/usr/share/elasticsearch/data \
-v es_conf:/usr/share/elasticsearch/conf \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

通过PUT方式
通过linux的curl命令操作即可
在es02和es03上通过

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 "persistent" : {
 "cluster" : {
 "remote" : {
 "leader" : {
  "seeds" : [
  "127.0.0.1:9300" 
  ]
 }
 }
 }
 }
}
'

更新persistent

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 "persistent" : {
 "indices.recovery.max_bytes_per_sec" : "50mb"
 }
}
'

更新transient

curl -X PUT "localhost:9200/_cluster/settings?flat_settings=true&pretty" -H 'Content-Type: application/json' -d'
{
 "transient" : {
 "indices.recovery.max_bytes_per_sec" : "20mb"
 }
}
'

删除transient配置内容

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 "transient" : {
 "indices.recovery.max_bytes_per_sec" : null
 }
}
'

删除所有transient设置

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
 "transient" : {
 "indices.recovery.*" : null
 }
}
'

ElasticSearch通过静态配置文件的方式启动集群

失败的原因应该是启动容器的时候应该少了参数。
官网文档 上说将来的版本不再使用discovery.zen.ping.unicast.hosts也就变成discovery.seed_hosts

es-node1节点的配置文件信息

vim /var/lib/docker/volumes/es_conf/_data/es01.yml

请修改注释行宿主机ip,以及es集群通信的端口地址

cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231 #修改为docker的宿主机ip
http.port: 9200 #这个是容器内部的,所以不用改
transport.tcp.port: 9300 #这个是容器内部的,所以不用改
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true 
discovery.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"] 
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
#使用一台主机的不同端口搭建,在启动docker容器的时候通过-p指定映射端口

通过上述配置文件中可知需要映射端口分别是9300、9301、9302,这些端口是用来进行集群通信的
也就是三个节点绑定端口分别是-p 9300:9300,-p 9301:9300,-p 9302:9300,
同时我们可以推出使用-p 9200:9200,-p 9201:9200,-p 9202:9200

做成表格:

节点 绑定宿主机端口1 绑定宿主机端口2
es-node1 9200 9300
es-node2 9201 9301
es-node3 9202 9301
作用 对外提供服务的端口 es1-es3集群间进行通讯的端口
也就是说宿主机(192.168.117.231)的9200-9202,9300-9302端口都会被es集群使用

es-node2节点的配置文件信息

vim /var/lib/docker/volumes/es_conf/_data/es02.yml

与es-node1不同的地方就是节点名改一下

cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231 #修改为docker的宿主机ip
http.port: 9200 #这个是容器内部的,所以不用改
transport.tcp.port: 9300 #这个是容器内部的,所以不用改
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true 
discovery.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
#使用一台主机的不同端口搭建,在启动docker容器的时候通过-p指定映射端口

es-node3节点的配置文件信息

vim /var/lib/docker/volumes/es_conf/_data/es02.yml

与es-node1不同的地方就是节点名改一下

cluster.name: elasticsearch-cluster
node.name: es-node3
network.bind_host: 0.0.0.0
network.publish_host: 192.168.117.231 #修改为docker的宿主机ip
http.port: 9200 #这个是容器内部的,所以不用改
transport.tcp.port: 9300 #这个是容器内部的,所以不用改
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true 
node.data: true 
discovery.seed_hosts: ["192.168.117.231:9300","192.168.117.231:9301","192.168.117.232:9302"]
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
#使用一台主机的不同端口搭建,在启动docker容器的时候通过-p指定映射端口

依次启动集群

es-node1启动命令,docker进程别名es01

使用的网络是上面创建的网卡es_net,指定节点的内部网络ip 172.18.0.100需要和es_net同网段

docker run -it -d --restart always -p 9200:9200 -p 9300:9300 \
--name es01 --network=es_net --ip=172.18.0.100 \
-v es_data01:/usr/share/elasticsearch/data \
-v /var/lib/docker/volumes/es_conf/_data/es01.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

ES_JAVA_OPTS指定使用的es的内存,防止启动es占用太多内存空间
--restart always开机自启
数据卷映射略,唯一需要注意的是配置文件es01.yml映射到了内部的es启动时,引使用的配置文件。

es-node2启动命令

docker run -it -d --restart always -p 9201:9200 -p 9301:9300 \
--name es02 --network=es_net --ip=172.18.0.101 \
-v es_data02:/usr/share/elasticsearch/data \
-v /var/lib/docker/volumes/es_conf/_data/es02.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

es-node3启动命令

docker run -it -d --restart always -p 9202:9200 -p 9302:9300 \
--name es03 --network=es_net --ip=172.18.0.102 \
-v es_data03:/usr/share/elasticsearch/data \
-v /var/lib/docker/volumes/es_conf/_data/es03.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es_plugins:/usr/share/elasticsearch/plugins \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.8.0

到此这篇关于docker安装ElasticSearch:7.8.0集群的文章就介绍到这了,更多相关docker安装ElasticSearch集群内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 为了更好地支持 Win10 程序的开发,微软发布了 VS2015。VS2015 支持开发人员编写跨平台的应用程序,从 Windows 到 Mac、Linux、甚至是编写 iOS 和 Android 代码! VS2015 共有三个版本,分别是:社区版(Community):免费提供给单个开发人员、 开放源代码项目、科研、教育以及小型专业团队!大部分程序员(包括初学者)可以无任何经济负担、合法地使用

  • 本文向大家介绍linux安装RabbitMQ详细教程,包括了linux安装RabbitMQ详细教程的使用技巧和注意事项,需要的朋友参考一下 一、RabbitMQ概念 RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好

  • 本文向大家介绍给ubuntu18安装python3.7的详细教程,包括了给ubuntu18安装python3.7的详细教程的使用技巧和注意事项,需要的朋友参考一下 参考文章 ubuntu源码安装python3 linux 编译安装python3.6的教程详解 准备工作 安装工具 正式开始 下载python文件 解压源码包 创建python安装路径 安装python 添加环境变量 在结尾添加 添加用

  • 本文向大家介绍CentOS 8 安装 MariaDB的详细教程,包括了CentOS 8 安装 MariaDB的详细教程的使用技巧和注意事项,需要的朋友参考一下 MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。Ma

  • 本文向大家介绍linux上mysql安装详细教程,包括了linux上mysql安装详细教程的使用技巧和注意事项,需要的朋友参考一下 所有平台的MySQL下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台。 MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。 MySQL-client - M

  • 本文向大家介绍CentOS安装solr 4.10.3详细教程,包括了CentOS安装solr 4.10.3详细教程的使用技巧和注意事项,需要的朋友参考一下 Solr是什么? Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr是一个全文检