【问题标题】:DataStax OpsCenter 4.0; running but can't run agents (can ssh to nodes from cmdline but OpsCenter can'tDataStax OpsCenter 4.0;正在运行但无法运行代理(可以从 cmdline SSH 到节点,但 OpsCenter 不能
【发布时间】:2014-01-01 15:35:53
【问题描述】:

我正在设置一个新的 C* 集群并使用 apt-get 安装 OpsCenter 4.0;这很好,看到了我所有的节点。

我设置了一个 ~/.ssh/id_dsa 文件,无需密码即可 ssh 到我的节点。

我尝试让 OpsCenter 通过“修复”安装代理。在“节点 SSH 凭据”对话框中提供私钥……但我得到“无法通过 SSH 连接到……错误输出:权限被拒绝(公钥)。

我很困惑如何从 cmd 行 ssh,但 OpsCenter 不能。

然后我尝试手动安装代理(再次使用 apt-get; 和 service opscenterd-agent start),但我在 /var/log/datastax-agent/startup.log 中得到了这个:

 INFO [main] 2013-12-13 13:25:11,035 Loading conf files: /var/lib/datastax-agent/conf/address.yaml
Exception in thread "main" java.lang.ClassCastException: java.lang.Character cannot be cast to java.util.Map$Entry
        at opsagent.conf$load_conf_file$fn__1185$fn__1186.invoke(conf.clj:197)
        at clojure.core$map$fn__4207.invoke(core.clj:2487)
        at clojure.lang.LazySeq.sval(LazySeq.java:42)
        at clojure.lang.LazySeq.seq(LazySeq.java:60)
        at clojure.lang.RT.seq(RT.java:484)
        at clojure.core$seq.invoke(core.clj:133)
        at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30)
        at clojure.core.protocols$fn__6026.invoke(protocols.clj:54)
        at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
        at clojure.core$reduce.invoke(core.clj:6177)
        at clojure.core$into.invoke(core.clj:6229)
        at opsagent.conf$load_conf_file.invoke(conf.clj:195)
        at clojure.core$map$fn__4207.invoke(core.clj:2487)
        at clojure.lang.LazySeq.sval(LazySeq.java:42)
        at clojure.lang.LazySeq.seq(LazySeq.java:60)
        at clojure.lang.RT.seq(RT.java:484)
        at clojure.core$seq.invoke(core.clj:133)
        at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30)
        at clojure.core.protocols$fn__6026.invoke(protocols.clj:54)
        at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
        at clojure.core$reduce.invoke(core.clj:6177)
        at clojure.core$into.invoke(core.clj:6229)
        at opsagent.conf$load_conf.invoke(conf.clj:209)
        at opsagent.opsagent$_main.doInvoke(opsagent.clj:228)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at opsagent.opsagent.main(Unknown Source)

(我的 address.yaml 文件是: stomp_interface=1.2.3.4 // 当然有不同的编号

多年来,我一直在使用以前版本的 C* 和 OpsCenter,但现在我无法启动并运行这个版本。

【问题讨论】:

    标签: ssh cassandra datastax opscenter


    【解决方案1】:

    您正在使用“=”,其中 yaml 语法需要“:”。那么你的 stomp_interface 行应该是什么样子:

    stomp_interface: 1.2.3.4
    

    您需要重新启动 datastax-agent 才能使其生效。

    【讨论】:

    • 这种变化没有任何区别。我仍然得到 ClassCastException。我已经看到其他人将该错误归因于重复的代理 jar 文件,但这里也不是这种情况。
    【解决方案2】:

    我在 ~/.ssh/id_dsa 中输入了我的私有 ssh 密钥(我在 EC2 上以用户“ubuntu”的身份运行。

    一时兴起,我搜索了其他 .ssh 目录并找到了 /root/.ssh。

    我将 id_dsa 文件复制到该目录,这一次 OpsCenter 能够与集群中的所有节点通信并安装代理。

    虽然这“解决了”问题,但它有点令人不满意,因为 OpsCenter 的说明并没有说明这一点,而且我不确定我应该如何知道寻找这个其他 .ssh 目录。另一方面,它正在工作:-)。

    【讨论】:

    • 对于它的价值,这一步不应该是必要的。 OpsCenter 应该能够使用您在命令行中使用的相同密钥和用户登录节点。
    • 我同意“不应该”需要它,但它确实是。不知道为什么解决问题的答案被否决了,尤其是没有提供替代方案。
    • 嗯,您的帖子中实际上存在两个问题。您发布的堆栈跟踪肯定是由 yaml 格式错误引起的。我仍然不确定是什么导致了您的 ssh 错误。听起来您的解决方案是让您的私钥成为 root 用户的默认私钥(opscenter 以它的身份运行)。您是否将私钥的实际内容粘贴到 OpsCenter 中?包括开始和结束 cmets?
    • 嗯...在修复 yaml 格式错误后,我得到了完全相同的堆栈跟踪,所以这不是错误。鉴于 OpsCenter 以 root 身份运行这一事实(我不知道),然后将 id_dsa 放在 root 的 .ssh 文件中是很好的解决方案,事实上,根据我的经验,它通常是如何处理 ssh 连接的。
    • 我唯一的猜测是存在其他 yaml 格式错误,或者您正在编辑包含在用于手动安装的 tarball 中的 conf,而不是 /var/lib/datastax-agent/conf/address。 yaml 也许。添加密钥并不是最佳解决方法的原因是 OpsCenter 不会在其他安装类型(rpm、tarball)中以 root 用户身份运行,虽然它在这种情况下确实有效,但不能保证将来工作。
    猜你喜欢
    • 2021-11-04
    • 2014-01-29
    • 2023-04-07
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2016-05-07
    • 2015-05-13
    相关资源
    最近更新 更多