前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于 Docker 快速部署 Elasticsearch 集群

基于 Docker 快速部署 Elasticsearch 集群

作者头像
茶半香初
发布2021-11-26 14:19:11
1.5K0
发布2021-11-26 14:19:11
举报
文章被收录于专栏:程序员那点事
  1. 环境准备
    1. docker、docker-compose安装(https://docs.docker.com/compose/install/)
代码语言:javascript
复制
#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
  1. 创建elasticsearch数据、日志存放目录
代码语言:javascript
复制
#创建数据/日志目录 这里我们部署3个节点
mkdir /root/app/elasticsearch/data/{node0,node1,node2} -p
mkdir /root/app/elasticsearch/logs/{node0,node1,node2} -p
cd /opt/elasticsearch
#权限
chmod 0777 data/* -R && chmod 0777 logs/* -R

#防止JVM报错
echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p
  1. 创建docker-compose编排文件

在刚刚新建的目录(/root/app/elasticsearch)创建docker-compose.yml文件,基于镜像elasticsearch:7.4.0

代码语言:javascript
复制
ersion: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data/node0:/usr/share/elasticsearch/data
      - ./logs/node0:/usr/share/elasticsearch/logs
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data/node1:/usr/share/elasticsearch/data
      - ./logs/node1:/usr/share/elasticsearch/logs
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./logs/node2:/usr/share/elasticsearch/data
      - ./logs/node2:/usr/share/elasticsearch/logs
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

参数说明:

  • 集群名称:cluster.name=es-docker-cluster
  • 节点名称:node.name=es01
  • 是否可作为主节点:node.master=true
  • 是否存储数据:node.data=true
  • 锁定进程的物理内存地址避免交换(swapped)来提高性能:bootstrap.memory_lock=true
  1. 创建并启动服务
代码语言:javascript
复制
#启动
docker-compose up -d
#查看
docker-compose ps

可以运行 curl -X GET “localhost:9200/_cat/nodes?v&pretty” 查看集群信息

  1. 安装Head插件(https://github.com/mobz/elasticsearch-head
代码语言:javascript
复制
git clone git://github.com/mobz/elasticsearch-head.git

安装完成 在cmd窗口执行node -v查看node.js的版本号 检查是否安装成功

  • 安装grunt
代码语言:javascript
复制
npm install -g grunt-cli

通过node.js的包管理器npm安装grunt为全局命宁,grunt是基于Node.js的项目构建工具

  • 执行 npm install (不执行该命宁 使用grunt server命令会报错)
代码语言:javascript
复制
npm install
  • 启动elasticsearch-head服务
代码语言:javascript
复制
cd ~/app/elasticsearch-head
grunt server
#如果后台启动 运行 nohup grunt server &exit
  • 停止elasticsearch-head服务

如果是后台运行的elasticsearch-head服务,只能通过kill 端口停止服务

代码语言:javascript
复制
#通过lsof -i找到端口对应的进程(PID)
lsof -i:9100
#kill调对应的进程
kill -9 6076

注意:启动如果报一下错误:

代码语言:javascript
复制
1. >>Local Npm module "grunt-contrib-clean" not found. Is it installed?
2. >> Local Npm module "grunt-contrib-concat" not found. Is it installed?
3. >> Local Npm module "grunt-contrib-watch" not found. Is it installed?
4. >> Local Npm module "grunt-contrib-connect" not found. Is it installed?
5. >> Local Npm module "grunt-contrib-copy" not found. Is it installed?
6. >> Local Npm module "grunt-contrib-jasmine" not found. Is it installed?
Warning: Task "connect:server" not found. Use --force to continue.

在elasticsearch-head目录下运行一下命令:

代码语言:javascript
复制
npm install grunt-contrib-clean --registry=https://registry.npm.taobao.org
npm install grunt-contrib-concat --registry=https://registry.npm.taobao.org
npm install grunt-contrib-watch --registry=https://registry.npm.taobao.org
npm install grunt-contrib-connect --registry=https://registry.npm.taobao.org
npm install grunt-contrib-copy --registry=https://registry.npm.taobao.org
npm install grunt-contrib-jasmine --registry=https://registry.npm.taobao.org
  • 查看效果

head主控页面是可以显示的,但是显示连接失败,出现了‘集群健康值:未连接’,如何解决这个问题呢?

  • 检查是否开启了跨域

出现这种错误首先检查配置文件是否开启了跨域(http.cors.enabled)和http.cors.allow-origin,http.cors.enabled:默认是false,表示是否运行跨域;http.cors.allow-origin:当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。 /https?:\/\/localhost(:[0-9]+)?/

  • 如果是自己的服务器的话,还需要做以下修改
代码语言:javascript
复制
#修改elasticsearch-head/_site/app.js
#找到app-base_uri关键字,并且把localhost修改为自己的ip
  • 再次查看效果

连接地址成功换成了自己的IP,集群健康值也变成了绿色

后续文章介绍如何使用…

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档