当前位置:   article > 正文

使用docker-compose 搭建es集群

使用docker-compose 搭建es集群

首先需要安装docker,这里就略过了

在第一台机器上创建 docker-compose.yml 文件内容如下:

  1. services:
  2. es:
  3. image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
  4. container_name: es
  5. environment:
  6. - bootstrap.memory_lock=true
  7. - xpack.security.enabled=false
  8. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  9. ulimits:
  10. memlock:
  11. soft: -1
  12. hard: -1
  13. volumes:
  14. - /path/to/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  15. - /path/to/es/data:/usr/share/elasticsearch/data
  16. - /path/to/es/log:/usr/share/elasticsearch/log
  17. - /path/to/es/plugins:/usr/share/elasticsearch/plugins
  18. ports:
  19. - "9200:9200"
  20. - "9300:9300"
  21. networks:
  22. - esnet
  23. networks:
  24. esnet:
  25. driver: bridge

映射的配置文件如下:

  1. # 指定集群名称3个节点必须一致
  2. cluster.name: es-cluster
  3. #指定节点名称,每个节点名字唯一
  4. node.name: node-1
  5. #是否有资格为master节点,默认为true
  6. node.master: true
  7. #是否为data节点,默认为true
  8. node.data: true
  9. # 绑定ip,开启远程访问,可以配置0.0.0.0
  10. network.host: 0.0.0.0
  11. # 如果是多台机器,需要指定本机IP
  12. network.publish_host: 192.168.177.131
  13. #指定web端口
  14. http.port: 9200
  15. #指定tcp端口
  16. transport.tcp.port: 9300
  17. #用于节点发现
  18. discovery.seed_hosts: ["192.168.177.131", "192.168.177.132", "192.168.177.133"]
  19. #7.0新引入的配置项,初始仲裁,仅在整个集群首次启动时才需要初始仲裁。
  20. #该选项配置为node.name的值,指定可以初始化集群节点的名称
  21. cluster.initial_master_nodes: ["node-1","node-2","node-3"]
  22. #解决跨域问题
  23. http.cors.enabled: true
  24. http.cors.allow-origin: "*"

另外的两台机器也一样

记得更换 node.name,每个节点唯一

cluster.name 集群唯一,也就是三台机器保持一致 

在 Docker Compose 文件中,ulimits 部分用于设置容器内进程的用户限制(user limits),这些限制与操作系统级别的资源限制相对应。ulimits 允许你调整容器内进程可以使用的资源量,比如文件描述符的数量、内存锁定的大小等。

对于ulimits 配置:

ulimits:
memlock:
soft: -1
hard: -1

这里,memlock 指的是内存锁定(memory locking)的限制。内存锁定是一种机制,允许进程将其部分或全部地址空间锁定在物理内存中,防止它们被交换(swapping)到磁盘上的交换空间(swap space)。这对于需要高性能和稳定延迟的应用程序(如数据库和搜索引擎)来说非常重要,因为它们依赖于快速访问内存中的数据。

  • soft 指的是软限制(soft limit),它是操作系统警告进程在超过此限制时应该采取行动的阈值。然而,在这个上下文中,将 soft 设置为 -1 通常意味着没有软限制,或者软限制被设置为尽可能大(尽管 -1 在某些上下文中可能表示“无限制”,但在 ulimits 的上下文中,它实际上被解释为容器可以使用的最大可能值,这取决于宿主机的限制)。

  • hard 指的是硬限制(hard limit),它是进程可以设置的资源使用的绝对上限。将 hard 设置为 -1 在这里同样意味着没有硬限制,或者硬限制被设置为尽可能大。然而,需要注意的是,-1 在这个上下文中可能不会被所有系统或工具直接解释为“无限制”,而是需要依赖于具体的实现和解释。实际上,在许多系统中,硬限制通常有一个最大值,而不是无限制的。

对于 memlock 来说,将 soft 和 hard 都设置为 -1(或尽可能大的值)是为了允许 Elasticsearch 容器锁定尽可能多的内存,从而避免其内存被交换到磁盘上,这有助于提高性能和稳定性。然而,需要注意的是,这样做可能会增加宿主机的内存压力,因为 Elasticsearch 容器将尝试使用尽可能多的内存,而不管宿主机的其他需求如何。因此,在设置这些限制时应该谨慎,并确保宿主机有足够的内存来满足所有运行中的容器和应用程序的需求。

在 docker-compose.yml 文件对应文件下面执行命令

docker compose up -d

报错1:lasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes]........

表示权限不足,出现 AccessDeniedException 错误通常意味着 Docker 容器中的 Elasticsearch 进程没有足够的权限去访问或修改指定的目录。在上面情况中,Elasticsearch 试图在 /usr/share/elasticsearch/data/nodes 下创建目录,但由于权限问题而失败。这个问题通常与 Docker 容器使用的用户权限和宿主机上目录的权限设置有关。

可以修改宿主机目录权限来解决

确保宿主机上的 /path/to/es/data 目录具有适当的权限,允许 Docker 容器内的用户(通常是 elasticsearch 或 root)访问和修改。可以尝试设置该目录的权限为更宽松的值,比如:

sudo chown -R 1000:1000 /path/to/es/data
sudo chmod -R 777 /path/to/es/data

注意:这里使用 1000:1000 是因为 Elasticsearch 官方镜像默认使用 UID 和 GID 为 1000 的用户。但是,使用 777 权限可能带来安全风险,仅作为测试使用。在生产环境中,应该确保只有必要的用户和组有权访问这些目录。

我这里就采用第一个了:sudo chown -R 1000:1000 /path/to/es/data

如果还是报错,清一下缓存再启动

  1. docker compose down
  2. docker compose up -d

错误2:ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这个错误是由于 Elasticsearch 对虚拟内存区域(virtual memory areas)的数量有限制,而当前系统的 vm.max_map_count 设置太低,无法满足 Elasticsearch 的需求。Elasticsearch 需要大量的内存映射区域来优化其性能,特别是在处理大数据集时。

要解决这个问题,需要增加 vm.max_map_count 的值。这个设置通常需要在宿主机的操作系统上进行修改,因为它是一个系统级别的限制。以下是如何在 Linux 系统上修改这个设置的步骤:

  1. 临时修改(重启后失效):
    你可以通过运行以下命令来临时增加 vm.max_map_count 的值(以 root 用户执行):

    sudo sysctl -w vm.max_map_count=262144

    这个命令会立即生效,但重启后设置会丢失。

  2. 永久修改
    要永久修改这个值,你需要在 /etc/sysctl.conf 文件中添加一行配置,或者在 /etc/sysctl.d/ 目录下创建一个新的配置文件(如 99-elasticsearch.conf),并在其中添加以下行:

    vm.max_map_count=262144

    添加后,运行 sudo sysctl --system 或重启系统来应用更改。

我这里采用永久修改。

报错3:

出现这个错误,看一下配置中 network.publish_host: 192.168.177.131 是不是2忘记加了,加上之后重新启动就好了

最后使用 http://192.168.177.131:9200/_cat/nodes?v 验证:

或者 ​​​​ http://192.168.177.133:9200/_nodes/stats?pretty 查看:

到这里 docker 部署 es 集群就结束啦!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/1021854
推荐阅读
相关标签
  

闽ICP备14008679号