⚠️⚠️⚠️该教程基于docker- compose建立伪集群,仅适用于开发和测试中使用

1、建立项目目录及各配置文件。

  • 首先创建一些需要映射的目录:
    root@ubuntu:~# mkdir -p es/data
    root@ubuntu:~# mkdir -p es/logs
    root@ubuntu:~# ll es/
    total 16
    drwxr-xr-x 4 root root 4096 Jan 10 02:25 ./
    drwxr-xr-x 4 root root 4096 Jan 10 02:25 ../
    drwxr-xr-x 2 root root 4096 Jan 10 02:25 data/
    drwxr-xr-x 2 root root 4096 Jan 10 02:25 logs/
    root@ubuntu:~#
  • 然后创建docker-compose.yml配置文件
    version: '3'
    services:
    es_node0:
    image: elasticsearch:7.16.2
    container_name: es_node0
    privileged: true
    environment:
    - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
    memlock:
    soft: -1
    hard: -1
    volumes:
    - $PWD/es_node0.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    - $PWD/data/node0:/usr/share/elasticsearch/data
    - $PWD/logs/node0:/usr/share/elasticsearch/logs
    ports:
    - 29200:9200
    - 29300:9300
    es_node1:
    image: elasticsearch:7.16.2
    container_name: es_node1
    privileged: true
    environment:
    - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
    memlock:
    soft: -1
    hard: -1
    volumes:
    - $PWD/es_node1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    - $PWD/data/node1:/usr/share/elasticsearch/data
    - $PWD/logs/node1:/usr/share/elasticsearch/logs
    ports:
    - 29201:9200
    - 29301:9301
    es_node2:
    image: elasticsearch:7.16.2
    container_name: es_node2
    privileged: true
    environment:
    - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
    memlock:
    soft: -1
    hard: -1
    volumes:
    - $PWD/es_node2.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    - $PWD/data/node2:/usr/share/elasticsearch/data
    - $PWD/logs/node2:/usr/share/elasticsearch/logs
    ports:
    - 29202:9200
    - 29302:9302
    kibana:
    image: kibana:7.16.2
    container_name: kibana
    environment:
    - SERVER_NAME=kibana
    - ELASTICSEARCH_HOSTS=["http://es_node0:9200","http://es_node1:9201","http://es_node2:9202"]
    - XPACK_MONITORING_ENABLED=true
    ports:
    - 25601:5601
    depends_on:
    - es_node0

⚠️:因为我的防火墙限制这台机器仅20000-30000端口能开放,所以我的容器端口映射出来都是20000+的端口,你们按照自己的实际情况去配置即可。

  • node0的配置

    # 集群名称,三个节点要一致
    cluster.name: es-cluster
    # 当前节点名称
    node.name: node0
    # 是否有资格作为主节点
    node.master: true
    # 是否存储数据
    node.data: true
    # 最⼤集群节点数
    node.max_local_storage_nodes: 3
    # 监听host
    network.host: 0.0.0.0
    # 容器内服务端⼝ 默认9200即可
    http.port: 9200
    # 内部节点之间通信端⼝
    transport.tcp.port: 9300
    # es7.x之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
    discovery.seed_hosts: ["es_node0:9300","es_node1:9301","es_node2:9302"]
    # es7.x之后新增的配置,初始化集群时需要此配置来选举master,此处的node名称为各节点配置文件中的节点名称
    cluster.initial_master_nodes: ["node0", "node1", "node2"]
    http.cors.allow-origin: "*"
    http.cors.enabled: true
    http.cors.allow-credentials: true
  • node1和node2的配置(node1和node2配置基本一致)

    # 集群名称 三个节点要一致
    cluster.name: es-cluster
    # 当前节点名称
    node.name: node1
    # 是否有资格作为主节点
    node.master: true
    # 是否存储数据
    node.data: true
    # 最⼤集群节点数
    node.max_local_storage_nodes: 3
    #⽹关地址
    network.host: 0.0.0.0
    # 端⼝
    http.port: 9201
    # 内部节点之间通信端⼝
    transport.tcp.port: 9301
    # es7.x之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
    discovery.seed_hosts: ["es_node0:9300","es_node1:9301","es_node2:9302"]
    # es7.x之后新增的配置,初始化集群时需要此配置来选举master,此处的node名称为各节点配置文件中的节点名称
    cluster.initial_master_nodes: ["node0", "node1", "node2"]
    http.cors.allow-origin: "*"
    http.cors.enabled: true
    http.cors.allow-credentials: true

2、启动和安装ik分词器

  • 启动
docker-compose up

教你们一个骚操作:我们这里直接是使用up启动并没有带上-d参数后台启动,这样就不用执行查看日志的命令就可以第一时间直接看见启动日志。什么? 你问我这样启动之后怎么后台运行? 直接关掉当前这个终端即可,这个是我2019年的时候发现的docker-compose与其他持续运行软件的差异。

  • 安装ik分词器(一共三个容器每次替换掉容器名称/容器ID 执行三次即可)
    root@ubuntu:~# docker exec -ti es_node0 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.2/elasticsearch-analysis-ik-7.16.2.zip
    root@ubuntu:~# docker restart es_node0

✋:这一步操作实际上可以在Dockerfile中操作。

3、查询集群状态

  • 推荐使用Chrome的ElasticSearch Head插件,有条件的可以直接点击跳转到下载页面进行安装。
  • 没有网络条件的可以点击此处下载然后再手动进行离线安装【一般是打开插件管理的开发者模式然后直接把crx文件拖进去,如果不行请搜索一下教程】。

插件打开后填入链接地址即可连接ES并展示出状态信息如下所示:

3、可能遇到的问题

1、Error opening log file ‘logs/gc.log’: Permission denied

可能会报这种权限不足的情况,这种情况下想简单点就直接chmod -R 777 ./logs将logs目录设置成所有用户可读写即可。

2、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这个是提示你的内核参数vm.max_map_count设置的过低,直接按照提示修改即可。

root@ubuntu:~# vi /etc/sysctl.conf
vm.max_map_count = 655300 # 文件末尾添加该项保存即可

root@ubuntu:~# sysctl -p

内核参数生效后重新启动docker-compose即可。