首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多主机cassandra Docker-复合文件问题

多主机cassandra Docker-复合文件问题
EN

Stack Overflow用户
提问于 2017-02-20 07:10:53
回答 1查看 2.6K关注 0票数 1

我对玩Docker相当陌生,所以希望这都是我的错,但是我正在尝试使用Docker获得一个多主机环设置。

我有以下docker-compose.yml文件

代码语言:javascript
复制
version: '2'

services:

    cassandra-1:
      hostname: cassandra-1
      image: cassandra:latest
      command: /bin/bash -c "sleep 1 && echo ' -- Pausing to let system catch up ... -->' && /docker-entrypoint.sh cassandra -f"
      expose:
        - 7000
        - 7001
        - 7199
        - 9042
        - 9160
      # volumes: # uncomment if you desire mounts, also uncomment cluster.sh
      #   - ./data/cassandra-1:/var/lib/cassandra:rw

    cassandra-2:
      hostname: cassandra-2
      image: cassandra:latest
      command: /bin/bash -c "sleep 20 && echo ' -- Pausing to let system catch up ... -->' && /docker-entrypoint.sh cassandra -f"
      environment:
        - CASSANDRA_SEEDS=cassandra-1
      links:
        - cassandra-1:cassandra-1
      expose:
        - 7000
        - 7001
        - 7199
        - 9042
        - 9160
      # volumes: # uncomment if you desire mounts, also uncomment cluster.sh
      #   - ./data/cassandra-2:/var/lib/cassandra:rw

此示例尝试在另一个容器中启动第一个cassandra节点( Cassandra -1)和第二个节点(cassandra-2),该节点应该能够使用第一个节点作为标准Cassandra环境变量"CASSANDRA_SEEDS“的种子节点。

然而,当我运行这个程序时,我会得到这样的异常。

代码语言:javascript
复制
cassandra-2_1  | WARN  07:00:35 Seed provider couldn't lookup host cassandra-1
cassandra-2_1  | Exception (org.apache.cassandra.exceptions.ConfigurationException) encountered during startup: The
 provider lists no seeds.
cassandra-2_1  | The seed provider lists no seeds.
cassandra-2_1  | ERROR 07:00:35 Exception encountered during startup: The seed provider lists no seeds.
cass2_cassandra-2_1 exited with code 3

在这里,启动第二个Cassandra节点(cassandra-2)的尝试总是失败,并且在第一天也会结束杀戮。

代码语言:javascript
复制
cass1_cassandra-1_1 exited with code 137

如果我将docker-compose.yaml文件分成两个部分,其中第一个cassandra节点的开始位于一个文件中。只需使用码头启动节点-编写就可以了。

还请注意,当我使用两个单独的docker-compose.yml文件路径时,一个用于"cassandra-1",另一个用于"cassandra-2“i AM,以确保第二个文件使用"external_links”而不是“链接”。但结果是一样的

我在网上搜索了其他的例子,每个人似乎都和我一样。但我的不起作用。

EN

回答 1

Stack Overflow用户

发布于 2017-02-20 21:39:51

是否确保第一个节点在第二个节点尝试加入群集之前完成启动?

根据我的经验,20秒不足以让第一个节点完成启动。让第二个节点在加入集群之前睡上大约60秒。

代码语言:javascript
复制
command: /bin/bash -c "echo ' -- Pausing to let system catch up ...' && sleep 60 && /docker-entrypoint.sh cassandra -f"

同样在上面的命令中,我交换了echosleep,这更有意义,因为您正在仔细观察终端输出。

cassandra-1日志应该显示如下所示

代码语言:javascript
复制
INFO  21:21:06 Node /172.18.0.2 state jump to NORMAL
INFO  21:23:04 Handshaking version with /172.18.0.4
INFO  21:23:07 Node /172.18.0.4 is now part of the cluster
INFO  21:23:07 InetAddress /172.18.0.4 is now UP

通过在终端上执行此命令,非常容器记录:

代码语言:javascript
复制
docker logs [OPTIONS] CONTAINER_ID

通过执行docker ps查找容器ID。

如果仍然无法工作,请尝试将mem_limit: 1024m添加到两个Cassandra容器定义中。可能由于内存资源有限,启动失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42338457

复制
相关文章

相似问题

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