# 网络 每个ES节点有两个不同的网络通信接口: - 客户端通过节点的9200端口,使用 Elasticsearch REST API 通信,称为 http interface - 集群节点间的是通过9300端口,称为 transport interface,它也可以用于集群之间的通讯(集群与集群的通讯), remote clusters 如果在一个简单的网络中,可以直接使用 network.* 这类配置同时设置 http interface 和 transport interface 默认地,Elasticsearch 监听本地的 localhost 地址,不能被远程访问,表示在本地开发环境。为了组成多节点集群,或被远程客户端访问,需要调整监听的网络配置,包括 network.host 参数。 > 注意网络配置,永远不要把未保护/未认证的节点暴露在互联网上。如果这样,互联网任意的人都可以下载,修改,删除ES中的数据。 ## 基本网络设置 ```yaml # 同时配置 http interface 和 transport interface 的网络监听地址 # 默认值是_local_,表示任意操作系统上的环回地址,表示仅本地访问 network.host: _local_ # http interface通信端口,可以设置成单个值或范围,如果是范围,那么就是起始值 # 默认值是9200-9300 http.port: 9200-9300 # transport interface 通讯端口,可以设置成单个值或范围,如果是范围,那么就是起始值,在master节点上要设置成单个值 # 默认值是9300-9400 transport.port: 9300-9400 ``` ## 绑定和发布 Elasticsearch 使用网络接口地址有不同的目的:binding 和 publishing , 大多数场景不区分这两者,但是复杂场景对这两者有不同的目的和不同的配置。 当一个应用(比如ES)需要收网络通讯报文,它需要向操作系统通知,从哪个/哪些网络接口接收,这个/这些接口就叫 binding addresses,ES通常可以绑定多个网络接口,但通常都是一个。如果有必要的话,可以使得 http interface和 transport interface分别绑定不同的接口。 每个节点间和客户端之间的通讯,也有一个地址,这个就叫发布地址。每个节点只能有一个http interface publishing address/ transport publishing interface , 这个地址可以是任意值,不一定非要是运行ES的操作系统上的IP的值,比如在代理场景中。 ## 单个地址 最简单的就是单个地址的方式,使用 network.host 指明地址就好, ## 多个地址 ```yaml network.bind_host network.publish_host ``` ## 高级TCP设置 ## 高级HTTP设置 ```yaml # HTTP interface通信的地址 # 默认等于network.host设置的值 http.host: network.host http.bind_host http.publish_host http.publish_port ```