tribes(部落)功能允许 tribe node(部落节点)在多个集群之间充当联合客户端。
tribe node(部落节点)从所有连接的集群中检索集群状态并将其合并成全局集群状态。 掌握这一信息,就可以对所有集群中的节点执行读写操作,就好像它们是本地的。 请注意,tribe node(部落节点)需要能够连接到每个配置的群集中的每个单个节点。
配置一个tribe node(部落节点),只需要在elasticsearch.yml配置文件列出应该加入的集群,例如:
tribe: t1: #1 cluster.name: cluster_one t2: #2 cluster.name: cluster_two
1,2 | t1和t2是表示与每个集群的连接的名称。 |
上面的示例将连接分别配置为两个集群,分别为t1和t2。 默认情况下,tribe node(部落节点)在创建节点客户端之后使用unicast discovery(单播发现)连接每个集群。 连接下的任何其他设置都可以在tribe.{name}下配置,就像示例中的cluster.name一样。
合并的全局集群状态意味着几乎所有操作的工作方式与单个集群相同: distributed search(分布式搜索),suggest(建议),percolation(渗透),indexing(索引)等。
不过,也有一些例外:
- 合并视图无法处理多个集群中具有相同名称的索引。 默认情况下,它会选择其中一个,稍后查看on_conflict选项。
- Master level(Master级别)读取操作(例如,群集状态,群集运行状况)将自动执行,并将本地标志设置为true,因为没有master。
- Master level(Master级别)写操作(例如创建索引)不被允许。 这些应该在单个集群上执行。
可以通过以下方式禁止 tribe node(部落节点)的所有写入操作和所有元数据操作:
tribe: blocks: write: true metadata: true
tribe node(部落节点)还可以禁止对指定的索引的操作:
tribe: blocks: write.indices: hk*,ldn* metadata.indices: hk*,ldn*
部落节点设置
tribe node(部落节点)为每个列出的集群启动一个node client(节点客户端)。 以下配置选项从tribe node(部落节点)传递到每个node client(节点客户端):
几乎任何设置(path.*除外)可以在节点客户端级别本身进行配置,在这种情况下,它将覆盖部分节点中任何传递的设置。 您可能希望在节点客户端级别设置的设置包括:
network.host
network.bind_host
network.publish_host
transport.host
transport.bind_host
transport.publish_host
cluster.name
discovery.zen.ping.unicast.hosts
path.scripts: some/path/to/config #1 network.host: 192.168.1.5 #2 tribe: t1: cluster.name: cluster_one t2: cluster.name: cluster_two network.host: 10.1.2.3 #3
1 | path.scripts设置由t1和t2继承。 |
2 | network.host设置由t1继承。 |
3 | t3节点客户端覆盖从tribe node(部落节点)继承的节点。 |