Cassandra 資料庫如何增加新節點 (Windows Server 適用)

Apache Cassandra 是一套開源分散式 NoSQL 資料庫系統。
結合 Google Big TableAmazon DynamoDB 的資料模型與分散式架構所設計。
由於 Cassandra 具有良好的可延伸性和效能,被 Apple, Comcast, Instagram, Spotify, eBay, Netflix 等知名網站所採用,成為了一種流行的分散式結構化資料儲存方案。

我手上目前準備了 2 台伺服器,其中一台已經安裝 Cassandra,而此 Cassandra 上面已經有一些正式網站運作的資料庫檔案。

今天要將另一台新的伺服器也安裝 Cassandra,並利用增加新節點的方式,由 Cassandra 將資料移轉到新伺服器上面。

移轉之後,我的 2 台伺服器上面都會運行 Cassandra,彼此是分散式架構的節點。
這 2 台伺服器都可以當作應用程式的存取資料庫。

複製 Cassandra 主程式

這裡我不採用直接下載新主程式,是因為我在第 1 台伺服器已經安裝完成,且設定檔也都改好,複製到第 2 台伺服器,要調整的內容是最少的。
在 Cassandra 的設定檔,會放在 /conf/cassandra.yaml,複製過去後,只要改一些路徑及 IP 設定就好。
而且 2 台伺服器都使用相同的 Cassandra 版本,也可以避免版本上的差異。

第 1 台伺服器上,我將Cassandra 主程式放在 C:\Program Files\apache-cassandra-3.11.10。

接著把第 1 台的主程式檔案都複製到第 2 台上面,存放路徑也一樣。
(複製檔案之前,記得運作要先停止,這樣才可以順利複製主程式)

修改 Cassandra 設定檔

當複製完成後,開啟 apache-cassandra-3.11.10/conf/cassandra.yaml 設定檔。

因為這是增加新節點,所以在現有的設定檔中,已經完成主要設定,接下來只要修改部份的內容就可以讓Cassandra 為我們增加新節點。

我先介紹一下我的環境,第 1 台的伺服器 IP 是 192.168.1.107,而新的第 2 台 IP 是 192.168.1.111。
接下來要加入新的 IP 節點。

開啟 apache-cassandra-3.11.10/conf/cassandra.yaml 設定檔後,搜尋以下名稱來修改值。

1. 搜尋「listen_address:」,將後面 IP 改為本機 IP,也就是 “192.168.1.111”。

cassandra.yaml

2. 搜尋「rpc_address:」,將後面 IP 改為本機 IP,也就是 “192.168.1.111”。

修改 cassandra.yaml

3. 建立資料存放目錄,我存放目錄是 D:\Database\Cassandra\Data。

搜尋「data_file_directories:」,將值改為 “- D:\Database\Cassandra\Data”

修改 cassandra.yaml

4. 建立 commitlog 目錄,我存放目錄是 D:\Database\Cassandra\ commitlog。

搜尋「commitlog_directory:」,將值改為 “D:\Database\Cassandra\commitlog”

修改 cassandra.yaml

5. 建立 saved_caches 目錄,我存放目錄是 D:\Database\Cassandra\ saved_caches。

搜尋「saved_caches_directory:」,將值改為 “D:\Database\Cassandra\saved_caches”

修改 cassandra.yaml

啟動新 Cassandra 節點

我這台伺服器是 Windows Server 2019,在啟動 Cassandra 會遇到一些問題,我將會帶著大家一步一步解決。

開啟命令提示字元(CMD),切換目錄到 Cassandra 的 bin 目錄。
指令是「cd C:\Program Files\apache-cassandra-3.11.10\bin」。

啟動執行檔,指令為「cassandra.bat –f」。

cassandra.bat

啟用 PowerShell 執行原則

第 1 個問題是 PowerShell 執行的原則未開放。

PowerShell 的執行原則是一種安全性功能,可控制 PowerShell 載入設定檔和執行腳本時所使用的條件。 這項功能有助於防止惡意腳本的執行。

這裡要先調整執行原則改為 Unrestricted,表示任何腳本檔皆可被執行。

在「開始」輸入「PowerShell」,並使用系統管理員啟動 PowerShell。

PowerShell

輸入「Set-ExecutionPolicy Unrestricted」,然後再確認「Y」。

Set-ExecutionPolicy Unrestricted

安裝 Java JDK

接著再執行一次,「cassandra.bat –f」,遇到的第 2 個問題是 Java 未安裝。

cassandra.bat –f

我測試 Java JDK 不能用最新的版本,所以我這邊推薦的是舊一點的版本,jdk-8u251-windows-x64 才會成功。

JDK 官網下載位置: https://www.oracle.com/tw/java/technologies/javase/javase8u211-later-archive-downloads.html

將畫面往下移,找到「Java SE Development Kit 8u251」,下載 Windows x64 版本的 jdk-8u251-windows-x64.exe。

Java SE Development Kit 8u251

下載後,直接安裝,一直按「下一步」直到安裝完成。

安裝完成後,在 C:\Program Files\Java 就會看到 jdk 與 jre 的目錄。

開啟「控制台 > 系統及安全性 > 系統」,點「進階系統設定」。
切換到「進階」的頁籤。

環境變數

執行「環境變數」,在「系統變數」點「新增」。

環境變數

在「變數名稱」輸入”JAVA_HOME”,
在「變數值」,輸入” C:\Program Files\Java\jdk1.8.0_251”,指向剛剛的目錄。

環境變數

開啟防火牆

接著再執行一次,「cassandra.bat –f」,遇到的第 3 個問題是防火牆要開通。

cassandra.bat –f

開啟「Windows Defender 防火牆」,點「進階設定」。

Windows Defender 防火牆

在「輸入規則」,右邊點「新增規則」。

Windows Defender 防火牆

選擇「連接埠」。

Windows Defender 防火牆

新增 9042, 9160 是為了之後應用程式連結,讀取資料使用,
新增 7000 是加入新節點時,會使用到的 port。

Windows Defender 防火牆

選擇「允許連線」。

Windows Defender 防火牆

選擇開放的網路連線。

Windows Defender 防火牆

輸入防火牆名稱。

Windows Defender 防火牆

啟動新 Cassandra 節點

解決了以上問題,接著再執行一次,「cassandra.bat –f」,就會順利新增節點。

cassandra.bat –f

Cassandra 會依照節點原則,將需要的資料複製到這台伺服器。
若檔案很大,這裡會等待一點移轉時間。

cassandra.bat –f

增加節點完成。

cassandra.bat –f

重整節點資料

Cassandra 是一種分散式資料庫,當有新節點產生時,Cassandra 內部會計算資料該如何分配。
當我們新增節點後,要針對每一個舊節點更新配置,可以避免節點持續保留舊數據。

現在回到第 1 台伺服器上(原本那台)。

開啟命令提示字元(CMD),切換目錄到 Cassandra 的 bin 目錄。
指令是「cd C:\Program Files\apache-cassandra-3.11.10\bin」。

輸入指令「nodetool cleanup」。

nodetool cleanup

執行後,會看到 Cassandra 資料會重整一遍。

nodetool cleanup

測試連線

要測試連線會用到 Python 2.7 的執行環境,

安裝 Python 2.7

Python 官網下載

Python 2.7

下載後直接下一步安裝到完成。
安裝後在 C:\Python27 看到主程式。

Python 2.7

複製 Python 2.7 執行檔

將 C:\Python27 內的檔案,全部複製到C:\Program Files\apache-cassandra-3.11.10\bin

複製 Python 2.7 執行檔

執行 csqlsh 指令

開啟命令提示字元(CMD),切換目錄到 Cassandra 的 bin 目錄。
指令是「cd C:\Program Files\apache-cassandra-3.11.10\bin」。

輸入連線語法「cqlsh {IP} 9042 -u {帳號} -p {密碼}」。
{IP} 就帶入你新的伺服器 IP。

執行 csqlsh 指令

連線成功的話,就恭喜你順利新增節點了喔。

重點整理

  1. 使用原有的 Cassandra 主程式可最少設定
  2. 修改 Cassandra 設定檔,加入新節點 IP,新增目錄
  3. 啟用 PowerShell 執行原則
  4. 安裝 Java JDK 8u251 版本
  5. 開啟防火牆 9042, 9160, 7000
  6. 重整節點資料 nodetool cleanup
  7. 安裝 Python 2.7 執行測試連線

相關學習文章

如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝

加入社團一起討論

關注我的 IG

2 thoughts on “Cassandra 資料庫如何增加新節點 (Windows Server 適用)

    1. 多節點不會因為單一節點陣亡,而全部死亡。
      他的容錯跟 RAID 模式類似,但也有不同,Cassandra 並沒有將資料加密儲存,而只是計算該筆資料該存放在何處,
      在建立鍵空間時,會決定資料複製幾份,例如 CREATE KEYSPACE casmarket WITH replication = {‘class’:’SimpleStrategy’, ‘replication_factor’ : 3}; 這裡指的是複製 3 份,
      所以在單一節點停機後,還有另外 2 個節點可以取得資料。

Comments are closed.