跨集群查詢
跨集群搜索(cross-cluster search)使你可以針對一個或多個遠程集群運行單個搜索請求。 例如,你可以使用跨集群搜索來篩選和分析存儲在不同數(shù)據(jù)中心的集群中的日志數(shù)據(jù)。
環(huán)境準備
角色 |
IP |
系統(tǒng) |
dev |
172.16.122.244 |
CentOS 7.9 |
prod |
172.16.122.245 |
CentOS 7.9 |
ES 軟件下載地址 https://elasticsearch.cn/download,我使用的版本是 7.13。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.0-x86_64.rpm
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.13.2-x86_64.rpm
軟件安裝配置
rpm -ivh elasticsearch-7.13.0-x86_64.rpm
rpm -ivh kibana-7.13.2-x86_64.rpm
ES 集群配置
dev 集群配置 /etc/elasticsearch/elasticsearch.yml
cluster.name: dev
node.name: dev-1
network.host: 0.0.0.0
discovery.type: single-node
prod 集群配置 /etc/elasticsearch/elasticsearch.yml
cluster.name: prod
node.name: prod-1
network.host: 0.0.0.0
discovery.type: single-node
kibana 配置添加如下 /etc/kibana/kibana.yml
server.host: "0.0.0.0"
啟動集群
systemctl restart elasticsearch
systemctl restart kibana
ES 集群訪問使用 IP:9200,Kibana 集群訪問 IP:5601。
[root@iZ0xignxv65xzl2gq5x8t4Z ~]# curl localhost:9200
{
"name" : "dev-1",
"cluster_name" : "dev",
"cluster_uuid" : "k45zaOJASSGHos3hnVFePw",
"version" : {
"number" : "7.13.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "5ca8591c6fcdb1260ce95b08a8e023559635c6f3",
"build_date" : "2021-05-19T22:22:26.081971330Z",
"build_snapshot" : false,
"lucene_version" : "8.8.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
配置跨集群搜索
注冊 remote cluster
以下 cluster update settings API請求添加了兩個遠程集群:dev 和 prod,可以在其中一個集群配置,每個集群都配置一下。
PUT _cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"dev": {
"seeds": [
"172.16.122.244:9300"
],
"transport.compress": true,
"skip_unavailable": true
},
"prod": {
"seeds": [
"172.16.122.245:9300"
],
"transport.compress": true,
"skip_unavailable": true
}
}
}
}
}
Elasticsearch 中有兩種重要的網(wǎng)絡通信機制需要了解:
- HTTP 9200:用于 HTTP 通信綁定的地址和端口,這是 Elasticsearch REST API 公開的方式
- transport 9300:用于集群內(nèi)節(jié)點之間的內(nèi)部通信
在 Kibana 的 Dev Tools 里面執(zhí)行上面的請求。
我們看到右邊有一個告警,提示集群沒有進行任何安全認證,不安全,這個我們后面再進行處理,先看下下目前跨集群查詢的情況。
我們接下來使用如下的命令來檢查我們的連接狀態(tài):
GET _remote/info
我們可以看到如下的響應信息:
{
"prod" : {
"connected" : true,
"mode" : "sniff",
"seeds" : [
"172.16.122.245:9300"
],
"num_nodes_connected" : 1,
"max_connections_per_cluster" : 3,
"initial_connect_timeout" : "30s",
"skip_unavailable" : true
},
"dev" : {
"connected" : true,
"mode" : "sniff",
"seeds" : [
"172.16.122.244:9300"
],
"num_nodes_connected" : 1,
"max_connections_per_cluster" : 3,
"initial_connect_timeout" : "30s",
"skip_unavailable" : true
}
}
它表明我們的連接是成功的。
這個時候我們在 prod kibana 中創(chuàng)建如下的 users 索引:
POST _bulk
{"index":{"_index":"users","_id":1}}
{"user":"張三","message":"今兒天氣不錯啊,出去轉(zhuǎn)轉(zhuǎn)去","uid":2,"age":20,"city":"北京","province":"北京","country":"中國","address":"中國北京市海淀區(qū)","location":{"lat":"39.970718","lon":"116.325747"}, "DOB": "1999-04-01"}
{"index":{"_index":"users","_id":2}}
{"user":"老劉","message":"出發(fā),下一站云南!","uid":3,"age":22,"city":"北京","province":"北京","country":"中國","address":"中國北京市東城區(qū)臺基廠三條3號","location":{"lat":"39.904313","lon":"116.412754"}, "DOB": "1997-04-01"}
{"index":{"_index":"users","_id":3}}
{"user":"李四","message":"happy birthday!","uid":4,"age":25,"city":"北京","province":"北京","country":"中國","address":"中國北京市東城區(qū)","location":{"lat":"39.893801","lon":"116.408986"}, "DOB": "1994-04-01"}
{"index":{"_index":"users","_id":4}}
{"user":"老賈","message":"123,gogogo","uid":5,"age":30,"city":"北京","province":"北京","country":"中國","address":"中國北京市朝陽區(qū)建國門","location":{"lat":"39.718256","lon":"116.367910"}, "DOB": "1989-04-01"}
{"index":{"_index":"users","_id":5}}
{"user":"老王","message":"Happy BirthDay My Friend!","uid":6,"age":26,"city":"北京","province":"北京","country":"中國","address":"中國北京市朝陽區(qū)國貿(mào)","location":{"lat":"39.918256","lon":"116.467910"}, "DOB": "1993-04-01"}
{"index":{"_index":"users","_id":6}}
{"user":"老吳","message":"好友來了都今天我生日,好友來了,什么 birthday happy 就成!","uid":7,"age":28,"city":"上海","province":"上海","country":"中國","address":"中國上海市閔行區(qū)","location":{"lat":"31.175927","lon":"121.383328"}, "DOB": "1991-04-01"}
我們可以在 prod kibana 中通過如下的命令來檢查 users 索引是否已經(jīng)被成功創(chuàng)建:
GET _cat/indices
green open .kibana_7.13.2_001 1jXL4B6hQzePkxZCFLj0Gw 1 0 27 9 2.1mb 2.1mb
green open .apm-custom-link HyHW7sA5RMWBSfXTAl51hQ 1 0 0 0 208b 208b
green open .kibana-event-log-7.13.2-000001 nyUtNHamSqCppZkT9IvLLA 1 0 1 0 5.6kb 5.6kb
green open .apm-agent-configuration XMHcg6sFQfKcHZFr_o34Bw 1 0 0 0 208b 208b
green open .kibana_task_manager_7.13.2_001 Qdlj4I-mRLqg_1_AobYEQA 1 0 10 2278 345.9kb 345.9kb
yellow open users kSt0onMUToKyawJ0S_y19A 1 1 6 0 12.2kb 12.2kb
在上面,我們可以看到我們已經(jīng)成功地在 prod 上創(chuàng)建了 users 索引,那么我們怎么在 dev 上對這個進行搜索呢?
我們在 dev kibana 里,打入如下的命令:
GET prod:users/_search
從上面我們可以看出來,我們可以對位于 prod 的 users 索引進行搜索。
如果你配置了多個 remote 索引,你可以使用如下的方法來進行搜索:
GET *:users/_search
在這里,我們使用 *:users 來表示所有 remote cluster里含有 users 的集群。
配置索引模式
我們通過 API 的方式可以進行跨集群查詢了,那我們可以在 dev kibana 上面配置索引模式進行查詢。
也可以輸入 prod:users
,配置特定 remote cluster 的索引。
至此跨集群查詢配置完成了,也可以設置互相查詢。
安全配置
配置集群間安全認證9300
跨集群搜索啟用跨多個集群的聯(lián)合搜索。 將跨集群搜索與受保護集群一起使用時,所有集群都必須啟用 Elasticsearch 安全功能。必須允許本地群集(用于啟動跨群集搜索的群集)連接到遠程群集,這意味著用于簽署本地群集的 SSL/TLS 密鑰的 CA 必須受到遠程群集的信任。
用戶身份驗證是在本地群集上執(zhí)行的,并且用戶和用戶的角色(role)將傳遞到遠程群集。 遠程集群會根據(jù)其本地角色定義檢查用戶的角色,以確定允許用戶訪問哪些索引。
在對安全的 Elasticsearch 集群使用跨集群復制或跨集群搜索之前,請完成以下配置任務:
- Enable the Elasticsearch security features on every node in each connected cluster by setting
xpack.security.enabled
totrue
inelasticsearch.yml
. Refer to the Elasticsearch security settings. - Configure Transport Layer Security (TLS) on every node to encrypt internode traffic and authenticate nodes in the local cluster with nodes in all remote clusters. Refer to set up basic security for the Elastic Stack for the required steps to configure security.
此過程使用相同的 CA 為所有節(jié)點生成證書。或者,您可以將來自本地集群的證書添加為每個遠程集群中的可信 CA。您還必須將來自遠程集群的證書添加為本地集群上的受信任 CA。使用同一個 CA 為所有節(jié)點生成證書可簡化此任務。
首先創(chuàng)建 CA 證書。
/usr/share/elasticsearch/bin/elasticsearch-certutil ca
通過 CA 證書創(chuàng)建集群證書,我們這里所有節(jié)點統(tǒng)一使用一個證書,也可以給證書設置一個密碼。
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
證書生成在了 elasticsearch 的家目錄下面。
[root@iZ0xignxv65xzl2gq5x8t4Z ~]# ll /usr/share/elasticsearch/
total 620
drwxr-xr-x 2 root root 4096 Feb 22 15:56 bin
-rw------- 1 root root 3596 Feb 23 11:40 elastic-certificates.p12
-rw------- 1 root root 2672 Feb 23 11:37 elastic-stack-ca.p12
drwxr-xr-x 9 root root 4096 Feb 22 15:56 jdk
drwxr-xr-x 3 root root 4096 Feb 22 15:56 lib
-rw-r--r-- 1 root root 3860 May 20 2021 LICENSE.txt
drwxr-xr-x 60 root root 4096 Feb 22 15:56 modules
-rw-rw-r-- 1 root root 594096 May 20 2021 NOTICE.txt
drwxr-xr-x 2 root root 4096 May 20 2021 plugins
-rw-r--r-- 1 root root 2710 May 20 2021 README.asciidoc
把證書elastic-certificates.p12
copy 到所有節(jié)點的 /etc/elasticsearch
目錄下面,并添加讀的權限。
chmod +r /usr/share/elasticsearch/elastic-certificates.p12
mv /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch
然后再所有的節(jié)點的配置文件 elasticsearch.yml
增加如下配置:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
因為證書設置了密碼,我們需要添加證書密碼的配置。
cd /usr/share/elasticsearch/
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
然后重啟服務即可。
systemctl restart elasticsearch
配置集群安全認證9200
目前集群節(jié)點之間通信已經(jīng)使用了 TLS 加密,但是 kibana 連接 ES 還是沒有進行任何認證,我們這里配置用戶密碼的認證。
首先在 elasticsearch.yml
里面新增如下配置,開啟用戶認證:
xpack.security.enabled: true
然后重啟集群。
為集群配置內(nèi)置用戶密碼。
# 自動創(chuàng)建密碼
./bin/elasticsearch-setup-passwords auto
# 手動指定密碼
./bin/elasticsearch-setup-passwords interactive
當我們再次訪問 9200 端口的時候,就已經(jīng)報錯了,需要認證,同樣的 kibana 連接集群也需要認證。
修改 kibana 的配置文件,新增如下配置:
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"
重啟 kibana,登錄賬戶密碼即可。
參考文檔:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-minimal-setup.html#_prerequisites_10
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/modules-cross-cluster-search.html#ccs-remote-cluster-setup
https://www.elastic.co/guide/en/kibana/8.5/settings.html#server-publicBaseUrl
https://www.elastic.co/guide/en/elasticsearch/reference/8.6/remote-clusters-security.html文章來源:http://www.zghlxwxcb.cn/news/detail-732354.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-732354.html
到了這里,關于ES 跨集群搜索 Cross-cluster search (CCS)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!