ElasticSearch 5学习(3)——单台服务器部署多个节点

本文介绍如何在同一台服务器上部署Elasticsearch的多个节点以模拟分布式集群环境,并解决配置及数据冲突等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般情况下单台服务器只会部署一个ElasticSearch node,但是在学习过程中,很多情况下会需要实现ElasticSearch的分布式效果,所以需要启动多个节点,但是学习开发环境(不想开多个虚拟机实现多个服务器的效果),所以就想着在一台服务器上部署多个结点(下文以2个结点作为例子),两个节点分别称为实例一、二。

1、首先将elasticsearch-5.0.2文件夹再复制一份

# wuxiwei @ wuxiwei in ~/software
$ cp -R elasticsearch-5.0.2 elasticsearch-5.0.2-node-2
# wuxiwei @ wuxiwei in ~/software
$ ls -l
total 145568
drwxr-xr-x  12 wuxiwei  staff       408 12 11 16:23 elasticsearch-5.0.2
drwxr-xr-x  12 wuxiwei  staff       408 12 11 16:27 elasticsearch-5.0.2-node-2

2、主要工作就是修改elasticsearch.yml配置文件。

实例二:config目录下的elasticsearch.yml内容

将node.name: node-1 修改为 node-2,

3、分别开启两个节点

# wuxiwei @ wuxiwei in ~/software/elasticsearch-5.0.2
$ ./bin/elasticsearch

# wuxiwei @ wuxiwei in ~/software/elasticsearch-5.0.2
$ cd ../elasticsearch-5.0.2-node-2
# wuxiwei @ wuxiwei in ~/software/elasticsearch-5.0.2-node-2
$ ./bin/elasticsearch

4、查询是否成功

$ curl -i -XGET 'http://localhost:9200/_cluster/health?pretty'\;
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 457

{
  "cluster_name" : "my",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 20,
  "active_shards" : 40,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

也可以通过Kibana查看节点效果

踩过的坑

(1)如果修改了配置文件的 http.porttransport.tcp.port项,一定要将各个节点的值设置不同,否则会出现占用的情况。正常如果不修改,默认会分配值。

(2)示例二开启时,实例一报警告(实际操作中可以忽略,不然将无法实现ES的分布式集群作用):

[2016-12-11T18:06:43,678][WARN ][o.e.d.z.ElectMasterService] [node-1] value for setting "discovery.zen.minimum_master_nodes" is too low. This can result in data loss! Please set it to at least a quorum of master-eligible nodes (current value: [-1], total number of master-eligible nodes used for publishing in this round: [2])

是因为默认情况下 discovery.zen.minimum_master_nodes=1 一台服务器只能有一个主节点,所以在实例二的配置文件中可以添加 node.master: false

(3)示例二不能开启,报如下错误:

[2016-12-11T16:53:02,711][INFO ][o.e.d.z.ZenDiscovery     ] [node-2] failed to send join request to master [{node-1}{vP19PMOyT2ilJKRAqgn78w}{jDULCExERXGHp4VXpbyuJA}{127.0.0.1}{127.0.0.1:9300}], reason [RemoteTransportException[[node-1][127.0.0.1:9300][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {node-2}{vP19PMOyT2ilJKRAqgn78w}{qhDDVzwZQ0GXZXhIMmpGKA}{127.0.0.1}{127.0.0.1:9301}, found existing node {node-1}{vP19PMOyT2ilJKRAqgn78w}{jDULCExERXGHp4VXpbyuJA}{127.0.0.1}{127.0.0.1:9300} with the same id but is a different node instance]; ]
[2016-12-11T16:53:02,911][INFO ][o.e.x.m.e.Exporters      ] [node-2] skipping exporter [default_local] as it isn't ready yet
[2016-12-11T16:53:02,912][ERROR][o.e.x.m.AgentService     ] [node-2] exception when exporting documents
org.elasticsearch.xpack.monitoring.exporter.ExportException: exporters are either not ready or faulty
    at org.elasticsearch.xpack.monitoring.exporter.Exporters.export(Exporters.java:188) ~[x-pack-5.0.2.jar:5.0.2]
    at org.elasticsearch.xpack.monitoring.AgentService$ExportingWorker.run(AgentService.java:208) [x-pack-5.0.2.jar:5.0.2]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_111]

是因为复制的elasticsearch文件夹下包含了data文件中示例一的节点数据,需要把示例二data文件下的文件清空

原文地址:https://www.cnblogs.com/wxw16/p/6160186.html

### 使用 Docker 部署三个节点Elasticsearch 集群 #### 准备工作 为了成功部署包含三个节点Elasticsearch 集群,需先确认操作系统的兼容性和必要的软件安装情况。对于 CentOS7 的环境来说,在目标服务器上需要自行完成 Docker 环境的搭建[^3]。 #### 创建自签名证书 安全起见,建议为集群中的各节点创建并分发 SSL/TLS 证书来保障通信的安全性。可以通过官方提供的工具 `elasticsearch-certutil` 来生成证书,并将其保存至主机以便后续配置使用[^2]: ```bash docker exec -it <container_id> /bin/bash cd /usr/share/elasticsearch/bin/ ./elasticsearch-certutil ca --out=/usr/share/elasticsearch/config/ca.zip unzip ca.zip -d /usr/share/elasticsearch/config/certs/ ``` #### 设置虚拟内存参数 为了避免因系统默认设置过低而导致无法正常启动的问题,应当调整 Linux 内核关于最大映射区域数量(`vm.max_map_count`)的相关参数值至少达到推荐标准即不低于 262144[^4]: ```bash sysctl -w vm.max_map_count=262144 echo &#39;vm.max_map_count=262144&#39; >> /etc/sysctl.conf ``` #### 编写 Compose 文件 编写一个名为 `docker-compose.yml` 的 YAML 格式的编排文件用于描述整个集群架构以及各个组件之间的关系: ```yaml version: &#39;2.2&#39; services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:8.4.0 container_name: es-node-1 environment: - node.name=es-node-1 - discovery.seed_hosts=es-node-1,es-node-2,es-node-3 - cluster.initial_master_nodes=es-node-1,es-node-2,es-node-3 - bootstrap.memory_lock=true - ES_JAVA_OPTS=-Xms512m -Xmx512m ulimits: memlock: soft: -1 hard: -1 volumes: - esdata1:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - elastic es02: image: docker.elastic.co/elasticsearch/elasticsearch:8.4.0 container_name: es-node-2 environment: - node.name=es-node-2 - discovery.seed_hosts=es-node-1,es-node-2,es-node-3 - cluster.initial_master_nodes=es-node-1,es-node-2,es-node-3 - bootstrap.memory_lock=true - ES_JAVA_OPTS=-Xms512m -Xmx512m ulimits: memlock: soft: -1 hard: -1 volumes: - esdata2:/usr/share/elasticsearch/data networks: - elastic es03: image: docker.elastic.co/elasticsearch/elasticsearch:8.4.0 container_name: es-node-3 environment: - node.name=es-node-3 - discovery.seed_hosts=es-node-1,es-node-2,es-node-3 - cluster.initial_master_nodes=es-node-1,es-node-2,es-node-3 - bootstrap.memory_lock=true - ES_JAVA_OPTS=-Xms512m -Xmx512m ulimits: memlock: soft: -1 hard: -1 volumes: - esdata3:/usr/share/elasticsearch/data networks: - elastic volumes: esdata1: driver: local esdata2: driver: local esdata3: driver: local networks: elastic: driver: bridge ``` 此段落定义了一个由三机器组成的Elasticsearch集群结构,每机器都运行着不同的实例并且相互之间可以发现彼此形成集群[^1]。 #### 启动集群 当一切准备就绪后,只需执行如下命令即可一键启动整个集群: ```bash docker-compose up -d ``` 等待片刻直到所有服务均处于健康状态,则表示已经成功构建起了基于 Docker 容器技术实现的多节点分布式搜索引擎平——Elasticsearch Cluster!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值