【问题标题】:I need to pass all nodes to Cassandra client?我需要将所有节点传递给 Cassandra 客户端吗?
【发布时间】:2019-04-06 01:41:17
【问题描述】:

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

例如,Python 使用这个:

from cassandra.cluster import Cluster

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

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

问题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'])

【问题讨论】:

    标签: cassandra kubernetes


    【解决方案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 总是更好。我看不出有什么缺点。

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 2016-12-13
      • 2018-06-29
      • 1970-01-01
      • 2021-04-17
      • 2016-12-22
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      相关资源
      最近更新 更多