# Tribe Node (部落节点)

原文链接：

[https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-tribe.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-tribe.html)

译文链接：

[http://www.apache.wiki/pages/viewpage.action?pageId=2883720](http://www.apache.wiki/pages/viewpage.action?pageId=2883720)

贡献者：

[张学](/display/~zhangxue)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

**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](http://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**（部落节点）将选择其中一个。 这可以使用**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**（部落节点）继承的节点。 |