我使用节点间 SSL、客户端到服务器 SSL 和基本密码验证设置了 cassandra。由于 certificate_validation 已禁用,因此使用 cqlsh 或 python 使用任何证书连接到 cassandra 都没有问题。
我的 opscenter 集群配置是:
[jmx] 用户名 = 密码 = 端口 = 7199 [kerberos_client_principals] [凯尔伯罗斯] [代理商] thrift_ssl_truststore = /usr/share/opscenter/conf/cassandra_client_trust.jks thrift_ssl_truststore_password = changeme [kerberos_主机名] [kerberos_服务] [卡桑德拉] 用户名 = cassandra ssl_ca_certs = /usr/share/opscenter/conf/cassandra_external.pem ssl_validate = False seed_hosts = 金合欢属 api_port = 9160 密码 = changeme
我正在尝试使用 tarball 在 cassandra 主机上安装代理。我将 address.yaml 设置为:
stomp_接口:“10.235.10.7” 使用 SSL:1
尝试启动代理(我必须向 Java 添加比默认的 40mb 更多的内存):
INFO [thrift-init] 2014-01-27 16:32:08,300 连接到 Cassandra 集群:10.235.10.104(端口 9160) INFO [thrift-init] 2014-01-27 16:32:08,316 Downed Host Retry 服务已启动,队列大小为 -1,重试延迟为 10 秒 INFO [thrift-init] 2014-01-27 16:32:08,322 注册 JMX me.prettyprint.cassandra.service_Agent Cluster:ServiceType=hector,MonitorType=hector 错误 [thrift-init] 2014-01-27 16:32:08,556 将主机标记为已关闭,适用于主机 10.235.10.104(10.235.10.104):9160 错误 [thrift-init] 2014-01-27 16:32:08,557 关闭时的池状态::{10.235.10.104(10.235.10.104):9160}; IsActive?: true; 活动: 1; 阻止: 1; 空闲: 0; NumBeforeExhausted: 0 INFO [thrift-init] 2014-01-27 16:32:08,557 关机触发于:{10.235.10.104(10.235.10.104):9160} INFO [thrift-init] 2014-01-27 16:32:08,557 关闭完成:{10.235.10.104(10.235.10.104):9160} INFO [thrift-init] 2014-01-27 16:32:08,557 检测到的主机已添加到重试队列:10.235.10.104(10.235.10.104):9160 警告 [thrift-init] 2014-01-27 16:32:08,558 无法在此主机上完成请求 CassandraClient 警告[thrift-init] 2014-01-27 16:32:08,559 异常: 我.prettyprint.hector.api.exceptions.HectorTransportException: org.apache.thrift.transport.TTransportException 在 me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:33) 在 me.prettyprint.cassandra.service.AbstractCluster$2.execute(AbstractCluster.java:151) 在 me.prettyprint.cassandra.service.AbstractCluster$2.execute(AbstractCluster.java:145) 在 me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:104) 在 me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258) 在 me.prettyprint.cassandra.service.AbstractCluster.describeClusterName(AbstractCluster.java:155) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) 在 clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:298) 在 clj_hector.core$cluster_name.invoke(core.clj:40) 在 opsagent.cassandra$setup_cassandra$f__352__auto____899$fn__919.invoke(cassandra.clj:360) 在 opsagent.cassandra$setup_cassandra$f__352__auto____899.invoke(cassandra.clj:358) 在 clojure.lang.AFn.run(AFn.java:24) 在 java.lang.Thread.run(Thread.java:724) 原因:org.apache.thrift.transport.TTransportException
我不知道这是否与 SSL 或用户/密码有关...但它失败了。当代理连接到本地 Cassandra 服务器时,我希望它应该知道 Cassandra 用户(或任何超级用户或普通用户)的登录名/密码?不是吗?
答案1
这很可能与已知的竞争条件有关,即代理在 opscenterd 能够发送 SSL 信息之前尝试通过 thrift 连接到本地节点。解决方法是在 address.yaml 中手动配置代理的 SSL 设置:
thrift_ssl_truststore: /etc/dse/conf/.truststore
thrift_ssl_truststore_password: XYZ
并重新启动代理。