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

使用Docker部署用于学习的ElasticSearch集群

作者头像
吴就业
发布2020-07-10 11:18:15
9900
发布2020-07-10 11:18:15
举报
文章被收录于专栏:Java艺术Java艺术

1

安装Docker

关于Docker入门可以看下我写的这篇《开发也需了解的运维知识之Docker》,也介绍了如何在Linux服务器上安装Docker

2

安装Docker Compose

由于是部署伪集群,以及需要安装kibana,因此还需要安装Docker-ComposeDocker-Compose负责实现对Docker容器集群的快速编排。

Docker-Compose项目是由Python编写的,而pipPython包管理工具,该工具提供了对Python包的查找、下载、安装、卸载的功能。因此,安装Docker-Compose之前,需要先安装Python环境,以及安装pip,再通过pip安装Docker-Compose

我其实并不懂Python,但是知其然知其所以然,还是要了解一下,为什么要使用pip安装Docker-Compose的。

使用yum安装pip

代码语言:javascript
复制
yum -y install python-pip

使用pip安装docker-compose

代码语言:javascript
复制
pip install docker-compose

这是我从网上找的一篇博客介绍的docker-compose的安装教程,可能这篇博客是很早以前写的,因此并不能安装成功。我跟着提示弄了大概一个多小时,过程就略过了。原因是python版本太低,需要使用yum安装新版本的pythonpip。我升级到3.4版本之后还是提示版本过低,安装不了。

代码语言:javascript
复制
RuntimeError: Python 3.5 or later is required

提示需要python3.5或更高的版本。根据提示,我又卸载了3.4版本,重新安装了3.6版本。

代码语言:javascript
复制
## 安装EPEL和IUS软件源
yum -y install epel-release
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
## 安装python和pip
yum -y install python36u
yum -y install python36u-pip

关于3.6版本的安装,可以参考这篇博客Centos7 通过yum安装python3,及virtualenv基本使用。

查看python3.6是否安装成功

代码语言:javascript
复制
[root@wujiuye01 data]# ls -la /usr/bin/python*
lrwxrwxrwx. 1 root root     7 Oct  8 17:14 /usr/bin/python -> python2
lrwxrwxrwx. 1 root root     9 Oct  8 17:14 /usr/bin/python2 -> python2.7
-rwxr-xr-x. 1 root root  7216 Aug  7  2019 /usr/bin/python2.7
lrwxrwxrwx  1 root root     9 Mar  8 16:39 /usr/bin/python3 -> python3.6
-rwxr-xr-x  2 root root 11408 Aug  8  2019 /usr/bin/python3.6
....

pip对应也是3.6版本

代码语言:javascript
复制
[root@wujiuye01 data]# ls -la /usr/bin/pip*
-rwxr-xr-x 1 root root 223 Mar  8 16:28 /usr/bin/pip
-rwxr-xr-x 1 root root 224 Mar  8 15:57 /usr/bin/pip2
-rwxr-xr-x 1 root root 224 Mar  8 15:57 /usr/bin/pip2.7
lrwxrwxrwx 1 root root   9 Mar  8 16:39 /usr/bin/pip-3 -> ./pip-3.6 #软链接
lrwxrwxrwx 1 root root   8 Mar  8 16:39 /usr/bin/pip-3.6 -> ./pip3.6 #软链接
-rwxr-xr-x 1 root root 407 Aug  8  2019 /usr/bin/pip3.6

因为我只是想安装docker-compose,就不想改pip软链接到pip3.6了,而是直接使用pip3.6安装。

代码语言:javascript
复制
pip-3.6 install docker-compose

如果想要卸载docker-compose,也是很简单。

代码语言:javascript
复制
pip-3.6 uninstall docker-compose

3

编写docker-compose.yml

Docker-Compose的工程配置文件默认为docker-compose.yml。我需要启动一个cerebro服务容器、一个kibana服务容器、两个elasticsearch服务容器,因此docker-compose.yml的配置如下。

来源于:https://github.com/onebirdrocks/geektime-ELK,稍有改动:

代码语言:javascript
复制
version: '2.2'
services:
  # cerebro
  cerebro:
    image: lmenezes/cerebro:0.8.3
    container_name: cerebro
    ports:
      - "9000:9000"
    command:
      - -Dhosts.0.host=http://【外网访问的es集群的ip或域名】:9200
    networks:
      - wjy-es-net
  # kibana
  kibana:
    image: docker.elastic.co/kibana/kibana:7.1.0
    container_name: kibana
    environment:
      - I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
    ports:
      - "5601:5601"
    networks:
      - wjy-es-net
  # elasticsearch节点1
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: es-node-01
    environment:
      - cluster.name=wjy-es-stu-cluster
      - node.name=es-node-01
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es-node-01,es-node-02
      - cluster.initial_master_nodes=es-node-01,es-node-02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - "/data/docker/es7cluster/es-node1-data:/usr/share/elasticsearch/data"
    ports:
      - "9200:9200"
    networks:
      - wjy-es-net
  # elasticsearch节点2
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: es-node-02
    environment:
      - cluster.name=wjy-es-stu-cluster
      - node.name=es-node-02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es-node-01,es-node-02
      - cluster.initial_master_nodes=es-node-01,es-node-02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - "/data/docker/es7cluster/es-node2-data:/usr/share/elasticsearch/data"
    networks:
      - wjy-es-net

networks:
  wjy-es-net:
    driver: bridge

关于docker-compose.yml配置文件:

  • version:指定docker-compose.yml的版本。
  • services:多个容器集合,它有多个子集,该子集是自定义的容器。
  • volumes:定义了卷信息,提供给services 中的具体容器使用。
  • networks:定义了网络信息,提供给services中的具体容器使用。

4

让服务后台运行,并查询容器启动情况

docker-compose相关命令

代码语言:javascript
复制
 # 启动
 docker-compose up
 # 后台启动
 docker-compose up -d
 # 停止
 docker-compose down
 # 停止容器并且移除数据
docker-compose down -v

第一次执行docker-compose up会很久,因为需要从远程拉取镜像文件,大概又是一个多小时。

可能出现问题一:

代码语言:javascript
复制
es7_01            | "stacktrace": ["org.elasticsearch.bootstrap.StartupException: ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];",
......
"Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes",
.....

容器卷本地目录没有权限访问,需要给目录添加写权限。

可能出现问题二:

代码语言:javascript
复制
es_node_02        | ERROR: [1] bootstrap checks failed
es_node_02        | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

elasticsearch用户拥有的内存权限太小,至少需要262144

代码语言:javascript
复制
## 切换到root用户,执行命令:
sysctl -w vm.max_map_count=262144

使用docker-compose up -d启动服务,让所有容器能够后台运行。使用docker命令查询容器。

代码语言:javascript
复制
[root@wujiuye01 es7cluster]# docker container ls
CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS              PORTS                              NAMES
04f51ce794f9        docker.elastic.co/kibana/kibana:7.1.0                 "/usr/local/bin/kiba…"   8 minutes ago       Up 3 minutes        0.0.0.0:5601->5601/tcp             kibana
ad50d72184d6        lmenezes/cerebro:0.8.3                                "/opt/cerebro/bin/ce…"   8 minutes ago       Up 3 minutes        0.0.0.0:9000->9000/tcp             cerebro
ea3c3e0aee7d        docker.elastic.co/elasticsearch/elasticsearch:7.1.0   "/usr/local/bin/dock…"   8 minutes ago       Up 3 minutes        9200/tcp, 9300/tcp                 es-node-02
a14d52910fe6        docker.elastic.co/elasticsearch/elasticsearch:7.1.0   "/usr/local/bin/dock…"   8 minutes ago       Up 3 minutes        0.0.0.0:9200->9200/tcp, 9300/tcp   es-node-01

* 服务器安全组记得开放相应的端口

  • ElasticSearch

http://【ip或域名】:9200

  • Cerebro

http://【ip或域名】:9000

  • Kibana

http://【ip或域名】:5601

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java艺术 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker-compose相关命令
  • 可能出现问题一:
  • 可能出现问题二:
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档