面试题答案
一键面试1. 网络配置解析与应用
- 绑定地址:
- Elasticsearch通过配置文件
elasticsearch.yml
中的network.host
参数来设置绑定地址。此参数可以设置为具体的IP地址(如192.168.1.100
),也可以设置为特殊值,例如0.0.0.0
表示绑定到所有可用网络接口,localhost
表示仅绑定到本地回环接口。 - 节点启动时,会读取该配置并将自身网络服务绑定到指定地址。如果配置了无效的地址,节点启动会失败并在日志中记录相关错误信息。
- Elasticsearch通过配置文件
- 端口设置:
- Elasticsearch使用
http.port
参数设置HTTP端口,默认值为9200 ,用于接收HTTP请求,供外部客户端与Elasticsearch进行交互,如查询、索引文档等操作。 transport.port
参数设置传输层端口,默认值为9300 ,主要用于节点间通信,如集群状态同步、数据复制等。同样,在节点启动时会读取这些端口配置,并尝试在指定端口上监听连接。若端口已被其他进程占用,节点启动会失败并在日志中提示端口冲突错误。
- Elasticsearch使用
2. 与集群内其他节点建立网络连接及初始化通信
- 发现机制:
- Elasticsearch默认使用Zen Discovery机制来发现集群中的其他节点。在
elasticsearch.yml
中,可以通过discovery.seed_hosts
参数指定初始的种子节点列表,格式为["host1:port", "host2:port"]
。例如["192.168.1.100:9300", "192.168.1.101:9300"]
。 - 节点启动后,会尝试与种子节点列表中的节点建立传输层连接(通过
transport.port
)。如果配置了cluster.initial_master_nodes
参数,在首次启动集群时,该参数指定的节点会参与主节点选举过程。
- Elasticsearch默认使用Zen Discovery机制来发现集群中的其他节点。在
- 握手与通信初始化:
- 当节点与种子节点建立连接后,会进行一系列握手操作。节点之间交换基本信息,如节点ID、版本号、集群名称等。只有集群名称匹配的节点才能加入同一个集群。
- 成功握手后,节点会向其他节点发送自己的状态信息,包括自身的索引、分片等信息。同时,节点也会接收其他节点的状态信息,从而构建整个集群的状态视图。通过这种方式,节点可以知晓集群内的所有节点、分片分布等情况,完成初始化通信并开始正常的集群协作,如数据的复制、负载均衡等操作。