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_data01docker volume create es_data02docker volume create es_data03#公共配置文件,以及插件存放位置docker volume create es_confdocker 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-clusternode.name: es-node1network.bind_host: 0.0.0.0network.publish_host: 192.168.117.231 #修改为docker的宿主机iphttp.port: 9200 #这个是容器内部的,所以不用改transport.tcp.port: 9300 #这个是容器内部的,所以不用改http.cors.enabled: truehttp.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: 2indices.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
做成表格: |