【问题标题】:Enable Thrift in Cassandra Docker在 Cassandra Docker 中启用 Thrift
【发布时间】:2015-10-15 17:08:47
【问题描述】:

我正在尝试启动一个运行 cassandra 的 docker 映像。我需要使用 thrift 与 cassandra 进行通信,但它看起来默认情况下已禁用。查看 cassandra 日志显示:

INFO  21:10:35 Not starting RPC server as requested. 
  Use JMX (StorageService->startRPCServer()) or nodetool (enablethrift) to start it

我的问题是:如何在启动这个 cassandra 容器时启用 thrift?

我试过设置各种环境变量都无济于事:

docker run --name cs1 -d -e "start_rpc=true" cassandra
docker run --name cs1 -d -e "CASSANDRA_START_RPC=true" cassandra
docker run --name cs1 -d -e "enablethrift=true" cassandra

【问题讨论】:

  • 显然,自 Cassandra 2.2 以来,thrift RPC 服务器已被禁用,您需要为较新版本设置 start_rpc=true,nodetool enablethrift 以便客户端可以使用 thrift。 issues.apache.org/jira/browse/CASSANDRA-9319

标签: cassandra docker thrift


【解决方案1】:

不再需要sed 解决方法(以及后续仅启用此行为的自定义 Dockerfile)。

较新的official Docker containers 支持使用-e 标志的CASSANDRA_START_RPC 环境变量。例如:

docker run --name cassandra1 -d -e CASSANDRA_START_RPC=true -p 9160:9160 -p 9042:9042 -p 7199:7199 -p 7001:7001 -p 7000:7000 cassandra

【讨论】:

  • 谢谢莱斯!完美!
【解决方案2】:

我在使用 Docker Cassandra 映像时遇到了同样的问题。您可以在 GithubDocker hub 上使用我的 docker 容器,而不是默认的 Cassandra 映像。

问题在于 cassandra.yaml 文件的 start_rpc 设置为 false。我们需要改变这一点。为此,我们可以使用以下 Dockerfile(我的镜像就是这样做的):

FROM cassandra
RUN sed -i 's/^start_rpc.*$/start_rpc: true/' /etc/cassandra/cassandra.yaml 

【讨论】:

  • 谢谢!我遇到过同样的问题。但是我没有使用你的 fork(可能最终会被放弃:-( ),而是在运行官方容器后运行docker exec -it cass1 sed -i 's/^start_rpc.*$/start_rpc: true/' /etc/cassandra/cassandra.yaml。这也有效!
【解决方案3】:

不要忘记使用 run 命令公开 thrift 客户端 API 端口,以便能够从外部访问容器,例如:

docker run --name cs1 -d .... -p 9160:9160 cassandra

您可能还想公开更多端口,例如 CQL 端口 9042、JMX 端口 7199、节点间通信端口 7000 和 7001。

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 2015-07-28
    • 2013-10-19
    • 2011-02-15
    • 2021-07-30
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多