Elasticsearch 集群
在ES 集群中,节点分别为:master节点、data节点、client节点等几种角色,任何一个节点都可以同时具备以上所有角色,其中比较重要的角色为master和data 节点。
Master 主要管理集群信息、primary分片和replica分片信息、维护index信息。
node.master: true AND node.data: false AND node.ingest: false
Data 用来存储数据,维护倒排索引,提供数据检索等。
node.master: false AND node.data: true AND node.ingest: false
Client 节点只负责处理用户请求,实现请求转发,负载均衡等功能。
node.master: false AND node.data: false AND node.ingest: true
Master 节点的配置参考
# 集群名称
cluster.name: "es_cluster"
# 节点名称,这儿我直接取名为 master
node.name: master
# 是否可以成为master节点
node.master: true
# 是否允许该节点存储数据,默认开启
node.data: true
# 网络绑定,这里我绑定 0.0.0.0,支持外网访问
network.host: 0.0.0.0
# 设置对外服务的http端口,默认为9200
http.port: 9200
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
# 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计数
cluster.initial_master_nodes: ["127.0.0.1"]
这里,我在master节点中,配置了一个 node.master: true ,这样,该节点就得到允许,可以成为master节点。然后,我有配置了一项:cluster.initial_master_nodes: ["127.0.0.1"],这样,就指定了本节点在初始化的时候将会参加选举,由于这里只配置了本节点,所以本节点理所应当地会成为master节点。
Slave 节点的配置参考
# 集群名称,处于同一个集群所有节点,该名称必须相同
cluster.name: "es_cluster"
# 节点名称,这儿我直接取名为 slave1
node.name: slave1
# 是否可以成为master节点
node.master: false
# 是否允许该节点存储数据,默认开启
node.data: true
# 网络绑定,这里我绑定 0.0.0.0,支持外网访问
network.host: 0.0.0.0
# 设置对外服务的http端口,默认为9200,这里我们修改为 9201,不然会有端口冲突
http.port: 9201
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
# 集群 发现
discovery.seed_hosts: ["127.0.0.1:9300"]
配置参数详细说明
(1)path.data和path.logs
在生产中使用,肯定要更改数据和日志文件夹的位置。
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
在生产环境下,应用程序的数据和日志一般需要配置到独立的磁盘分区下。比如/var/data目录作为独立的数据分区,/var/log作为应用程序日志分区。这样做的好处是,防止因应用程序数据或日志增长,撑爆OS分区。
(2)cluster.name 集群名
某个节点只有和集群下的其他节点共享它的 cluster.name 才能加入一个集群。默认是elasticsearch,但是应该修改为更恰当的,用于描述集群目的的名称。
一定要确保不要在不同的环境中使用相同的集群名称。否则,节点可能会加入错误的集群中。
(3)node.name 节点名称
默认情况下,Elasticsearch 将使用随机生成的uuid的前7个字符作为节点id,请注意,节点ID是持久化的,并且在节点重新启动时不会更改,因此默认节点名称也不会更改。
也可以使用服务器的 HOSTNAME 作为节点的名称。
node.name: ${HOSTNAME}
(4)network.host 网络主机
默认情况下,Elasticsearch 仅仅绑定回环地址,比如127.0.0.1 和[::1] 。这足以在服务器上运行单个开发节点。
为了与其他服务器上的节点进行通信并形成集群,你的节点将需要绑定到非环回地址。虽然这里有很多网络相关的配置,但通常只需要配置一下 network.host。
network.host: 192.168.60.101
一旦自定义设置了 network.host ,Elasticsearch 会假定你正在从开发模式转移到生产模式,并将许多系统启动检查从警告升级到异常。
(5)discovery.seed_hosts
开箱即用,没有任何网络配置,Elasticsearch将绑定到可用的环回地址,并将扫描本地端口9300到9305以尝试连接到在同一服务器上运行的其他节点。 这提供了自动集群体验,无需进行任何配置。
如果要在其他主机上形成包含节点的群集,则必须使用discovery.seed_hosts设置提供群集中其他节点的列表,这些节点符合主要条件且可能是实时且可联系的,以便为发现过程设定种子。 此设置通常应包含群集中所有符合主节点的节点的地址( master-eligible nodes )。此设置包含主机数组或逗号分隔的字符串。 每个值应采用host:port或host的形式(其中port默认为设置transport.profiles.default.port,如果未设置则返回transport.port)。 请注意,必须将IPv6主机置于括号内。 此设置的默认值为127.0.0.1,[:: 1]。
(6)cluster.initial_master_nodes
当您第一次启动全新的Elasticsearch集群时,会出现一个集群引导步骤,该步骤确定在第一次选举中计票的主合格节点集(master-eligible)。 在开发模式下,如果未配置,则此步骤由节点本身自动执行。 由于此自动引导本质上是不安全的,因此当您在生产模式下启动全新集群时,必须明确列出符合条件的节点的名称或IP地址,这些节点的投票应在第一次选举中计数。 使用cluster.initial_master_nodes设置此列表。
cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]
cluster.initial_master_nodes参数说明:es7 引用了 Bootstrapping a cluster 后,首次启动Elasticsearch集群需要在集群中的一个或多个符合主节点(master-eligible nodes)的节点上显式定义初始的符合主节点的节点集(initial_master_nodes)。这称为群集自举,这仅在群集首次启动时才需要。
# 其中节点1配置示例
cluster.name: es-ordercluster
node.name: es-node1
node.master: true
node.data: true
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs
bootstrap.memory_lock: true
network.host: 172.16.2.141
http.port: 9200
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["172.16.2.141:9300","172.16.2.142:9300","172.16.2.143:9300"]
cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]
http.cors.enabled: true
http.cors.allow-origin: "*"
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/644/viewspace-3140991/ ,如需转载,请注明出处,否则将追究法律责任。