无法在多个实例上设置 Vespa 容器
Unable to setup Vespa container on multiple instances
我有两个实例,我必须在 docker 容器上部署 Vespa。一个容器将充当配置集群、容器集群和内容集群,而另一个将充当容器集群和内容集群。
host.xml 应用程序文件如下所示:
<hosts>
<host name="vespa-master">
<alias>admin0</alias>
</host>
<host name="vespa-searcher">
<alias>searcher1</alias>
</host>
</hosts>
services.xml 应用程序看起来像:
<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>
我正在使用 docker 群在两个实例之间建立覆盖网络连接。命令看起来像这样:
docker network create --driver=overlay --subnet=<IP>/24 vespa_conn --attachable
我在第一个实例上使用的创建容器的命令是:
docker run --detach --hostname vespa-master --network=vespa_conn <other arguments> --env VESPA_CONFIGSERVERS=vespa-master vespaengine/vespa
在第二个实例上创建容器的命令是:
docker run --detach --hostname vespa-searcher --network=vespa_conn <other arguments> --env VESPA_CONFIGSERVERS=vespa-master vespaengine/vespa
这些命令的参考来自这个page。
在创建和部署我的应用程序后,第二个容器上的节点状态没有显示。
vespa-get-cluster-state
Cluster content:
content/distributor/0: up
content/distributor/1: down
content/storage/0: up
content/storage/1: down
我发现的问题是:
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' 时,在 page 中指定我收到此错误:
[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
这个错误的原因是什么,我这里做错了吗?
要使其正常工作,您应该避免在网络名称中使用下划线,使用配置服务器的完全限定名称并命名容器以使 DNS 正常工作。
在 manager swarm 主机上创建网络:
docker network create --driver=overlay --attachable vespa-net
启动一个 Vespa 容器运行 配置服务器和服务(入口点没有参数):
docker run --detach --name vespa-master --hostname vespa-master.vespa-net --network=vespa-net --env VESPA_CONFIGSERVERS=vespa-master.vespa-net vespaengine/vespa
仅启动一个 Vespa 容器 运行 服务(入口点的服务参数):
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中使用完全限定的名称:
<hosts>
<host name="vespa-master.vespa-net">
<alias>admin0</alias>
</host>
<host name="vespa-searcher.vespa-net">
<alias>searcher1</alias>
</host>
</hosts>
通过部署未修改的 services.xml 我得到以下状态:
[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
我有两个实例,我必须在 docker 容器上部署 Vespa。一个容器将充当配置集群、容器集群和内容集群,而另一个将充当容器集群和内容集群。
host.xml 应用程序文件如下所示:
<hosts>
<host name="vespa-master">
<alias>admin0</alias>
</host>
<host name="vespa-searcher">
<alias>searcher1</alias>
</host>
</hosts>
services.xml 应用程序看起来像:
<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>
我正在使用 docker 群在两个实例之间建立覆盖网络连接。命令看起来像这样:
docker network create --driver=overlay --subnet=<IP>/24 vespa_conn --attachable
我在第一个实例上使用的创建容器的命令是:
docker run --detach --hostname vespa-master --network=vespa_conn <other arguments> --env VESPA_CONFIGSERVERS=vespa-master vespaengine/vespa
在第二个实例上创建容器的命令是:
docker run --detach --hostname vespa-searcher --network=vespa_conn <other arguments> --env VESPA_CONFIGSERVERS=vespa-master vespaengine/vespa
这些命令的参考来自这个page。
在创建和部署我的应用程序后,第二个容器上的节点状态没有显示。
vespa-get-cluster-state
Cluster content:
content/distributor/0: up
content/distributor/1: down
content/storage/0: up
content/storage/1: down
我发现的问题是:
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' 时,在 page 中指定我收到此错误:
[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
这个错误的原因是什么,我这里做错了吗?
要使其正常工作,您应该避免在网络名称中使用下划线,使用配置服务器的完全限定名称并命名容器以使 DNS 正常工作。
在 manager swarm 主机上创建网络:
docker network create --driver=overlay --attachable vespa-net
启动一个 Vespa 容器运行 配置服务器和服务(入口点没有参数):
docker run --detach --name vespa-master --hostname vespa-master.vespa-net --network=vespa-net --env VESPA_CONFIGSERVERS=vespa-master.vespa-net vespaengine/vespa
仅启动一个 Vespa 容器 运行 服务(入口点的服务参数):
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中使用完全限定的名称:
<hosts>
<host name="vespa-master.vespa-net">
<alias>admin0</alias>
</host>
<host name="vespa-searcher.vespa-net">
<alias>searcher1</alias>
</host>
</hosts>
通过部署未修改的 services.xml 我得到以下状态:
[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