Cassandra (5) 架構名詞及驗證

本篇有點長,1~7 是名詞解釋,後面是用工具進行驗證。

1. Data Centers and Racks:

Cassandra 的物理架設包含 Data Centers 和 Racks 兩部份。

Data Centers 指的是某個地區電腦叢集,比方說一家公司會在日本東京和美國紐約設置 Data Centers,這樣假如東京的 Data Center 壞了就可用美國的 Data Center。

Racks 指的是某個地區電腦叢集的機架,概念上就是 Data Center 上放在同個機架上的所有電腦。


2. Gossip and Failure Detection:

簡單來說節點在工作之餘會偷偷聊天確定一下夥伴是否還活者,確定的流程如下:

  1. 每隔一秒某節點 A 就會開始想找人聊天
  2. 假設 A 想和某節點 B 聊天,A 就會向 B 傳送訊息
  3. B 收到訊息後會回傳訊息給 A
  4. A 收到訊息後最後會再回傳一次確認訊息給 B

3. Snitches:

Snitches 負責確認節點間的相互關係(拓撲)


4. Rings and Tokens:

Cassandra DC 其實是個 64 bit 的 hash table 形成的 Ring (我一直覺得下面那張圖是 128 bits 但 [1] 的說法是 64 bits 再加正負號),同個 DC 每個節點負責的區間用 Token 表示:



5. Virtual Nodes:

假設我們同個 DC 只有兩台節點,這樣 Tokens 只會分兩個區段。當我們要再細分更多區段時可以使用 Virtual Nodes。


6. Partitioners:

其實就是一個算 Hash 的函式,你可以特別指定你的 Hash 算法。


7. Seed Nodes:

節點加入圈圈前必須先尋問圈中的 Seed Nodes,所以被詢問的 Seed Nodes 要先啟動。


8. Cassandra Cluster Manager:

Cassandra Cluster Manager 是個單機模擬 Cassandra Cluster 的工具。

安裝 CCM:

$ sudo pip3 install ccm

建立三個節點的 CCM 叢集並啟動,啟動前要先停止原來的 cassandra 服務,比免 port 衝突。

$ sudo service cassandra stop
$ ccm create -v 3.0.0 -n 3 my_cluster --vnodes
$ ccm list
$ ccm start

確認一下節點是否成功啟動,第二個指令標含所有節點的 DC 和 Rack 的資訊。

$ ccm status

# equivalent to running the command nodetool status
$ ccm node1 status 

9. 觀察 Seed Nodes:

CCM 的設定檔在 ~/.ccm 裡, 觀察 ~/.ccm/my_cluster 中每個節點的 conf 的 cassandra.yaml 設定檔。 - seeds 是 seed nodes 的 ip:

node1 
  - seeds: 127.0.0.1​

node2 
  - seeds: 127.0.0.1,127.0.0.2​

node3 
  - seeds: 127.0.0.1,127.0.0.2,127.0.0.3​

安裝版的 cassandra.yaml 會放在 /etc/cassnadra。


10. 觀察 Tokens:

顯示每個人的 Tokens,預設每個人藉由 vnodes 分到 256 個 tokens:

$ ccm node1 ring

清掉資料庫的資料然後就可以重設參數。

$ ccm stop
$ rm -fr ~/.ccm/my_cluster/node1/data0/system/*
$ rm -fr ~/.ccm/my_cluster/node1/data0/system/*
$ rm -fr ~/.ccm/my_cluster/node1/data0/system/*

修改 node1, 2, 3 的 cassandra.yaml 的 num_tokens 可以改變每個節點負責的 token 數。

改完就可以重新啟動:

$ ccm start
$ ccm node1 ring

11. 修改 DC 和 Rack 資訊:

清掉資料庫:

$ ccm stop
$ rm -fr ~/.ccm/my_cluster/node1/data0/system/*
$ rm -fr ~/.ccm/my_cluster/node1/data0/system/*
$ rm -fr ~/.ccm/my_cluster/node1/data0/system/*

將 cassandra 的 endpoint_snitch 設成 GossipingPropertyFileSnitch。

GossipingPropertyFileSnitch 會參考 cassandra-rackdc.properties 的 DC 和 Rack 設定。

依個人喜好修改 DC 和 Rack:

dc=dc2
rack=rack3

觀察一下節點是否照你的要求分佈在不同 DC 和 Rack 上:

$ ccm start
$ ccm node1 status

Reference:

[1] Cassandra: The Definitive Guide(2nd Edition), Jeff Carpenter and Eben Hewitt, O’Reilly Media(2016)

留言

熱門文章