cassandra運維歸納

在之前公司有幸用到了cassandra並且具有一定程度的數據量,所有不免出現許多問題,從而進行解決,在此統一歸納,以便自己回顧,也供大家一起研究學習,實際ip或一些敏感信息已手動脫敏。


目錄

1.平臺日常檢查、監控內容

2.權限管理

3.備份還原

4.集羣遷移(全量)

4.1 方案1:使用sstableloader來做集羣間數據遷移

4.2 方案2:利用集羣節點的增加和移除來平滑切換集羣數據

4.3 方案3:全量數據的導入導出

5.遇到的問題

5.1 problem:超大組導致數據熱點問題

5.2 problem:Cassandra數據不一致

5.3 problem:Cassandra需要定期和手動執行repair等運維操作,否則可能出現髒數據

5.4 problem:Cassandra無法獲取一張表的總記錄數

5.5 problem: cassandra集羣產生長時間的GC


1.平臺日常檢查、監控內容

[root@cache01 ~]#nodetool -h 192.168.0.10 status

Datacenter: datacenter1

=======================

Status=Up/Down

|/ State=Normal/Leaving/Joining/Moving

--  Address         Load       Tokens  Owns    Host ID                               Rack

UN  192.168.0.10  18.28 GB   256     ?       e33aedac-4385-499c-8c64-37ac3c7c9796  rack1

UN  192.168.0.11  13.16 GB   256     ?       460b90fb-148a-4a00-8e66-06d079f0a2b1  rack1

UN  192.168.0.12  19.13 GB   256     ?       bf5611c7-34b4-4f32-a0ad-21878cda13b2  rack1

UN  192.168.0.13  15.19 GB   256     ?       9a507206-82a1-426e-8f99-32b5d40c00d9  rack1

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

通過cql進行一些測試命令

[root@cache01 ~]# cqlsh 192.168.0.10  9042  -u ecache -p ecache

Connected to ecache at 192.168.0.10:9042.

[cqlsh 5.0.1 | Cassandra 2.1.1 | CQL spec 3.2.0 | Native protocol v3]

Use HELP for help.

ecache@cqlsh> DESC KEYSPACES ;

ecache@cqlsh> USE ecache ;

ecache@cqlsh:ecache> SELECT * FROM
             
ecache@cqlsh:ecache> SELECT * FROM account LIMIT 1;

2.權限管理

cassandra的權限都可以通過查自帶system_auth.users和permission(要開啓權限管理)查出相應用戶對於鍵空間或者表的權限

權限管理設置:(該設置可以針對當臺節點)

authenticator: PasswordAuthenticator(需要用戶密碼)
authorizer: CassandraAuthorizer(AllowAllAuthorizer 是允許用戶進行任何操作)
創建用戶的時候可自帶超級管理員

CREATE USER fk WITH PASSWORD 'fk' SUPERUSER;
ALTER USER fk WITH PASSWORD 'fk' NOSUPERUSER;

讓某個用戶對某張表有某些權限(當然需要超級用戶來操作)

GRANT ALL(權限可選 ) PERMISSIONS ON KEYSPACE fky(可選表空間 可選表 )TO fk(用戶名) ;

設置完後就可以查找系統表 看看權限是否生效


3.備份還原

不介紹主動nodetool創建snapshot,就說自動備份
cassandra有個參數 :auto_snapshot: true
它能夠在我們truncate table /drop colunm family/drop keyspace  執行這些對數據有毀壞性操作的時候,自動生成snapshot快照
這些快照存放在datafile設置目錄下的table-uuid 文件夾下的snapshot裏
若要還原數據只需
刪除commitlog->拷貝snapshot下的數據文佳到table-uuid文件夾下->重啓節點


4.集羣遷移(全量)

介紹3種方案,方案各有優缺點,耗時或者是對應用的影響,根據自己的業務進行選擇)​​​​​​

4.1 方案1:使用sstableloader來做集羣間數據遷移

步驟描述:

1. 目標集羣創建相同的keyspace和table

2. 停止源集羣的客戶端寫入

3. 源集羣各個節點執行nodetool flush,把所有數據寫入sstable中

4. 源集羣各個節點執行sstableloader,把數據遷移到目標集羣中

5. 各節點逐一執行nodetool compact操作

優點:

1. 數據遷移速度快

缺點:

1. 全程需要停止集羣服務,對應用的影響較大

2. 缺少新舊集羣數據校驗過程

4.2 方案2:利用集羣節點的增加和移除來平滑切換集羣數據

步驟描述:

1. 把新節點逐一加入舊集羣,組成一個大集羣,完全加入後,需要短暫重啓客戶端的讀寫服務,把客戶端的配置信息指向新加入的8個節點

2. 從大集羣中刪除逐舊節點

3. 新節點逐一執行nodetool repair

優點:

1. 只需短暫重啓客戶端的讀寫服務程序即可,對應用的影響較小

缺點:

1. 耗時較長

2. 缺少新舊集羣數據校驗過程

4.3 方案3:全量數據的導入導出

步驟描述:

1. 舊集羣全量導出數據到文件

2. 新集羣全量導入數據

3. 新集羣全量導出數據到文件,然後進行文件比對,即可確定兩個集羣的數據一致性問題

優點:

1. 包含了新舊集羣的數據校驗過程

缺點:

1. 耗時較長


5.遇到的問題

5.1 problem:超大組導致數據熱點問題

現象描述:靜態分組算法有點問題,導致每張表的某個partition的數據量佔了總數據量的50%以上的數據。Cassandra在創建表的時候,是以 partition_id 作爲 partition_key,這樣同一個 partition_id 的數據,在入庫時計算出來的 hash 值是一樣的,所以也是寫入Cassandra的同一個node中,這樣就會導致嚴重的數據熱點。

解決:創建表的時候,以 partition_id 和 bucket_id 組合作爲 partition_key,其中,bucket_id是由表中某個字段根據一定算法生成的僞隨機數。

5.2 problem:Cassandra數據不一致

現象描述:先前研發中心是採用MapReduce接口往Cassandra集羣寫入檔案數據,而MapReduce接口默認的Cassandra寫入一致性是ONE,所以當Cassandra所有14張表同時錄入數據時,會出現Cassandra集羣過載情況,而MapReduce又沒有失敗後休眠重試的機制,所以整個錄入過程當Cassandra過載時會出現髒數據,客戶端從Cassandra多次全量導出數據就會出現不一致,出現嚴重的數據不一致問題。

解決:修改MapReduce接口的寫入一致性爲QUORUM或者ALL,並且在失敗後捕獲異常並休眠重試,其中休眠的目的是變相的降低負載,避免髒數據的出現,從而解決數據不一致的問題。

5.3 problem:Cassandra需要定期和手動執行repair等運維操作,否則可能出現髒數據

現象描述:當用戶刪除數據時,碰巧保存該數據的副本的那個節點down掉,並且一直到gc_grace_seconds(默認是10天,可以配置)這個時間過後才修復並再次加入集羣中,如果沒有執行 repair 操作,就可能出現髒數據。

解決:需要定期和手動執行 repair 等運維操作。

5.4 problem:Cassandra無法獲取一張表的總記錄數

現象描述:

解決:這個是Cassandra的一個特點,Cassandra開發者不認爲是一個問題,故無法解決

5.5 problem: cassandra集羣產生長時間的GC

現象描述:Cassandra進行大量導出操作,由於沒有用flash卡,並且只有一塊磁盤 性能會比預計有較大的偏差,也造成了較大的GC 情況,導致了Cassandra的異常。

解決: 設備添加flash卡 && 修改配置,file_cache_size_in_mb從512M增加到2048M,增大讀取sstable的緩存,提供查詢性能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章