首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在多个实例上设置Vespa容器

无法在多个实例上设置Vespa容器
EN

Stack Overflow用户
提问于 2020-10-15 12:20:06
回答 1查看 299关注 0票数 1

我有两个实例,其中我必须在一个码头容器上部署Vespa。一个容器将充当配置集群、容器集群和内容集群,而另一个容器将充当容器集群和内容集群。

应用程序的host.xml文件如下所示:

代码语言:javascript
复制
<hosts>
  <host name="vespa-master">
    <alias>admin0</alias>
  </host>

  <host name="vespa-searcher">
    <alias>searcher1</alias>
  </host>

</hosts>

应用程序的services.xml如下所示:

代码语言:javascript
复制
<services version="1.0">
    <admin version="2.0">
        <adminserver hostalias="admin0"/>
        <configservers>
            <configserver hostalias="admin0"/>
        </configservers>
    </admin>

    <container id="container" version="1.0">
        <document-api />
        <search/>
        <nodes>
            <node hostalias="admin0"/>
            <node hostalias="searcher1"/>
        </nodes>
    </container>

    <content id="content" version="1.0">
        <documents>
            <!--version 1 docs starts-->
            <document type="document_name" mode="index" />
            <!--version 1 docs ends-->
        </documents>

        <redundancy>2</redundancy>
             <engine>
                 <proton>
                     <searchable-copies>1</searchable-copies>
                 </proton>
             </engine>

        <group name="top-group">
            <distribution partitions="*"/>
            <group name="group0" distribution-key="0">
                <node hostalias="admin0" distribution-key="0"/>
                <node hostalias="searcher1" distribution-key="1"/>
            </group>
        </group>
    </content>
</services>

我正在使用一个停靠群来在两个实例之间建立一个覆盖网络连接。它的命令如下所示:

代码语言:javascript
复制
docker network create --driver=overlay --subnet=<IP>/24 vespa_conn --attachable

在我使用过的第一个实例上创建容器的命令是:

代码语言:javascript
复制
docker run --detach --hostname vespa-master --network=vespa_conn <other arguments> --env VESPA_CONFIGSERVERS=vespa-master vespaengine/vespa

在第二个实例上创建容器的命令是:

代码语言:javascript
复制
docker run --detach --hostname vespa-searcher --network=vespa_conn <other arguments> --env VESPA_CONFIGSERVERS=vespa-master vespaengine/vespa

这些命令的引用来自这个页面

在创建和部署我的应用程序之后,第二个容器上的节点状态将不会显示出来。

代码语言:javascript
复制
vespa-get-cluster-state 

Cluster content:
content/distributor/0: up
content/distributor/1: down
content/storage/0: up
content/storage/1: down

我发现的问题是:

代码语言:javascript
复制
content/distributor/0: Failed to fetch json: Connection error: socket write error
admin/cluster-controllers/0: Failed to fetch json: Connection error: socket write error
admin/slobrok.0: Failed to fetch json: Connection error: socket write error
admin/metrics/vespa-master: Failed to fetch json: Connection error: socket write error
hosts/vespa-master/sentinel: Failed to fetch json: Connection error: socket write error
hosts/vespa-master/logd: Failed to fetch json: Connection error: socket write error
[generation not up-to-date ignored]
container/container.1: Failed to fetch json: Connection error: socket write error
hosts/vespa-searcher/logd: Failed to fetch json: Connection error: socket write error
[generation not up-to-date ignored]

经过几次尝试。通过在第二个容器中添加:'override VESPA_CONFIGSERVERS vespa-master' in /opt/vespa/conf/vespa/default-env.txt文件,然后重新启动服务,我解决了这个问题。

是否有更好的方法来做到这一点,这样我就不必手动更新默认的-env.txt文件?

此外,当我在页面中指定的docker命令行的末尾添加“configserver”或“services”时,我得到了以下错误:

代码语言:javascript
复制
[2020-10-15 11:36:13.782540] 1935/8285 (vespa-model-inspect.config.frt.frtconnection) warning: Connection to tcp/localhost:19090 failed or timed out
[2020-10-15 11:36:13.782631] 1935/8285 (vespa-model-inspect.config.frt.frtconnection) warning: FRT Connection tcp/localhost:19090 suspended until 2020-10-15 11:36:23 GMT
[2020-10-15 11:36:13.782647] 1935/8285 (vespa-model-inspect.config.frt.frtconfigagent) info: Error response or no response from config server (key: name=model,namespace=cloud.config,configId=admin/model) (errcode=104, validresponse:0), trying again in 6000 milliseconds

这个错误的原因是什么,我是不是做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-15 15:13:18

要使此工作正常进行,您应该避免在网络名称中出现下划线,请为配置服务器使用完全限定的名称,并为容器命名以使DNS工作。

在管理器群集主机上创建网络:

代码语言:javascript
复制
docker network create --driver=overlay --attachable vespa-net

启动一个同时运行配置服务器和服务的Vespa容器(没有对入口点的参数):

代码语言:javascript
复制
docker run --detach --name vespa-master --hostname vespa-master.vespa-net --network=vespa-net --env VESPA_CONFIGSERVERS=vespa-master.vespa-net vespaengine/vespa

启动仅运行服务(服务参数到入口点)的Vespa容器:

代码语言:javascript
复制
docker run --detach --name vespa-searcher --hostname vespa-searcher.vespa-net --network=vespa-net --env VESPA_CONFIGSERVERS=vespa-master.vespa-net vespaengine/vespa services

然后,在hosts.xml:中使用完全限定的名称

代码语言:javascript
复制
<hosts>
  <host name="vespa-master.vespa-net">
    <alias>admin0</alias>
  </host>

  <host name="vespa-searcher.vespa-net">
    <alias>searcher1</alias>
  </host>

</hosts>

通过部署未经修改的,我得到了以下状态:

代码语言:javascript
复制
[root@vespa-master /]# vespa-get-cluster-state

Cluster content:
content/distributor/0: up
content/distributor/1: up
content/storage/0: up
content/storage/1: up
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64371439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档