当前位置:   article > 正文

Elasticsearch实战(二):Elasticsearch 集群配置_cluster.initial_master_nodes

cluster.initial_master_nodes

准备

Elasticsearch 版本 : 7.9.3
服务器2台:192.168.100.100、192.168.100.101
实例:

  • 192.168.100.100:9300
  • 192.168.100.100:9301
  • 192.168.100.101:9300

配置

  • 我们有两台服务器分别是:192.168.100.100、192.168.100.101
  • 在192.168.100.100上安装了两个Elasticsearch实例,分别在:
    /usr/local//usr/local/elasticsearch-7.9.3
    /usr/local//usr/local/elasticsearch-7.9.3-node2
  • 在192.168.100.101上安装一个Elasticsearch实例:
    /usr/local//usr/local/elasticsearch-7.9.3-node3

安装好之后分别配置三个实例的 elasticsearch.yml:
es-node-1:主节点

cluster.name: es_article
node.name: es-node-1
node.master: true
node.data: true
path.data: /usr/local/elasticsearch-7.9.3/data
path.logs: /usr/local/elasticsearch-7.9.3/logs
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.100.100:9300","192.168.100.100:9301","192.168.100.101:9300"]
cluster.initial_master_nodes: ["es-node-1"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

es-node-2:

cluster.name: es_article
node.name: es-node-2
node.master: true
node.data: true
path.data: /usr/local/elasticsearch-7.9.3-node2/data
path.logs: /usr/local/elasticsearch-7.9.3-node2/logs
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9201
transport.port: 9301
discovery.seed_hosts: ["192.168.100.100:9300","192.168.100.100:9301","192.168.100.101:9300"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

es-node-3:

cluster.name: es_article
node.name: es-node-3
node.master: true
node.data: true
path.data: /usr/local/elasticsearch-7.9.3-node3/data
path.logs: /usr/local/elasticsearch-7.9.3-node3/logs
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.100.100:9300","192.168.100.100:9301","192.168.100.101:9300"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
node.name:

同一集群中的节点名称不能相同

network.host:

network.host:设置访问的地址。默认仅绑定在回环地址 127.0.0.1 和 [::1]。如果需要从其他服务器上访问以及多态机器搭建集群,我们需要设定 ES 运行绑定的 Host,节点需要绑定非回环的地址。建议设置为主机的公网 IP 或 0.0.0.0:

network.host: 0.0.0.0
更多的网络设置可以阅读 Network Settings

http.port:

http.port 默认端口是 9200 :
注意:这是指 http 端口,如果采用 REST API 对接 ES,那么就是采用的 http 协议

transport.port:

REST 客户端通过 HTTP 将请求发送到您的 Elasticsearch 集群,但是接收到客户端请求的节点不能总是单独处理它,通常必须将其传递给其他节点以进行进一步处理。它使用传输网络层(transport networking layer)执行此操作。传输层用于集群中节点之间的所有内部通信,与远程集群节点的所有通信,以及 Elasticsearch Java API 中的 TransportClient。

transport.port 绑定端口范围。默认为 9300-9400

因为要在一台机器上创建是三个 ES 实例,这里明确指定每个实例的端口。

discovery.seed_hosts:

discovery.seed_hosts:发现设置。有两种重要的发现和集群形成配置,以便集群中的节点能够彼此发现并且选择一个主节点。

discovery.seed_hosts 是组件集群时比较重要的配置,用于启动当前节点时,发现其他节点的初始列表。

开箱即用,无需任何网络配置, ES 将绑定到可用的环回地址,并将扫描本地端口 9300 - 9305,以尝试连接到同一服务器上运行的其他节点。 这无需任何配置即可提供自动群集的体验。

如果要与其他主机上的节点组成集群,则必须设置 discovery.seed_hosts,用来提供集群中的其他主机列表(它们是符合主机资格要求的master-eligible并且可能处于活动状态的且可达的,以便寻址发现过程)。此设置应该是群集中所有符合主机资格的节点的地址的列表。 每个地址可以是 IP 地址,也可以是通过 DNS 解析为一个或多个 IP 地址的主机名(hostname)。

当一个已经加入过集群的节点重启时,如果他无法与之前集群中的节点通信,很可能就会报这个错误 master not discovered or elected yet, an election requires at least 2 nodes with ids from。因此,我在一台服务器上模拟三个 ES 实例时,这个配置我明确指定了端口号。

配置集群的主机地址,配置之后集群的主机之间可以自动发现(可以带上端口,例如 127.0.0.1:9300)

cluster.initial_master_nodes:

cluster.initial_master_nodes: 初始的候选 master 节点列表。初始主节点应通过其 node.name 标识,默认为其主机名。确保 cluster.initial_master_nodes 中的值与 node.name 完全匹配。

首次启动全新的 ES 集群时,会出现一个集群引导/集群选举/cluster bootstrapping步骤,该步骤确定了在第一次选举中的符合主节点资格的节点集合。在开发模式下,如果没有进行发现设置,此步骤由节点本身自动执行。由于这种自动引导从本质上讲是不安全的,因此当您在生产模式下第一次启动全新的群集时,你必须显式列出符合资格的主节点。也就是说,需要使用 cluster.initial_master_nodes 设置来设置该主节点列表。重新启动集群或将新节点添加到现有集群时,你不应使用此设置

在新版 7.x 的 ES 中,对 ES 的集群发现系统做了调整,不再有 discovery.zen.minimum_master_nodes 这个控制集群脑裂的配置,转而由集群自主控制,并且新版在启动一个新的集群的时候需要有 cluster.initial_master_nodes 初始化集群主节点列表。如果一个集群一旦形成,你不该再设置该配置项,应该移除它。该配置项仅仅是集群第一次创建时设置的!集群形成之后,这个配置也会被忽略的!

cluster.initial_master_nodes 该配置项并不是需要每个节点设置保持一致,设置需谨慎,如果其中的主节点关闭了,可能会导致其他主节点也会关闭。因为一旦节点初始启动时设置了这个参数,它下次启动时还是会尝试和当初指定的主节点链接,当链接失败时,自己也会关闭!

因此,为了保证可用性,预备做主节点的节点不用每个上面都配置该配置项!保证有的主节点上就不设置该配置项,这样当有主节点故障时,还有可用的主节点不会一定要去寻找初始节点中的主节点!

关于 cluster.initial_master_nodes 可以查看如下资料:

其他:
集群的主要配置项上面已经介绍的差不多了,同时也给出了一些文档拓展阅读。实际的生产环境中,配置稍微会复杂点,下面补充一些配置项的介绍。需要说明的是,下面的一些配置即使不配置,ES 的集群也可以成功启动的。

Elasticsearch 集群中节点角色的介绍 对上文中的 node.master 等配置做了介绍。如果本地仅是简单测试使用,上文中的 node.master/node.data/node.ingest 不用配置也没影响。
创建集群:
实验机器有限,我们在同一台机器上创建三个 ES 实例来创建集群,分别明确指定了这些实例的 http.port 和 transport.port。discovery.seed_hosts明确指定实例的端口对测试集群的高可用性很关键。

如果后期有新节点加入,新节点的 discovery.seed_hosts 没必要包含所有的节点,只要它里面包含集群中已有的节点信息,新节点就能发现整个集群了。

分别启动三个节点

访问主节点:http://192.168.100.100:9200/_cat/nodes 查看集群是否 OK
在这里插入图片描述
* 代表节点
http://192.168.100.100:9200/_nodes 将会显示节点更多的详情信息

参考:https://www.cnblogs.com/michael-xiang/p/13715692.html

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

闽ICP备14008679号