天天看點

Cassandra 的叢集配置

1、基本配置

首先需要準備3台或以上的計算機。下面假定有3台運作 Linux 作業系統的計算機,IP位址分别為 192.168.0.100, 192.168.0.101 和 192.168.0.102。 系統需要安裝好 Java 運作時環境,然後到這裡下載下傳 0.7 版本的 Cassandra 二進制發行包。

挑選其中的一台機開始配置,先展開 cassandra 發行包:

$ tar -zxvf apache-cassandra-$VERSION.tar.gz
$ cd apache-cassandra-$VERSION      

其中的 conf/cassandra.yaml 檔案為主要配置檔案,0.7 版以後不再采用XML格式配置檔案了,如果對 YAML 格式不熟悉的話最好先到這裡了解一下。

Cassandra 在配置檔案裡預設設定了幾個目錄:

data_file_directories: /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
saved_caches_directory: /var/lib/cassandra/saved_caches      

data_file_directories 可以一次同時設定幾個不同目錄,cassandra 會自動同步所有目錄的資料。另外在日志配置檔案 log4j-server.properties 也有一個預設設定日志檔案的目錄:

log4j.appender.R.File=/var/log/cassandra/system.log      

一般情況下采用預設的配置即可,除非你有特殊的儲存要求,是以現在有兩種方案:一是按照預設配置建立相關的目錄,二是修改配置檔案采用自己指定的目錄。

下面為了簡單起見采用第一種方案:

$ sudo mkdir -p /var/log/cassandra
$ sudo chown -R `whoami` /var/log/cassandra
$ sudo mkdir -p /var/lib/cassandra
$ sudo chown -R `whoami` /var/lib/cassandra      

上面的 `whoami` 是 Linux 指令用于擷取目前登入的使用者名,如果你不準備用目前登入使用者運作 Cassandra,那麼需要把 `whoami` 替換成具體的使用者名。

2、有關叢集的配置

由于 Cassandra 采用去中心化結構,是以當叢集裡的一台機器(節點)啟動之後需要一個途徑通知目前叢集(有新節點加入啦),Cassandra 的配置檔案裡有一個 seeds 的設定項,所謂的 seeds 就是能夠聯系叢集中所有節點的一台計算機,假如叢集中所有的節點位于同一個機房同一個子網,那麼隻要随意挑選幾台比較穩定的計算機即可。在目前的例子中因為隻有3台機器,是以我挑選第一台作為種子節點,配置如下:

seeds:
- 192.168.0.100      

然後配置節點之前通信的IP位址:

listen_address: 192.168.0.100      

需要注意的是這裡必須使用具體的IP位址,而不能使用 0.0.0.0 這樣的位址。

配置 Cassandra Thrift 用戶端(應用程式)通路的IP位址:

rpc_address: 192.168.0.100      

這項可以使用 0.0.0.0 監聽一台機器所有的網絡接口。

Cassandra 的 Keyspaces 和 ColumnFamilies 不再需要配置了,他們将在運作時建立和維護。

把配置好的 Cassandra 複制到第2和第3台機器,同時建立相關的目錄,還需要修改 listen_address 和 rpc_address 為實際機器的IP位址。至此所有的配置完成了。

 3、啟動 Cassandra 各個節點以及叢集管理

啟動順序沒什麼所謂,隻要保證種子節點啟動就可以了:

$ bin/cassandra -f      

參數 -f 的作用是讓 Cassandra 以前端程式方式運作,這樣有利于調試和觀察日志資訊,而在實際生産環境中這個參數是不需要的(即 Cassandra 會以 daemon 方式運作)。

所有節點啟動後可以通過 bin/nodetool 工具管理叢集,比如檢視所有節點運作情況:

$ bin/nodetool -host 192.168.0.101 ring      

運作結果類似如下:

Address Status State Load Owns Token
159559...
192.168.0.100 Up Normal 49.27 KB 39.32% 563215...
192.168.0.101 Up Normal 54.42 KB 16.81% 849292...
192.168.0.102 Up Normal 73.14 KB 43.86% 159559...      

指令中 -host 參數用于指定 nodetool 跟哪一個節點通信,對于 nodetool ring 指令來說,跟哪個節點通信都沒有差別,是以可以随意指定其中一個節點。

從上面結果清單可以看到運作中的節點是否線上、State、資料負載量以及節點Token(可以了解為節點名稱,這個是節點第一次啟動時自動産生的)。我們可以使用 nodetool 組合 token 對具體節點進行管理,比如檢視指定節點的詳細資訊:

$ bin/nodetool -host 192.168.0.101 info      

運作的結果大緻如下:

84929280487220726989221251643883950871
Load : 54.42 KB
Generation No : 1302057702
Uptime (seconds) : 591
Heap Memory (MB) : 212.14 / 1877.63      

檢視指定節點的資料結構資訊:

$ bin/nodetool -host 192.168.0.101 cfstats      

運作結果:

Keyspace: Keyspace1
Read Count: 0
Write Count: 0
Pending Tasks: 0
Column Family: CF1
SSTable count: 1      

使用下面指令可以移除一個已經下線的節點(比如第2台機器關機了或者壞掉了)

$ bin/nodetool -host 192.168.0.101 removetoken 84929280487220726989221251643883950871      

下了線的節點如何重新上線呢?什麼都不用做,隻需啟動 Cassandra 程式它就會自動加入叢集了。

在實際運作中我們可能會需要隔一段時間備份一次資料(建立一個快照),這個操作在 Cassandra 裡非常簡單:

$ bin/nodetool -host 192.168.0.101 snapshot      

 4、測試資料的讀寫

使用用戶端元件加單元測試是首選的,如果僅想知道叢集是否正常讀寫資料,可以用cassandra-cli 作一個簡單測試:

$ bin/cassandra-cli -host 192.168.0.101      

接着輸入如下語句:

create keyspace Keyspace1;
use Keyspace1;
create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type;
set Users[jsmith][first] = 'John';
set Users[jsmith][last] = 'Smith';
get Users[jsmith];      

上面語句建立了一個名為“Keyspace1”的 keyspace,還建立了一個名為“Users”的 Column Family,最後向 Users 添加了一個 item。正常的話應該看到類似下面的結果:

=> (column=first, value=John, timestamp=1302059332540000)
=> (column=last, value=Smith, timestamp=1300874233834000)
Returned 2 results.      
原文位址:      

http://archboy.org/2011/08/19/nosql-apache-cassandra-cluster/

繼續閱讀