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

n3h0vuf2  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(302)

我看到cassandra客户端需要一组主机。
例如,python使用:

from cassandra.cluster import Cluster

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

资料来源:http://datastax.github.io/python-driver/getting_started.html
问题1:为什么需要传递这些节点?
问题2:是否需要传递所有节点?或者一个就够了(所有节点都有关于所有其他节点的信息,对吗?)
问题3:客户机是否选择了连接所有节点的最佳节点?客户机是否知道每个节点中存储了哪些数据?
问题4:我第一次开始使用cassandra,第一次使用kubernetes。我部署了一个带有3个cassandra节点的cassandra集群。我部署了另一台机器,在这台机器中,我想通过python cassandra客户机连接到cassandra。我需要将所有cassandra ip传递给python cassandra客户端吗?或者把Kubernetes给出的Cassandra域名放进去就足够了?
例如,当我运行 dig 司令部,我知道Cassandra的所有情报。我不知道把这个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'])

2w2cym1i

2w2cym1i1#

问题1:为什么需要传递这些节点?
与集群进行初始接触。如果进行了连接,那么这些接触点就没有用了。
问题2:是否需要传递所有节点?或者一个就够了(所有节点都有关于所有其他节点的信息,对吗?)
您只能传递一个节点作为联系点,但问题是,如果驱动程序尝试联系时该节点关闭,那么它将无法连接到群集。因此,如果你提供了另一个联系点,它会尝试连接它,即使第一个失败。如果你用你的Cassandra种子名单作为联络点会更好。
问题3:客户机是否选择了连接所有节点的最佳节点?客户机是否知道每个节点中存储了哪些数据?
一旦建立了初始连接,客户机驱动程序将拥有关于集群的元数据。客户机将知道每个节点中存储了哪些数据,以及哪些节点可以以较少的延迟进行查询。您可以使用负载平衡策略配置所有这些
参考:https://docs.datastax.com/en/developer/python-driver/3.10/api/cassandra/policies/
问题4:我第一次开始使用cassandra,第一次使用kubernetes。我部署了一个带有3个cassandra节点的cassandra集群。我部署了另一台机器,在这台机器中,我想通过python cassandra客户机连接到cassandra。我需要将所有cassandra ip传递给python cassandra客户端吗?或者把Kubernetes给出的Cassandra域名放进去就足够了?
如果主机名可以解析,那么最好使用dns而不是ip。我看不出有什么缺点。

相关问题