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(索引)等。
不过,也有一些例外:
可以通过以下方式禁止 tribe node(部落节点)的所有写入操作和所有元数据操作:
tribe:
blocks:
write: true
metadata: true
tribe node(部落节点)还可以禁止对指定的索引的操作:
tribe:
blocks:
write.indices: hk*,ldn*
metadata.indices: hk*,ldn*
当有冲突,即多个集群拥有相同的索引时,默认情况下,tribe node(部落节点)将选择其中一个。 这可以使用tribe.on_conflict设置进行配置。 它默认为any,但可以设置为drop(丢弃索引有冲突),或者使用prefer_ [tribeName]来设定某个*tribe node*(部落节点)更偏好的索引。
tribe node(部落节点)为每个列出的集群启动一个node client(节点客户端)。 以下配置选项从tribe node(部落节点)传递到每个node client(节点客户端):
[node.name](http://node.name)
(used to derive the [node.name](http://node.name)
for each node client)network.host
network.bind_host
network.publish_host
transport.host
transport.bind_host
transport.publish_host
path.home
path.conf
path.logs
path.scripts
shield.*
几乎任何设置(path.*除外)可以在节点客户端级别本身进行配置,在这种情况下,它将覆盖部分节点中任何传递的设置。 您可能希望在节点客户端级别设置的设置包括:
network.host
network.bind_host
network.publish_host
transport.host
transport.bind_host
transport.publish_host
[cluster.name](http://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(部落节点)继承的节点。 |