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:
簡單來說節點在工作之餘會偷偷聊天確定一下夥伴是否還活者,確定的流程如下:
- 每隔一秒某節點 A 就會開始想找人聊天
- 假設 A 想和某節點 B 聊天,A 就會向 B 傳送訊息
- B 收到訊息後會回傳訊息給 A
- 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)
留言
張貼留言