- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
将远程集群从证书身份验证迁移到 API 密钥身份验证
编辑将远程集群从证书身份验证迁移到 API 密钥身份验证
编辑与基于 TLS 证书的安全模型相比,用于远程集群的基于 API 密钥的安全模型为管理员提供了更细粒度的访问控制。因此,您可能需要从基于证书的安全模型迁移到基于 API 密钥的模型。
虽然可以通过定义新的远程集群连接(使用新的别名)进行迁移,但这有几个缺点
- 对于跨集群复制,无法更改现有任务的领导者集群别名。因此,对于新的远程集群,需要从头开始重新创建追随者索引。
- 对于跨集群搜索,转换和异常检测作业允许更新远程集群别名。但是,如果作业是使用通配符创建的,例如
*:source_index
和superuser
,则添加新的远程集群将导致作业执行双倍的工作量,并可能因重复而使结果出现偏差。
由于这些原因,您可能更喜欢通过以下步骤就地迁移远程集群
如果您遇到任何问题,请参阅故障排除。
先决条件
编辑- 本地和远程集群的节点必须在 8.10 或更高版本上。
- 本地和远程集群必须具有适当的许可证。有关更多信息,请参阅https://elastic.ac.cn/subscriptions。
重新配置远程集群并生成跨集群 API 密钥
编辑在远程集群上
-
在远程集群的每个节点上启用远程集群服务器。在
elasticsearch.yml
中- 将
remote_cluster_server.enabled
设置为true
。 - 配置远程集群服务器流量的绑定和发布地址,例如使用
remote_cluster.host
。如果不配置地址,远程集群流量可能会绑定到本地接口,而运行在其他机器上的远程集群将无法连接。 - (可选)使用
remote_cluster.port
配置远程服务器端口(默认为9443
)。
- 将
-
接下来,生成证书颁发机构 (CA) 和服务器证书/密钥对。在远程集群的一个节点上,从安装 Elasticsearch 的目录中
-
创建一个 CA,如果您还没有 CA
./bin/elasticsearch-certutil ca --pem --out=cross-cluster-ca.zip --pass CA_PASSWORD
将
CA_PASSWORD
替换为您想要用于 CA 的密码。如果您不部署到生产环境,则可以删除--pass
选项及其参数。 -
解压缩生成的
cross-cluster-ca.zip
文件。此压缩文件包含以下内容/ca |_ ca.crt |_ ca.key
-
为远程集群中的节点生成证书和私钥对
./bin/elasticsearch-certutil cert --out=cross-cluster.p12 --pass=CERT_PASSWORD --ca-cert=ca/ca.crt --ca-key=ca/ca.key --ca-pass=CA_PASSWORD --dns=example.com --ip=127.0.0.1
- 将
CA_PASSWORD
替换为上一步中的 CA 密码。 - 将
CERT_PASSWORD
替换为您想要用于生成的私钥的密码。 - 使用
--dns
选项指定证书的相关 DNS 名称。您可以多次指定它以用于多个 DNS。 - 使用
--ip
选项指定证书的相关 IP 地址。您可以多次指定它以用于多个 IP 地址。
- 将
-
如果远程集群有多个节点,您可以
- 为所有节点创建一个通配符证书;
- 或者,手动或使用静默模式批量为每个节点创建单独的证书。
-
-
在远程集群的每个节点上
- 将上一步中的
cross-cluster.p12
文件复制到config
目录。如果您没有创建通配符证书,请确保复制正确的特定于节点的 p12 文件。 -
将以下配置添加到
elasticsearch.yml
xpack.security.remote_cluster_server.ssl.enabled: true xpack.security.remote_cluster_server.ssl.keystore.path: cross-cluster.p12
-
将 SSL 密钥库密码添加到 Elasticsearch 密钥库
./bin/elasticsearch-keystore add xpack.security.remote_cluster_server.ssl.keystore.secure_password
出现提示时,输入上一步中的
CERT_PASSWORD
。
- 将上一步中的
- 重新启动远程集群。
- 在远程集群上,生成一个跨集群 API 密钥,该密钥提供对您想要用于跨集群搜索或跨集群复制的索引的访问权限。您可以使用创建跨集群 API 密钥 API 或Kibana。
- 将编码的密钥(响应中的
encoded
)复制到安全的位置。您稍后需要它来连接到远程集群。
停止跨集群操作
编辑在本地集群上,停止引用远程集群的任何持久性任务
重新连接到远程集群
编辑在本地集群上
-
使用跨集群复制和跨集群搜索所需的远程索引权限或远程集群权限来增强本地集群用户使用的任何角色。请参阅配置角色和用户。注意
- 您只需要向用于跨集群操作的现有角色分配额外的
remote_indices
或remote_cluster
权限。您应该能够从远程集群上的原始角色复制这些权限,这些权限在基于证书的安全模型下定义。 - 本地集群上的角色不能超过跨集群 API 密钥授予的
access
权限。任何额外的本地权限都将被跨集群 API 密钥的权限抑制。 - 如果跨集群复制或跨集群搜索任务已配置为
superuser
角色,则无需更新。superuser
角色会自动更新以允许访问所有远程索引。 - 使用命名角色作为常规用户运行的任务会立即更新为新权限。任务将在下次运行时加载新的定义。
- 您需要重新启动使用 API 密钥运行的任务(在后续步骤中完成)。
- 您只需要向用于跨集群操作的现有角色分配额外的
-
如果您已动态配置远程集群(通过集群设置 API)
-
检索当前的远程集群配置,并将其存储在安全的地方。如果您需要回滚,则可能稍后需要它。使用集群设置 API
resp = client.cluster.get_settings( filter_path="persistent.cluster.remote", ) print(resp)
response = client.cluster.get_settings( filter_path: 'persistent.cluster.remote' ) puts response
const response = await client.cluster.getSettings({ filter_path: "persistent.cluster.remote", }); console.log(response);
GET /_cluster/settings?filter_path=persistent.cluster.remote
- 通过将远程集群设置设置为
null
来删除现有的远程集群定义。
-
- 如果您已静态配置远程集群(通过
elasticsearch.yml
),请从elasticsearch.yml
中复制cluster.remote
设置,并将其存储在安全的地方。如果您需要回滚,则可能稍后需要它们。 -
在本地集群的每个节点上
- 将之前在远程集群上生成的
ca.crt
文件复制到config
目录中,并将文件重命名为remote-cluster-ca.crt
。 -
将以下配置添加到
elasticsearch.yml
xpack.security.remote_cluster_client.ssl.enabled: true xpack.security.remote_cluster_client.ssl.certificate_authorities: [ "remote-cluster-ca.crt" ]
-
将之前在远程集群上创建的跨集群 API 密钥添加到密钥库
./bin/elasticsearch-keystore add cluster.remote.ALIAS.credentials
将
ALIAS
替换为迁移之前用于跨集群操作的相同别名。出现提示时,输入之前在远程集群上创建的编码跨集群 API 密钥。
- 将之前在远程集群上生成的
-
如果您已动态配置远程集群(通过集群设置 API)
- 重新启动本地集群以加载对密钥库和设置的更改。
-
重新添加远程集群。使用相同的远程集群别名,并将传输端口更改为远程集群端口。例如
resp = client.cluster.put_settings( persistent={ "cluster": { "remote": { "my_remote": { "mode": "proxy", "proxy_address": "my.remote.cluster.com:9443" } } } }, ) print(resp)
response = client.cluster.put_settings( body: { persistent: { cluster: { remote: { my_remote: { mode: 'proxy', proxy_address: 'my.remote.cluster.com:9443' } } } } } ) puts response
const response = await client.cluster.putSettings({ persistent: { cluster: { remote: { my_remote: { mode: "proxy", proxy_address: "my.remote.cluster.com:9443", }, }, }, }, }); console.log(response);
-
如果您已静态配置远程集群(通过
elasticsearch.yml
)- 更新本地集群上每个节点中
elasticsearch.yml
中的cluster.remote
设置。将端口更改为远程集群端口,默认为9443
。 - 重新启动本地集群以加载对密钥库和设置的更改。
- 更新本地集群上每个节点中
-
使用远程集群信息 API来验证本地集群是否已成功连接到远程集群
resp = client.cluster.remote_info() print(resp)
response = client.cluster.remote_info puts response
const response = await client.cluster.remoteInfo(); console.log(response);
GET /_remote/info
API 响应应指示本地集群已连接到远程集群
恢复跨集群操作
编辑恢复您之前停止的任何持久任务。任务应由在迁移之前创建任务的同一用户或 API 密钥重新启动。确保此用户或 API 密钥的角色已更新为所需的 remote_indices
或 remote_cluster
权限。对于用户,任务在启动时会捕获调用者的凭据,并在该用户的安全上下文中运行。对于 API 密钥,重新启动任务将使用更新后的 API 密钥更新任务。
禁用基于证书的身份验证和授权
编辑仅当在本地集群上已证明迁移成功时才继续执行此步骤。如果迁移不成功,请找出问题所在并尝试修复或回滚。
接下来,禁用基于证书的连接。可以选择撤销授权。
-
没有特定的设置来启用或禁用基于证书的跨集群连接,因为它与集群内节点到节点通信共享相同的传输协议。
远程集群管理员可以阻止现有本地集群连接的一种方法是更改 TLS 信任。具体步骤因集群的配置方式而异。一种通用的解决方案是重新创建远程传输接口使用的 CA 和证书/密钥,以便本地或分布式任何现有证书/密钥不再受信任。
另一种解决方案是对传输接口应用 IP 过滤器,阻止来自集群外部的流量。
- (可选)删除远程集群上仅用于跨集群操作的任何角色。在基于 API 密钥的安全模型下,不再使用这些角色。
回滚
编辑如果需要回滚,请在本地集群上执行以下步骤
- 停止任何引用远程集群的持久任务。
- 通过将远程集群设置设置为
null
来删除远程集群定义。 - 从迁移期间更新的任何角色中删除
remote_indices
或 *remote_cluster* 权限。 - 在每个节点上,从
elasticsearch.yml
中删除remote_cluster_client.ssl.*
设置。 - 重新启动本地集群以将更改应用到密钥库和
elasticsearch.yml
。 - 在本地集群上,应用原始的远程集群设置。如果远程集群连接是静态配置的(使用
elasticsearch.yml
文件),则重新启动集群。 - 使用 远程集群信息 API 来验证本地集群是否已连接到远程集群。响应应具有
"connected": true
且不应具有"cluster_credentials": "::es_redacted::"
。 - 重新启动您之前停止的任何持久任务。