使用docker快速部署Elasticsearch集群

 2023-12-24  阅读 2  评论 0

摘要:ElasticSearch是一个基于Lucene的搜索主机。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。 本文将使用docker容器(使用docker-compose编排)快速部

使用docker快速部署Elasticsearch集群

ElasticSearch是一个基于Lucene的搜索主机。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。

本文将使用docker容器(使用docker-compose编排)快速部署Elasticsearch 集群,可用于开发环境(单机多实例)或生产环境部署。

注意,6.x版本已经不能通过 -Epath.config 参数去指定配置文件的加载位置,文档说明:

For the archive distributions, the config directory location defaults to $ES_HOME/config. The location of the >config directory can be changed via the ES_PATH_CONF environment variable as follows:
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
Alternatively, you can export the ES_PATH_CONF environment variable via the command line or via your shell profile.

即交给环境变量 ES_PATH_CONF 来设定了,单机部署多个实例且不使用容器的同学多多注意。

准备工作

安装 docker & docker-compose

这里推进使用 daocloud 做个加速安装:

#docker  curl -sSL https://get.daocloud.io/docker | sh    #docker-compose  curl -L   https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m`   > /usr/local/bin/docker-compose    chmod +x /usr/local/bin/docker-compose    #查看安装结果  docker-compose -v

数据目录

#创建数据/日志目录 这里我们部署3个节点  mkdir /opt/elasticsearch/data/{node0,nod1,node2} -p  mkdir /opt/elasticsearch/logs/{node0,nod1,node2} -p  cd /opt/elasticsearch  #权限我也很懵逼啦 给了 privileged 也不行 索性0777好了  chmod 0777 data/* -R && chmod 0777 logs/* -R    #防止JVM报错  echo vm.max_map_count=262144 >> /etc/sysctl.conf  sysctl -p

docker-compse 编排服务

创建编排文件

vim docker-compose.yml

参数说明

- cluster.name=elasticsearch-cluster

集群名称

- node.name=node0
- node.master=true
- node.data=true

节点名称、是否可作为主节点、是否存储数据

- bootstrap.memory_lock=true

锁定进程的物理内存地址避免交换(swapped)来提高性能

- http.cors.enabled=true
- http.cors.allow-origin=*

开启cors以便使用Head插件

- "ES_JAVA_OPTS=-Xms512m -Xmx512m"

JVM内存大小配置

- "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
- "discovery.zen.minimum_master_nodes=2"

由于5.2.1后的版本是不支持多播的,所以需要手动指定集群各节点的tcp数据交互地址,用于集群的节点发现failover,默认缺省9300端口,如设定了其它端口需另行指定,这里我们直接借助容器通信,也可以将各节点的9300映射至宿主机,通过网络端口通信。

设定failover选取的quorum = nodes/2 + 1

当然,也可以挂载自己的配置文件,ES镜像的配置文件是/usr/share/elasticsearch/config/elasticsearch.yml,挂载如下:

volumes:   - path/to/local/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro

docker-compose.yml

version: '3'  services:   elasticsearch_n0:    image: elasticsearch:6.6.2    container_name: elasticsearch_n0    privileged: true    environment:     - cluster.name=elasticsearch-cluster     - node.name=node0     - node.master=true     - node.data=true     - bootstrap.memory_lock=true     - http.cors.enabled=true     - http.cors.allow-origin=*     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"     - "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"     - "discovery.zen.minimum_master_nodes=2"    ulimits:     memlock:      soft: -1      hard: -1    volumes:     - ./data/node0:/usr/share/elasticsearch/data     - ./logs/node0:/usr/share/elasticsearch/logs    ports:     - 9200:9200   elasticsearch_n1:    image: elasticsearch:6.6.2    container_name: elasticsearch_n1    privileged: true    environment:     - cluster.name=elasticsearch-cluster     - node.name=node1     - node.master=true     - node.data=true     - bootstrap.memory_lock=true     - http.cors.enabled=true     - http.cors.allow-origin=*     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"     - "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"     - "discovery.zen.minimum_master_nodes=2"    ulimits:     memlock:      soft: -1      hard: -1    volumes:     - ./data/node1:/usr/share/elasticsearch/data     - ./logs/node1:/usr/share/elasticsearch/logs    ports:     - 9201:9200   elasticsearch_n2:    image: elasticsearch:6.6.2    container_name: elasticsearch_n2    privileged: true    environment:     - cluster.name=elasticsearch-cluster     - node.name=node2     - node.master=true     - node.data=true     - bootstrap.memory_lock=true     - http.cors.enabled=true     - http.cors.allow-origin=*     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"     - "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"     - "discovery.zen.minimum_master_nodes=2"    ulimits:     memlock:      soft: -1      hard: -1    volumes:     - ./data/node2:/usr/share/elasticsearch/data     - ./logs/node2:/usr/share/elasticsearch/logs    ports:     - 9202:9200

这里我们分别为node0/node1/node2开放宿主机的9200/9201/9202作为http服务端口,各实例的tcp数据传输用默认的9300通过容器管理通信。

如果需要多机部署,则将EStransport.tcp.port: 9300端口映射至宿主机xxxx端口,discovery.zen.ping.unicast.hosts填写各主机代理的地址即可:

#比如其中一台宿主机为192.166.6.1.100    ...    - "discovery.zen.ping.unicast.hosts=192.166.6.1.100:9300,192.166.6.1.101:9300,192.166.6.1.102:9300"    ...  ports:   ...   - 9300:9300

创建并启动服务

[root@localhost elasticsearch]# docker-compose up -d  [root@localhost elasticsearch]# docker-compose ps     Name          Command        State        Ports         --------------------------------------------------------------------------------------------  elasticsearch_n0  /usr/local/bin/docker-entr ...  Up   0.0.0.0:9200->9200/tcp, 9300/tcp  elasticsearch_n1  /usr/local/bin/docker-entr ...  Up   0.0.0.0:9201->9200/tcp, 9300/tcp  elasticsearch_n2  /usr/local/bin/docker-entr ...  Up   0.0.0.0:9202->9200/tcp, 9300/tcp    #启动失败查看错误  [root@localhost elasticsearch]# docker-compose logs  #最多是一些访问权限/JVM vm.max_map_count 的设置问题

查看集群状态

192.166.6.20.6 是我的主机地址

访问http://192.166.6.20.6:9200/_cat/nodes?v即可查看集群状态:

ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name  172.25.0.3      36     98 79  3.43  0.88   0.54 mdi    *   node0  172.25.0.2      48     98 79  3.43  0.88   0.54 mdi    -   node2  172.25.0.4      42     98 51  3.43  0.88   0.54 mdi    -   node1

验证 Failover

通过集群接口查看状态

模拟主节点下线,集群开始选举新的主节点,并对数据进行迁移,重新分片。

[root@localhost elasticsearch]# docker-compose stop elasticsearch_n0  Stopping elasticsearch_n0 ... done

集群状态(注意换个http端口 原主节点下线了),down掉的节点还在集群中,等待一段时间仍未恢复后就会被剔出

ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name  172.25.0.2      57     84  5  0.46  0.65   0.50 mdi    -   node2  172.25.0.4      49     84  5  0.46  0.65   0.50 mdi    *   node1  172.25.0.3                            mdi    -   node0

等待一段时间

ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name  172.25.0.2      44     84  1  0.10  0.33   0.40 mdi    -   node2  172.25.0.4      34     84  1  0.10  0.33   0.40 mdi    *   node1

恢复节点 node0

[root@localhost elasticsearch]# docker-compose start elasticsearch_n0  Starting elasticsearch_n0 ... done

等待一段时间

ip     heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name  172.25.0.2      52     98 25  0.67  0.43   0.43 mdi    -   node2  172.25.0.4      43     98 25  0.67  0.43   0.43 mdi    *   node1  172.25.0.3      40     98 46  0.67  0.43   0.43 mdi    -   node0

配合 Head 插件观察

git clone git://github.com/mobz/elasticsearch-head.git  cd elasticsearch-head  npm install  npm run start

集群状态图示更容易看出数据自动迁移的过程

1、集群正常 数据安全分布在3个节点上

2、下线 node1 主节点 集群开始迁移数据

迁移中

迁移完成

3、恢复 node1 节点

问题小记

elasticsearch watermark

部署完后创建索引发现有些分片处于 Unsigned 状态,是由于 elasticsearch watermark:low,high,flood_stage的限定造成的,默认硬盘使用率高于85%就会告警,开发嘛,手动关掉好了,数据会分片到各节点,生产自行决断。

curl -X PUT http://192.166.6.20.6:9201/_cluster/settings   -H 'Content-type':'application/json'   -d '{"transient":{"cluster.routing.allocation.disk.threshold_enabled": false}}'

提示:现在腾讯云新人点击注册然后实名认证后,可以点此一键领取2860元代金券,然后点此进入腾讯云活动页面参加优惠力度非常大的腾讯云3年和5年时长服务器活动,一次性买多年,免得续费贵,这样就可以获得最大的优惠折扣,省钱。

版权声明:xxxxxxxxx;

原文链接:https://lecms.nxtedu.cn/yunzhuji/130976.html

发表评论:

验证码

管理员

  • 内容1196554
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:admin@qq.com
注册登录
注册帐号
登录帐号

Copyright © 2022 LECMS Inc. 保留所有权利。 Powered by LECMS 3.0.3

页面耗时0.0125秒, 内存占用366.34 KB, 访问数据库18次

  • 我要关灯
    我要开灯
  • 客户电话
    lecms

    工作时间:8:00-18:00

    客服电话

    电子邮件

    admin@qq.com

  • 官方微信

    扫码二维码

    获取最新动态

  • 返回顶部