我已经设置了具有单个节点(node1)和索引数据的弹性搜索集群。在node1上完成索引后,另一个节点(node2)将添加到集群。现在我已将副本数配置为1.复制成功完成。但我们怎么知道复制完成了?是否有任何可用的API返回复制状态,如正在进行,完成..
我的要求是在复制完成时我会收到通知。
答案 0 :(得分:3)
检查所有分片是否已成功复制的最快方法是群集运行状况api:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-health.html
状态为“绿色”将告诉您所有分片已分配:
群集运行状况为:绿色,黄色或红色。在碎片上 level,红色状态表示未分配特定分片 在群集中,黄色表示主分片已分配但是 副本不是,绿色表示分配所有分片。该 索引级别状态由最差的分片状态控制。该 集群状态由最差的索引状态控制。
它有一个内置机制来等待状态更改然后通知您。举个例子:
curl -XGET 'http://localhost:9200/_cluster/health?wait_for_status=green&timeout=60s'
将检查状态是否为绿色。如果是,它将立即返回,如果不是,它将等待最多60秒,同时检查然后返回状态。你可以在一个循环中调用这个api,或者只是将超时设置为一个高数字,当状态变为绿色时它会返回,让你知道所有分片都已分配。
答案 1 :(得分:3)
除了John Petrone的回答,我更倾向于使用以下命令
const appRoutes: Routes = [
{
path: 'Module1', loadChildren: () => new Promise((resolve, reject) => {
loadPlugin('http://localhost:4000/chunk.js', (exports) => {
console.log(exports);
resolve(exports.LazyModule);
});
})
},
{ path: '*', component: AppComponent }
];
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
RouterModule.forRoot(appRoutes),
HttpClientModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
function loadPlugin(pluginUri, mainCallback) {
installMainCallback(pluginUri, mainCallback);
loadPluginChunk(pluginUri, mainCallback);
}
function installMainCallback(pluginUri, mainCallback) {
var _pluginIdent = pluginIdent(pluginUri)
window[_pluginIdent] = function (exports) {
delete window[_pluginIdent]
mainCallback(exports)
}
}
function loadPluginChunk(pluginUri, callback) {
return loadScript(pluginUri, callback)
}
function loadScript(url, callback) {
var script = document.createElement('script')
script.src = url
script.onload = function () {
document.head.removeChild(script)
callback && callback()
}
document.head.appendChild(script)
}
function pluginIdent(pluginUri) {
return '_' + pluginUri.replace(/\./g, '_')
}
这将获取特定于索引的所有分片主要或副本的状态。处于“初始化”状态的碎片正在处理中,而标记为“已启动”的碎片意味着它们被成功复制。