ELK生态系统——kibana连接es集群
1、问题背景:
项目中的elasticsearch是一个集群模式,有多个elasticsearch节点(以下简称es),kibana想连多台es节点,那怎么处理呢?到目前为止官方暂不支持连接多个es节点,也就是下面的配置文件中,只能填写一个地址。
Kibana.yml中连接es配置连接:
2、解决办法:
虽然格式上不支持的填写多个es节点地址,但是官方也给出了另外一种方案:搭建一个只用来“协调”的es节点,让这个节点加入到es集群中,然后kibana连接这个“协调”节点,这个“协调”节点,不参加主节点选举,也不存储数据,只是用来处理传入的HTTP请求,并将操作重定向到集群中的其他es节点,然后收集并返回结果。这个“协调”节点本质上也起了一个负载均衡的作用。
官方解决方法教程:
3、es集群协调节点配置:
复制一个es集群中节点配置信息的elasticsearch.yml和jvm.options两个配置文件,对其中参数进行修改:
(1)jvm.options修改:
由于该节点只是协调节点,并不进行计算、搜索等功能,因此分配内存少点即可,默认1g,可以选择默认也:
-Xms1g
-Xmx1g
(2)elasticsearch.yml修改:
A、服务地址:
network.bind_host
修改为对应的节点所在IP地址即可。
B、服务端口号;
http.port
修改为对应的该节点启动后浏览器中访问端口号即可。
C、内部交换地址:
network.publish_host
修改为对应的节点所在IP地址即可。
D、内部交换端口号:
transport.tcp.port
修改为对应的该节点在集群内部交互端口号即可。
E、节点名称:
node.name
修改为该节点在集群中展示名称即可。
F、是否有主节点资格:
node.master: false
该节点只是协调节点,无主节点资格,所以为:false
G、是否有数据节点资格:
node.data: false
该节点只是协调节点,无数据节点资格,所以为:false
H、是否有数据预处理资格:
node.ingest:false
该节点只是协调节点,无数据预处理资格,所以为:false
I、集群初始化地址数组:
discovery.zen.ping.unicast.hosts
修改为最新集群所有节点交互地址和端口号数组即可。
例如:discovery.zen.ping.unicast.hosts: ["host1:port1", "host2:port", "host3[portX-portY]"]
4、重新启动es集群:
新增加的es协调节点配置好后,关闭现运行的es集群,对集群中所有节点,修改elasticsearch.yml中discovery.zen.ping.unicast.hosts参数的值,修改为最新的集群中所有节点交互地址和端口号数组。然后重新启动es集群即可。