我需要将所有节点传递给Cassandra客户端吗?

时间:2019-04-04 16:30:30

标签: cassandra kubernetes

我看到Cassandra客户端需要一系列主机。

例如,Python使用以下代码:

from cassandra.cluster import Cluster

cluster = Cluster(['192.168.0.1', '192.168.0.2'])

问题1:为什么需要传递这些节点?

问题2:我需要传递所有节点吗?还是足够? (所有节点都有其他所有节点的信息,对吧?)

问题3:客户端是否在知道所有节点的情况下选择最佳节点进行连接?客户端是否知道每个节点中存储了什么数据?

问题4:我第一次开始使用Cassandra,而我第一次使用Kubernetes。我部署了一个具有3个Cassandra节点的Cassandra集群。我部署了另一台计算机,在这台计算机上,我想通过Python Cassandra客户端连接到Cassandra。我需要将所有Cassandra IP传递给Python Cassandra客户端吗?或者放置Kubernetes提供的Cassandra DNS是否足够?

例如,当我运行dig命令时,我知道所有Cassandra IP。我不知道将DNS传递给客户端是否足够

# dig cassandra.default.svc.cluster.local

IP为10.32.1.1910.32.1.2410.32.2.24

; <<>> DiG 9.10.3-P4-Debian <<>> cassandra.default.svc.cluster.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18340
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;cassandra.default.svc.cluster.local. IN    A

;; ANSWER SECTION:
cassandra.default.svc.cluster.local. 30 IN A 10.32.1.19
cassandra.default.svc.cluster.local. 30 IN A 10.32.1.24
cassandra.default.svc.cluster.local. 30 IN A 10.32.2.24

;; Query time: 2 msec
;; SERVER: 10.35.240.10#53(10.35.240.10)
;; WHEN: Thu Apr 04 16:08:06 UTC 2019
;; MSG SIZE  rcvd: 125

使用示例有哪些缺点:

from cassandra.cluster import Cluster

cluster = Cluster(['cassandra.default.svc.cluster.local'])

1 个答案:

答案 0 :(得分:2)

  

问题1:为什么需要传递这些节点?

与集群进行初始联系。如果建立连接,则这些接触点将无用。

  

问题2:我需要传递所有节点吗?还是足够? (所有   节点具有有关所有其他节点的信息,对吧?

您只能通过一个节点作为接触点,但是问题是,如果驱动程序尝试联系时该节点已关闭,则它将无法连接到群集。因此,如果您提供另一个联系点,即使第一个联系失败,它也会尝试与其连接。如果您将Cassandra种子列表用作联系点,那就更好了。

  

问题3:客户端是否选择最佳节点来进行连接   所有节点?客户端是否知道每个节点中存储了什么数据?

建立初始连接后,客户端驱动程序将具有有关群集的元数据。客户端将知道哪些数据存储在每个节点中,以及哪些节点可以以更少的延迟进行查询。您可以使用负载平衡策略配置所有这些

引用:https://docs.datastax.com/en/developer/python-driver/3.10/api/cassandra/policies/

  

问题4:我是第一次开始使用cassandra,   第一次使用kubernetes。我部署了一个cassandra集群   有3个cassandra节点。我又部署了一台机器,   我想通过Python Cassandra客户端连接到cassandra的计算机。   我需要将所有的Cassandra IP传递给Python Cassandra客户端吗?或者是   足够放置Kubernetes提供的Cassandra DNS吗?

如果可以解析主机名,则始终最好使用DNS而不是IP。我认为没有任何不利之处。