【发布时间】:2021-07-12 23:07:29
【问题描述】:
我有一个“旧版”php 应用程序,我们刚刚迁移它以在 Google Cloud(Kubernetes 引擎)上运行。除此之外,我还运行了一个 ElasticSearch 安装(Kubernetes 上的 Elastic Cloud)。在尝试部署其他服务时 Kubernetes 杀死了我的 Elastic Search 的一些事件之后,我们得出的结论是,我们可能不应该在 Kubernetes 上运行 ES,至少如果要自己管理它的话。这是由于明显缺乏以稳健方式执行此操作的知识。
因此,我们现在的想法是迁移到托管 Elastic Cloud,而不是部署和开始使用非常简单。但是......现在我尝试使用我们的 php 应用程序所需的数据加载 ES,如果在过程中失败并显示错误消息 no alive nodes found in cluster。有时它发生在少于 1000 个“文档”之后,而其他时候我设法在失败前将其中的 5000 多个索引。
这是我初始化es客户端的方式:
$clientBuilder = ClientBuilder::create();
$clientBuilder->setElasticCloudId(ELASTIC_CLOUD_ID);
$clientBuilder->setBasicAuthentication('elastic',ELASTICSEARCH_PW);
$clientBuilder->setRetries(10);
$this->esClient = $clientBuilder->build();
ELASTIC_CLOUD_ID & ELASTICSEARCH_PW 是通过环境变量设置的。
请求看起来像:
$params = [
'index' => $index,
'type' => '_doc',
'body' => $body,
'client' => [
'timeout' => 15,
'connect_timeout' => 30,
'curl' => [CURLOPT_HTTPHEADER => ['Content-type: application/json']
]
主体和索引取决于我们“摄取”的程度,但通常是相当标准的东西。
当在我们自己的 GKE 集群中自己安装的 Elastic 上运行时,所有这些都可以正常工作。
到目前为止,我尝试的是添加重试和超时,但这些似乎都没有太大区别?
我们正在运行:
- php 7.4
- 弹性搜索 7.11
- Elastic Search 客户端 7.12(通过 Composer 编写的 php)
【问题讨论】:
标签: php elasticsearch