我看到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.19
,10.32.1.24
,10.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'])
答案 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。我认为没有任何不利之处。