【问题标题】:Start Solr cloud on Docker Swarm (1.12) without Zookeeper在没有 Zookeeper 的 Docker Swarm (1.12) 上启动 Solr 云
【发布时间】:2020-09-13 01:46:50
【问题描述】:

我通过 Vagrant 在 3 台 CoreOS 机器上运行 Docker Swarm 1.12。

在集群上启动 Solr 云的最佳方式是什么? 我需要 Zookeeper 吗?

我已经做到了:

docker service create --mode=global --name solr -p 8983:8983 solr:5.3.1 bash -c "/opt/solr/bin/solr start -f -c"

但是 Cloud 是空的,因为它不知道其他 2 台机器,我如何在这里使用 Swarm 的力量?

【问题讨论】:

    标签: docker solr apache-zookeeper docker-swarm


    【解决方案1】:

    文档

    container image documentation 描述了如何将 Zookeeper 互连作为分布式 Solr 设置的后备存储:

    您还可以运行分布式 Solr 配置,其中包含 Solr 节点 独立的容器,共享一个 ZooKeeper 服务器:

    运行 ZooKeeper,并定义一个名称以便我们可以链接到它:

    $ docker run --name zookeeper -d -p 2181:2181 -p 2888:2888 -p 3888:3888 jplock/zookeeper
    

    运行两个 Solr 节点,链接到 zookeeper 容器:

    $ docker run --name solr1 --link zookeeper:ZK -d -p 8983:8983 \
          solr \
          bash -c '/opt/solr/bin/solr start -f -z $ZK_PORT_2181_TCP_ADDR:$ZK_PORT_2181_TCP_PORT'
    
    $ docker run --name solr2 --link zookeeper:ZK -d -p 8984:8983 \
          solr \
          bash -c '/opt/solr/bin/solr start -f -z $ZK_PORT_2181_TCP_ADDR:$ZK_PORT_2181_TCP_PORT'
    

    在 Docker Swarm 上运行分布式 Solr

    从 3 节点集群开始:

    $ docker node ls
    ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
    2wkpmybf4wni8wia1s46lm2ml *  node1     Ready   Active        Leader
    ajrnf5oibgm7b12ayy0hg5i32    node3     Ready   Active        
    bbe8n1hybhruhhrhmswn7fjmd    node2     Ready   Active  
    

    创建网络

    $ docker network create --driver overlay my-net
    

    启动一个zookeeper服务并等待它启动

    $ docker service create --name zookeeper --replicas 1 --network my-net jplock/zookeeper
    

    启动 2 个配置为连接到 DNS 地址“zookeeper”的 solr 实例。有关群模式网络的更多信息,您可以阅读documentation

    $ docker service create --name solr --replicas 2 --network my-net -p 8983:8983 \
       solr \
       bash -c '/opt/solr/bin/solr start -f -z zookeeper:2181'
    

    Web UI 将在集群中的任何节点上可用

    http://192.168.99.100:8983/
    http://192.168.99.101:8983/
    http://192.168.99.102:8983/
    

    如果您检查服务,您会发现容器分布在集群中的所有 3 个节点上。这是默认的调度行为

    $ docker service ps zookeeper
    ID                         NAME         IMAGE             NODE   DESIRED STATE  CURRENT STATE          ERROR
    3fhipbsd4jdazmx8d7zum0ohp  zookeeper.1  jplock/zookeeper  node1  Running        Running 7 minutes ago  
    
    $ docker service ps solr
    ID                         NAME    IMAGE  NODE   DESIRED STATE  CURRENT STATE           ERROR
    bikggwpyz5q6vdxrpqwevlwsr  solr.1  solr   node2  Running        Running 43 seconds ago  
    cutbmjsmcxrmi1ld75eox0s9m  solr.2  solr   node3  Running        Running 43 seconds ago  
    

    【讨论】:

    • 您是否认为这是在 Docker 1.12 Swarm 上运行的?您在哪里使用“docker service create ...” 您的示例可以在同一台机器上启动 2 个 solr 容器吗? - 我们不希望这样。
    • @viktorsmari 我已经更新了我的答案。要在 Swarm 上运行它,您需要启动 2 个服务,默认情况下,Swarm 会将容器分布在可用节点上。
    • 谢谢,我想在所有机器上安装 Solr 和 Zookeeper,所以我使用 --mode=global 而不是 --replicas 2
    • 使用这种方法,solr 云节点在 zookeeper 注册了他们的 VIP 地址。是否可以为此使用 swarm 节点的公共 ip / 主机名?就像在 solr 启动脚本中使用“-h”参数一样?非常感谢任何帮助
    • @sebhaub 为什么这很重要?每个 Solr 节点都在与专用网络上的 zookeeper 通信。您是否考虑过如果一台主机上运行多个 solr 节点会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2018-07-24
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多