我们如何知道elasticsearch中的复制状态?

时间:2014-07-14 11:54:20

标签: elasticsearch replication

我已经设置了具有单个节点(node1)和索引数据的弹性搜索集群。在node1上完成索引后,另一个节点(node2)将添加到集群。现在我已将副本数配置为1.复制成功完成。但我们怎么知道复制完成了?是否有任何可用的API返回复制状态,如正在进行,完成..

我的要求是在复制完成时我会收到通知。

2 个答案:

答案 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, '_')
}

这将获取特定于索引的所有分片主要或副本的状态。处于“初始化”状态的碎片正在处理中,而标记为“已启动”的碎片意味着它们被成功复制。