天天看點

【Cassandra】Cassandra叢集管理節點添加節點删除節點

添加節點

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

就可以了。我就是執行的這個,分分鐘給删了。僅供參考。

繼續閱讀