forked from opensearch-project/sql
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cross cluster search in PPL (opensearch-project#1512)
* feat: PPL parser for ccs Signed-off-by: Sean Kao <[email protected]> * feat: disable describe remote cluster index in PPL Allowing the syntax will lead to misunderstanding in the query result, because we will do a local cluster query for index mapping, even for remote indices. This is due to the restriction that OpenSearch doesn't support remote cluster index mapping query at the moment. Signed-off-by: Sean Kao <[email protected]> * feat: Query system index without cluster name We require system index query to happen at the local cluster. Currently, OpenSearch does not support cross cluster system index query. Thus, mapping of a remote index is unavailable. Therefore, we require the local cluster to have the system index of the remote cluster index. The full "cluster:index" name is still used to query OpenSearch for datarows, as CCS is natively supported. Signed-off-by: Sean Kao <[email protected]> * fix: index name parsing for datasources To identify datasources in the index qualified names, they need to be parsed into parts (separated only by dots). clusterQualifiedName can't contain custom datasources, hence the distinction. Signed-off-by: Sean Kao <[email protected]> * multi clusters setup for integration test Signed-off-by: Sean Kao <[email protected]> * Add IT test case Signed-off-by: Sean Kao <[email protected]> * Document ccs for ppl Signed-off-by: Sean Kao <[email protected]> * documentation update Signed-off-by: Sean Kao <[email protected]> * feat: allow describe remote cluster index in PPL Signed-off-by: Sean Kao <[email protected]> * feat: allow "*:index" to match all remote clusters Signed-off-by: Sean Kao <[email protected]> * use local index names for field mappings request Signed-off-by: Sean Kao <[email protected]> * allow ':' in index identifier Signed-off-by: Sean Kao <[email protected]> * docs update Signed-off-by: Sean Kao <[email protected]> * limit cluster prefix to table names only Signed-off-by: Sean Kao <[email protected]> * move multicluster capability to sql rest test case Signed-off-by: Sean Kao <[email protected]> * add IT for failure case Signed-off-by: Sean Kao <[email protected]> * remove logger info for connection in IT test case Signed-off-by: Sean Kao <[email protected]> --------- Signed-off-by: Sean Kao <[email protected]> Signed-off-by: Mitchell Gale <[email protected]>
- Loading branch information
1 parent
8732bc6
commit 0cc18c1
Showing
18 changed files
with
598 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
.. highlight:: sh | ||
|
||
==================== | ||
Cross-Cluster Search | ||
==================== | ||
|
||
.. rubric:: Table of contents | ||
|
||
.. contents:: | ||
:local: | ||
:depth: 1 | ||
|
||
Introduction | ||
============ | ||
Cross-cluster search lets any node in a cluster execute search requests against other clusters. | ||
It makes searching easy across all connected clusters, allowing users to use multiple smaller clusters instead of a single large one. | ||
|
||
|
||
Configuration | ||
============= | ||
On the local cluster, add the remote cluster name and the IP address with port 9300 for each seed node. :: | ||
|
||
PUT _cluster/settings | ||
{ | ||
"persistent": { | ||
"cluster.remote": { | ||
"<remote-cluster-name>": { | ||
"seeds": ["<remote-cluster-IP-address>:9300"] | ||
} | ||
} | ||
} | ||
} | ||
|
||
|
||
Using Cross-Cluster Search in PPL | ||
================================= | ||
Perform cross-cluster search by using "<cluster-name>:<index-name>" as the index identifier. | ||
|
||
Example search command :: | ||
|
||
>> search source = my_remote_cluster:my_index | ||
|
||
|
||
Limitation | ||
========== | ||
Since OpenSearch does not support cross cluster index metadata retrieval, field mapping of a remote cluster index is not available to the local cluster. | ||
(`[Feature] Cross cluster field mappings query #6573 <https://github.com/opensearch-project/OpenSearch/issues/6573>`_) | ||
Therefore, the query engine requires that for any remote cluster index that the users need to search, | ||
the local cluster keep a field mapping system index with the same index name. | ||
This can be done by creating an index on the local cluster with the same name and schema as the remote cluster index. | ||
|
||
|
||
Authentication and Permission | ||
============================= | ||
|
||
1. The security plugin authenticates the user on the local cluster. | ||
2. The security plugin fetches the user’s backend roles on the local cluster. | ||
3. The call, including the authenticated user, is forwarded to the remote cluster. | ||
4. The user’s permissions are evaluated on the remote cluster. | ||
|
||
Check `Cross-cluster search access control <https://opensearch.org/docs/latest/security/access-control/cross-cluster-search/>`_ for more details. | ||
|
||
Example: Create the ppl_role for test_user on local cluster and the ccs_role for test_user on remote cluster. Then test_user could use PPL to query ``ppl-security-demo`` index on remote cluster. | ||
|
||
1. On the local cluster, refer to `Security Settings <security.rst>`_ to create role and user for PPL plugin and index access permission. | ||
|
||
2. On the remote cluster, create a new role and grant permission to access index. Create a user with the same name and credentials as the local cluster, and map the user to this role:: | ||
|
||
PUT _plugins/_security/api/roles/ccs_role | ||
{ | ||
"index_permissions":[ | ||
{ | ||
"index_patterns":["ppl-security-demo"], | ||
"allowed_actions":[ | ||
"indices:admin/shards/search_shards", | ||
"indices:data/read/search" | ||
] | ||
} | ||
] | ||
} | ||
|
||
PUT _plugins/_security/api/rolesmapping/ccs_role | ||
{ | ||
"backend_roles" : [], | ||
"hosts" : [], | ||
"users" : ["test_user"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.