💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 卷影副本索引 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-shadow-replicas.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-shadow-replicas.html) 译文链接 : [卷影副本索引](/pages/viewpage.action?pageId=4260489) 贡献者 : [飞师傅](/display/~zhangyifei)  此功能是实验性功能,可能在未来的版本中完全更改或删除。 如果你想要使用共享文件系统,可以使用卷影副设置来选择索引数据在磁盘上保存的位置,以及 **Elasticsearch** 如何在一个索引的所有分片上重复操作。 为了充分利用 `index.data_path` 和 `index.shadow_replicas` 设置,你需要允许 **Elasticsearch** 对多个实例使用同一个数据目录,方法是在 elasticsearch.yml 文件中设置 `node.add_lock_id_to_custom_path` 为 false。 ``` node.add_lock_id_to_custom_path: false ``` 你还需要向安全管理器指定自定义索引的位置,以便可以应用正确的权限。你可以通过 elasticsearch.yml 文件中的 `path.shared_data` 进行设置。 ``` path.shared_data: /opt/data ``` 这表示着 **Elasticsearch** 可以读写 `path.shared_data` 设置的目录中的任意文件。 然后,你可以使用自定义数据路径创建索引,也就是每个节点都使用这个路径获取数据。 因为卷影副本不会在副本分片上索引文档,所以如果没有在包含副本的节点上处理最新的集群状态,副本已知的映射可能会在索引已知的映射之后。因此,强烈建议使用卷影副本时使用预定义映射。 ``` curl -XPUT 'localhost:9200/my_index' -d ' { "index" : { "number_of_shards" : 1, "number_of_replicas" : 4, "data_path": "/opt/data/my_index", "shadow_replicas": true } }' ``` 在上面的例子中,"/opt/data/my_index"路径是一个共享文件系统,它必须让 **Elasticsearch** 集群每个节点都可以访问。你还必须确保 **Elasticsearch** 进程拥有读写 `index.data_path` 目录的权限。 `data_path` 不必包含索引名,在上述例子中,使用了"my_index",但也可以就用"/opt/data/"。 使用 `index.shadow_replicas` 为"true"的设置创建的索引,不会将文档操作复制到任何副本分片上,它只会持续刷新。一旦分段在卷影副本所在的文件系统上可以用(在一次 **Elasticsearch** "Flush" 之后),可以使用常规刷新(由 `index.refresh_interval` 管理)让新数据可搜索。 > 注意 由于文档只在主分片上有索引,如果只在副本分片上执行上述命令,实时的GET请求可能无法返回文档,因此如果没有设置偏好标识,GET API请求会自动设置 `?preference=_primary` 标识。 为了确保以足够快的方式同步数据,你可能需要将索引刷新的阀值调整为所需的值。因为一次 **flush** 操作需要 **fsync** 分段文件到磁盘上,所以它会对其他所有的副本节点可见。 因为增加 **flush **次数会影响索引性能,所以用户应该测试适合他们的 **flush** 阀值水平。 **Elasticsearch** 集群仍然会检测主分片的丢失,并且在丢失的情况下将副本分片转换为主分片。因为每个卷影副本都没有维护`IndexWriter`,所以这种转换需要稍长的时间。 以下是可以使用设置更新API变更的设置列表: `1.index.data_path`(string)  用于设置存放索引数据的路径。请注意,默认情况下Elasticsearch会将节点信息附加到路径,以确保在同一台机器上的多个Elasticsearch实例不共享数据目录。 2.`index.shadow_replicas`  表示此索引是否使用卷影副本。默认为 `false`。 3. `index.shared_filesystem`  表示此索引是否使用共享文件系统。如果`index.shadow_replicas`设置为`true`,则默认为`true`,否则为`false`。 4.`index.shared_filesystem.recover_on_any_node`  表示是否应允许索引的主分片在群集中的任何节点上恢复。如果找到保存分片副本的节点,则恢复首选该节点。默认为false。