添加節點
Cassandra 的添加節點應該是最簡單了,可以了解是 無腦添加。啥意思呢,這麼來說,Cassandra 的添加節點,我們需要修改的配置有:
- 叢集名,保持一緻
- Token 保持一緻
- seeds 保持一緻
然後就可以了
這裡需要 糾正一個問題 ,我們建議的 Token 保持一緻的前提的是, 每台機器的性能要一樣,比如說同樣的CPU 核心數,同樣的 記憶體大小。我們用最簡單的方式去了解這個 Token , 就是權重比。比如說:三台 cassandra 節點的 token , 都是 500 ,token 比也就是 1:1:1 , 那麼每個 cassandra 節點處理的資料量是一樣的,如果說 第三個節點的 cassandra 的 token 的值是 250 , 那這個比例就是 2:2:1 , 那麼三個節點的資料的處理量是不同的。這裡需要注意一下。至于這個 Token 的值,則麼去影響到 cassandra 的負載均衡,老夫最近也在研究。後續應該會有更新。
删除節點
Cassandra 删除節點,其實還是比較麻煩的。這裡,筆者經過測試,總結了下:
修複keyspace
nodetool repair <keyspace_name>
檢查目前的節點狀态
執行
nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.0.24 378.83 KiB 500 66.9% 7f53d662-e883-42c5-9de5-b626394bda08 rack1
UN 192.168.0.25 308.08 KiB 500 65.3% 26e0de75-583d-4b82-98b8-cce223f300e9 rack1
DN 192.168.0.23 957.67 KiB 500 67.8% a9d4b392-e47c-4985-a47c-eef535b9ece4 rack1
可以看到,現在有一個節點處于 DN 狀态,這個節點也就是我目前要移除的節點,如果你要移除的節點,處于 UN 狀态,需要執行:
nodetool decommission
, 在需要移除的節點上
移除節點
我們在 活動的節點上執行:
nodetool removenode a9d4b392-e47c-4985-a47c-eef535b9ece4
随後,我們在 查下 狀态:
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.0.24 450.04 KiB 500 100.0% 7f53d662-e883-42c5-9de5-b626394bda08 rack1
UN 192.168.0.25 379.33 KiB 500 100.0% 26e0de75-583d-4b82-98b8-cce223f300e9 rack1
如果現在我們的節點是 seed 節點, 那我們需要做的就是,在配置中移除目前的這個節點。
seed_provider:
# Addresses of hosts that are deemed contact points.
# Cassandra nodes use this list of hosts to find each other and learn
# the topology of the ring. You must change this if you are running
# multiple nodes!
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
# seeds is actually a comma-delimited list of addresses.
# Ex: "<ip1>,<ip2>,<ip3>"
- seeds: "192.168.0.23,192.168.0.24"
這裡我們删除 我們的
192.168.0.23
這個節點 IP,随後在進行重新開機。重新開機之後在 檢視狀态:
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.0.24 584.07 KiB 500 100.0% 7f53d662-e883-42c5-9de5-b626394bda08 rack1
UN 192.168.0.25 555.77 KiB 500 100.0% 26e0de75-583d-4b82-98b8-cce223f300e9 rack1
這裡也要糾正一下,筆者上面的方式,其實是在一個空的 cassandra 叢集上做的,是以删除會很快,但是在實際中,不是這樣的。
在實際中,我們删除一個節點上的資料,叢集會做一個資料上的遷移,我個人的了解就是缺少補啥,遷移過後,其他的節點會告知叢集,我這個節點遷移好了,叢集要等所有的節點都傳回了 OK ,然後在進行删除(個人了解。實際在删除的時候,的确在等一個傳回)。是以呢,筆者删幾個節點,直接就傻了,因為我着實是不知道要等多久。
可以通過
nodetool removenode status
來檢視删除節點的狀态,如果等待時間太長了,你又不想等,而且允許資料的丢失的時候,我們可以強制性的删除。
nodetool removenode force
就可以了。我就是執行的這個,分分鐘給删了。僅供參考。