轉載自:https://blog.csdn.net/UbuntuTouch/article/details/104588232
跨集群搜索(cross-cluster search)使您可以針對一個或多個遠程集群運行單個搜索請求。 例如,您可以使用跨集群搜索來篩選和分析存儲在不同數據中心的集群中的日志數據。
如上面所述,當我們的client向集群cluster_1發送請求時,它可以搜索自己本身的集群,同時也可以向另外的兩個集群cluster_2及cluster_3發送請求。最后的結果由cluster_1返回給客戶端。
目前支持的APIs:
- Search
- Multi search
- Search template
- Multi search template
跨集群搜索例子
注冊remote cluster
要執行跨集群搜索,必須至少配置一個遠程集群。在集群設置中配置了遠程群集
- 使用cluster.remote屬性
- 種子(seeds)是遠程集群中的節點列表,用於在注冊遠程集群時檢索集群狀態
以下cluster update settings API請求添加了三個遠程集群:cluster_one,cluster_two和cluster_three。
PUT _cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"cluster_one": {
"seeds": [
"127.0.0.1:9300"
]
},
"cluster_two": {
"seeds": [
"127.0.0.1:9301"
]
},
"cluster_three": {
"seeds": [
"127.0.0.1:9302"
]
}
}
}
}
}
動手實踐
安裝集群
在今天的實踐中,我們來設置兩個集群:
在上面的描述中,我們配置了兩個集群:cluster 1及cluster 2。它們位於同一個網路內,可以互相訪問。在安裝時,我們必須注意的是:
- 把我們的Elasticsearch及Kibana分別解壓,並安裝於不同的兩個目錄中。這樣它們的安裝互相不干擾,從而能形成兩個不同的集群,雖然它們集群的名字可以是一樣的。為了方便,我們把兩個集群的名字分別取為cluster_1及cluster_2。
- 我們可以分別對Elasticsearch的配置文件config/elasticsearch.yml做如上的配置。同時我們也需要對Kibana之中的config/kibana.yml做配置,這樣使得cluster_1對應的Kibana的口地址為5601,而對於cluster_2的Kibana的口地址為5602。
在上面可能有很多人感到疑問:為啥我們還需要配置端口地址9300及9301?事實上,Elasticsearch中有兩種重要的網絡通信機制需要了解:
- HTTP:用於HTTP通信綁定的地址和端口,這是Elasticsearch REST API公開的方式
- transport:用於集群內節點之間的內部通信
等我們安裝好我們的兩個集群我們可以通過如下的方法來查看:
如果我們能夠同時看到上面的兩個集群的畫面,則表明我們的集群已經設置正確。
搜索
我們接下來進行配置。我們在kibana_2,也既是端口地址為5602的Kibana。我們打入如下的命令:
PUT _cluster/settings
{
"persistent": {
"cluster.remote": {
"remote_cluster": {
"seeds": [
"127.0.0.1:9300"
]
}
}
}
}
在上面,我們在cluster_2里配置可以連接到cluster_1的這樣設置。因為cluster_1的transport口地址是9300。
我們可以看到如下的返回信息:
我們接下來使用如下的命令來檢查我們的連接狀態:
GET _remote/info
我們可以看到如下的響應信息:
{
"remote_cluster" : {
"seeds" : [
"127.0.0.1:9300"
],
"connected" : true,
"num_nodes_connected" : 1,
"max_connections_per_cluster" : 3,
"initial_connect_timeout" : "30s",
"skip_unavailable" : false
}
}
它表明我們的連接是成功的。
這個時候我們在Kibana_1中創建如下的twitter索引:
POST _bulk
{"index":{"_index":"twitter","_id":1}}
{"user":"張三","message":"今兒天氣不錯啊,出去轉轉去","uid":2,"age":20,"city":"北京","province":"北京","country":"中國","address":"中國北京市海淀區","location":{"lat":"39.970718","lon":"116.325747"}, "DOB": "1999-04-01"}
{"index":{"_index":"twitter","_id":2}}
{"user":"老劉","message":"出發,下一站雲南!","uid":3,"age":22,"city":"北京","province":"北京","country":"中國","address":"中國北京市東城區台基廠三條3號","location":{"lat":"39.904313","lon":"116.412754"}, "DOB": "1997-04-01"}
{"index":{"_index":"twitter","_id":3}}
{"user":"李四","message":"happy birthday!","uid":4,"age":25,"city":"北京","province":"北京","country":"中國","address":"中國北京市東城區","location":{"lat":"39.893801","lon":"116.408986"}, "DOB": "1994-04-01"}
{"index":{"_index":"twitter","_id":4}}
{"user":"老賈","message":"123,gogogo","uid":5,"age":30,"city":"北京","province":"北京","country":"中國","address":"中國北京市朝陽區建國門","location":{"lat":"39.718256","lon":"116.367910"}, "DOB": "1989-04-01"}
{"index":{"_index":"twitter","_id":5}}
{"user":"老王","message":"Happy BirthDay My Friend!","uid":6,"age":26,"city":"北京","province":"北京","country":"中國","address":"中國北京市朝陽區國貿","location":{"lat":"39.918256","lon":"116.467910"}, "DOB": "1993-04-01"}
{"index":{"_index":"twitter","_id":6}}
{"user":"老吳","message":"好友來了都今天我生日,好友來了,什么 birthday happy 就成!","uid":7,"age":28,"city":"上海","province":"上海","country":"中國","address":"中國上海市閔行區","location":{"lat":"31.175927","lon":"121.383328"}, "DOB": "1991-04-01"}
我們可以在Kibana_1中通過如下的命令來檢查twitter索引是否已經被成功創建:
在上面,我們可以看到我們已經成功地在cluster_1上創建了twitter索引,那么我們怎么在cluster_2上對這個進行搜索呢?
我們在Kibana_2里,打入如下的命令:
GET remote_cluster:twitter/_search
我們將看到如下的輸出:
從上面我們可以看出來,我們可以對位於cluster_1的twitter索引進行搜索。
對remote索引進行分析
cluster_1
在Kibana_1中,我們通過如下的方法來加載我們的測試數據:
然后點擊“Add data”:
這樣在cluster_1中,我們已經成功地加載了Sample flight data索引。
cluster_2
我們打開Kibana_2,並創建一個為cluster_1中的Sample flight data的index pattern
點擊“Create index pattern”:
輸入我們想要的索引。注意在前面加上remote_cluster:
在上面,如果我們有本地和遠程相同類型的索引(比如,我們針對不同地區的服務器來收集數據),我們可以使用逗號“,”把所有的索引放在一起做成一個index pattern,比如就像:remote_cluster:kibana_sample_data_flights, my_local_index。
點擊“Create index pattern”:
這樣,我們就創建了位於cluster_1里的索引的一個index pattern。我們點擊右上角的星號,並使之成為我們的默認的index。
我們點擊Kibana_2左上角的Discover:
因為我們的默認的index是remote_cluster:kibana_sample_data_flights,所以我們的Discover默認的情況先顯示的是所有關於位於cluster_1上的kibana_sample_data_flights索引數據。我們可以在cluster_2對這些數據進行分析。