赞
踩
Elasticsearch 版本 : 7.9.3
服务器2台:192.168.100.100、192.168.100.101
实例:
安装好之后分别配置三个实例的 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"]
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"]
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"]
同一集群中的节点名称不能相同
network.host:设置访问的地址。默认仅绑定在回环地址 127.0.0.1 和 [::1]。如果需要从其他服务器上访问以及多态机器搭建集群,我们需要设定 ES 运行绑定的 Host,节点需要绑定非回环的地址。建议设置为主机的公网 IP 或 0.0.0.0:
network.host: 0.0.0.0
更多的网络设置可以阅读 Network Settings
http.port 默认端口是 9200 :
注意:这是指 http 端口,如果采用 REST API 对接 ES,那么就是采用的 http 协议
REST 客户端通过 HTTP 将请求发送到您的 Elasticsearch 集群,但是接收到客户端请求的节点不能总是单独处理它,通常必须将其传递给其他节点以进行进一步处理。它使用传输网络层(transport networking layer)执行此操作。传输层用于集群中节点之间的所有内部通信,与远程集群节点的所有通信,以及 Elasticsearch Java API 中的 TransportClient。
transport.port 绑定端口范围。默认为 9300-9400
因为要在一台机器上创建是三个 ES 实例,这里明确指定每个实例的端口。
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: 初始的候选 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 将会显示节点更多的详情信息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。