0 背景
在生产环境中,我们先后搭建了两套ES集群,一套用于系统日志的采集,包括k8s组件的日志、网关日志、服务pod日志等;另一套用于业务系统信息的存储,如埋点信息、业务日志等。现在,我们想要统一的将两套集群管理起来,使用统一的Kibana面板对外做数据展示。在网上搜索解决方案,看到了ES的远程集群功能,在此记录一下。
Elasticsearch在5.3版本中引入了Cross Cluster Search(CCS 跨集群搜索)功能,用来替换掉要被废弃的Tribe Node。类似Tribe Node,Cross Cluster Search用来实现跨集群的数据搜索。跨集群搜索使您可以针对一个或多个远程集群运行单个搜索请求 。例如,您可以使用跨集群搜索来过滤和分析存储在不同数据中心的集群中的日志数据。
1 配置远程集群
ES提供两种远程集群配置方案,一种是直接在ES的配置文件elasticsearch.yml
中进行配置,另一种是使用API的方式进行设置。
1.1 配置文件配置方式
修改elasticsearch.yml
,添加如下内容
search:
remote:
cluster01:
seeds: 192.168.10.101:9300
seeds: 192.168.10.102:9300
seeds: 192.168.10.103:9300
transport.compress: true
skip_unavailable: true
cluster01
:集群名称,自定义即可seeds
:集群的节点列表,可以配置一个或多个transport.ping_schedule
: 使用ping检测连接状态的时间间隔skip_unavailable
:跨集群搜索是否跳过不可用集群
1.2 API配置方式
使用Cluster Settings API
进行设置
PUT _cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"cluster01": {
"skip_unavailable": false,
"mode": "sniff",
"proxy_address": null,
"proxy_socket_connections": null,
"server_name": null,
"seeds": [
"cluster01_node01:9300",
"cluster01_node02:9300",
"cluster01_node03:9300"
],
"node_connections": 3
}
}
}
}
}
配置参数同上
在此我更倾向于使用API的方式设置远程集群,这样更方便对远程集群进行修改。
1.3 查看远程集群状态
使用GET _remote/info
请求进行查看
{
"cluster01" : {
"connected" : true,
"mode" : "sniff",
"seeds" : [
"192.168.10.101:9300",
"192.168.10.102:9300",
"192.168.10.103:9300"
],
"num_nodes_connected" : 3,
"max_connections_per_cluster" : 3,
"initial_connect_timeout" : "30s",
"skip_unavailable" : false
}
}
1.4 删除远程集群
如果设置有误或不想用了,可以将远程集群删除,其实就是将seeds设置为空。
PUT _cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"cluster01": {
"seeds": null
}
}
}
}
}
1.5 使用kibana管理远程集群
如果使用了kibana,那么设置远程集群更加简单,只需要在页面上操作即可。
打开Stack Management
,左侧目录找到远程集群
或remote cluster
,在打开的页面点击添加远程集群
填写集群名称与节点信息
保存即可
2 使用远程集群搜索
远程集群权限设置
- 在远程集群上创建与本地集群同名的角色
- 远程集群上的角色要赋予对应索引的
read
与read_cross_cluster
权限,否则本地集群访问该索引时连接会被拒绝。
查询远程集群
查询远程集群的索引需要指定集群名称
GET /cluster_name:index/_search
同时查询多个集群
GET /cluster_name:index,cluster_name:index/_search
同时查询所有集群
GET */index/_search
Kibana中创建索引模式
在Kibana中创建索引模式时,也要指定集群名
cluster_name:index*
之后使用就跟本地集群的索引模式一样了。
广告时间
既然自己维护ES这么复杂,不如试试腾讯云 Elasticsearch Service。
腾讯云 Elasticsearch Service(ES)是基于开源引擎打造的云端全托管 ELK 服务,集成 X-Pack 特性、独有高性能自研内核、QQ 分词、集群巡检、一键升级等优势能力,引入极致性价比的腾讯自研星星海服务器。助您轻松管理和运维集群,高效构建日志分析、运维监控、信息检索、数据分析等业务。
【腾讯云】ElasticSearch新用户特惠,快速实现日志分析、应用搜索,首购低至4折
↑↑↑现在新用户免费试用30天,快点击上方连接开启试用吧。↑↑↑