docker compose安装运行ELK之Elasticsearch集群

1.docker compose简介

docker compose是docker容器的管理工具,通过这个可以一键启动多个docker容器,也可对单个容器进行操作,对于集群项目是非常方便的。

2.安装docker和docker compose

2.1下载docker,并安装https://www.runoob.com/docker/centos-docker-install.html

2.2 由于docker compose并没有集成在docker中,所以还需要下载并安装docker compose:https://docs.docker.com/compose/install/

3. 整个ELK的目录结构(想要构建整个elk,请查看我的其他博客,我将elk拆分成了4个博客)

 在linux下创建了一个elk文件夹,elk的所有文件都放在了里面

docker compose安装运行ELK之Elasticsearch集群_第1张图片

4. 编辑docker-compose.yml配置文件

version: '3'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0 #镜像名
    container_name: es-01 #容器名
    environment: #指定变量,相当于是直接在启动命令行上指定参数,具体能指定哪些参数要看该镜像支持哪些参数
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #指定es的内存大小
    ulimits:  #生产环境需要配置的系统配置
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes: #挂载,格式为 本地卷:docker容器中卷       
      - /usr/local/workspace/elk/elasticsearch/data/es01:/usr/share/elasticsearch/data
      - /usr/local/workspace/elk/elasticsearch/config/es01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /usr/local/workspace/elk/elasticsearch/logs/es01:/user/share/elasticsearch/logs
    ports:
      - 9200:9200 
      - 9300:9300 #es集群之间通信的端口,不可省略,否则,集群状态下会端口冲突
    networks:           #指定该容器使用的网络
      - esnet
es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
    container_name: es-02
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - /usr/local/workspace/elk/elasticsearch/data/es02:/usr/share/elasticsearch/data
      - /usr/local/workspace/elk/elasticsearch/config/es02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /usr/local/workspace/elk/elasticsearch/logs/es02:/user/share/elasticsearch/logs
    ports:
      - 9201:9200
      - 9301:9300
    networks:           #可以使用自建网络
      - esnet
networks:
  esnet:

注意点:由于这两个服务都是用的同一个外网esnet,所以es02 的ports 必须修改,否则端口冲突

5.编辑elasticsearch.yml配置文件

cluster.name: es-cluster #集群名
network.host: 0.0.0.0 
node.name: es-01
node.master: true
node.data: true
http.port: 9200
#可省略不写,默认3000,只要docker-compose.yml文件中有端口映射到该容器的3000就行
#transport.tcp.port: 9300

#集群最小的主节点数
discovery.zen.minimum_master_nodes: 1
 
#当最少几个节点回复之后,集群就正常工作
gateway.recover_after_nodes: 1
#head所需要使用的,否则head连接不了集群
http.cors.enabled: true 
http.cors.allow-origin: "*"

#集群初始化时指定的主节点
cluster.initial_master_nodes: ["es-01", "es-02"] 

#discovery.zen.ping.unicast.hosts属性已过时,用discovery.seed_hosts代替,且使用9300等集群通信端口
discovery.seed_hosts: ["192.168.20.101:9300","192.168.20.101:9301"]
#discovery.zen.ping.unicast.hosts: ["192.168.20.101:9300","192.168.20.101:9301"]

bootstrap.memory_lock: true
bootstrap.system_call_filter: false

#指定一下容器中logs的位置,以便docker-compose可以正确挂载logs地址
path.logs: /usr/share/elasticsearch/logs

es-01和es-02节点使用的配置基本一致,只需要修改node.name就行,http.port等都可以使用9200,docker-compose指定主机不同端口映射就行了

6. 启动docker compose

在有docker-compose.yml的目录下运行: docker-compose up,即可启动docker-compose up

7.遇到的问题

7.1 目录无权限

docker compose安装运行ELK之Elasticsearch集群_第2张图片

给存放data的目录赋予权限:chown 1000:1000 data

7.2  Failed to bind to [9300-9400]

将network.host设置为0.0.0.0,不能设置为192.168.xx.xx

7.3 报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [655360]

vi /etc/sysctl.conf
添加以下代码:
vm.max_map_count = 655360
保存后执行
sysctl -p
使得配置生效

至于这个数值设置多大,是看你用的elasticsearch版本的,可以去官网看一下

你可能感兴趣的:(docker compose安装运行ELK之Elasticsearch集群)