当前位置: 首页 > 知识库问答 >
问题:

避免ElasticSearch错误503服务器不可用:使用WaitForStatus

郁承运
2023-03-14
public ElasticClient getElasticSearchClient()
{
    ConnectionSettings connectionSettings = new Nest.ConnectionSettings(new Uri("http://localhost:9200"))
                                                    .DefaultIndex("myindex")
                                                    .DisableDirectStreaming();
    ElasticClient client = new ElasticClient(connectionSettings);
    //var health = client.Cluster.Health("myindex", a => (a.WaitForStatus(WaitForStatus.Yellow)).Timeout(50));
    return client;
}

public void checkElasticsearchIndex()
{
    var client = getElasticSearchClient();

    var health = this.client.Cluster.Health("myindex", a => (a.WaitForStatus(WaitForStatus.Yellow)));

    CountResponse count = client.Count<myobject>();

    if (!client.Indices.Exists("myindex").IsValid || count.Count == 0)
    {
        BulkWriteAllToIndexES(client);
    }
}

>

  • 计数操作失败,出现以下错误消息:

    OriginalException:ElasticSearch.Net.ElasticSearchClientException:远程服务器返回错误:(503)服务器不可用。调用:状态代码503来自:GET/myindex/_count。ServerError:Type:search_phase_execution_exception原因:“All shards Failed”---->System.Net.WebException:远程服务器返回错误:(503)服务器不可用。

    健康状况也会下降:

    我的问题:有没有办法等到客户机/集群/节点准备就绪而不得到任何例外?

  • 共有1个答案

    罗星洲
    2023-03-14

    听起来像是在启动程序的同时启动了Elasticsearch过程,但是Elasticsearch需要比程序更长的时间才能准备好。

    如果是这种情况,您可能对使用.NET客户端用于针对ElasticSearch进行集成测试的相同抽象感兴趣。这些抽象从Elasticsearch进程读取输出,以了解它何时准备就绪,并阻塞直到发生为止。它们可以在AppVeyor配置项包提要上使用(计划将来将它们发布到Nuget)。

    有一些例子说明了如何使用抽象来升级集群。对于单个节点,类似于

    using System;
    using Elastic.Managed.Configuration;
    using Elastic.Managed.ConsoleWriters;
    using Elastic.Managed.FileSystem;
    
    namespace Elastic.Managed.Example
    {
        class Program
        {
            static void Main(string[] args)
            {
                var version = "7.5.1";
                var esHome = Environment.ExpandEnvironmentVariables($@"%LOCALAPPDATA%\ElasticManaged\{version}\elasticsearch-{version}");
    
                using (var node = new ElasticsearchNode(version, esHome))
                {
                    node.SubscribeLines(new LineHighlightWriter());
                    if (!node.WaitForStarted(TimeSpan.FromMinutes(2))) throw new Exception();
    
                    // do your work here
                }
            }
        }
    }
    
    var plugins = new ElasticsearchPlugins(ElasticsearchPlugin.RepositoryAzure, ElasticsearchPlugin.IngestAttachment);
    var config = new EphemeralClusterConfiguration("7.5.1", ClusterFeatures.XPack, plugins, numberOfNodes: 1);
    using (var cluster = new EphemeralCluster(config))
    {
        cluster.Start();
    
        var nodes = cluster.NodesUris();
        var connectionPool = new StaticConnectionPool(nodes);
        var settings = new ConnectionSettings(connectionPool).EnableDebugMode();
        var client = new ElasticClient(settings);
    
        Console.Write(client.CatPlugins().DebugInformation);
    }
    
     类似资料:
    • 问题内容: 我是Jetty的新手,我尝试在此处运行示例程序“ http://www.codeproject.com/Articles/128145/Run- Jetty-Web-Server-Within-Your- Application ”,但我收到了错误消息我的页面“ http:// localhost:8585 / runJetty / ” 我从Eclipse获取的错误日志: 我的xml文

    • 首先,我在google和statckoverflow中尝试了很多,但还是失败了。我希望能帮助我。谢谢你。 当从我的WebClient调用WCF服务时,我收到以下错误。 注意2:服务器和Web客户端托管在IIS中。

    • 当我在我的服务器上用wget、curl或python爬行谷歌搜索引擎时,我遇到了一个非常奇怪的问题。Google将我重定向到以[ipv4 | ipv6]开头的地址。谷歌。fr/抱歉/索引重定向。。。最后发送503错误,服务不可用。。。 有时抓取工作正常,有时不是在白天,我尝试了几乎所有可能的方法:强制ipv4/ipv6而不是主机名、引用者、用户代理、vpn、. com/. fr/、代理和tor,.

    • 问题内容: 我一直在使用亚马逊的产品广告API来生成包含给定书籍价格的网址。我生成的一个网址如下: http://www.amazon.com/gp/offer- listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26crea

    • 我正在尝试使用docker-compose和jwilder/nginx-proxy以及letsencrypt companion构建一个web应用程序,但是当我尝试时,nginx向我抛出一个503错误。 我的web应用程序是用react构建的,我制作了这个Dockerfile来构建容器映像: 这是此映像使用的nginx.config: web应用程序映像工作良好,我可以打开它,如果我只运行这个。问