2017年2月19日 星期日

Cassandra Cluster Tutorial


壹、前言

寫這篇文的原因與心得可以用同一句話來述說:「千萬不要無腦rm -rf 。」不小心把整個環境的東西刪除的下場就是只能全部從來一遍,就趁這個機會紀錄一下環境的設定以免之後又發生一樣的事。

貳、安裝環境

1. 作業系統:CentOS7
2. 節點數量:4
centos02: 192.168.1.2 (使用這台作為seed node)
centos03: 192.168.1.3
centos04: 192.168.1.4
centos05: 192.168.1.5
3. Cassandra版本:DataStax Distribution of Apache Cassandra 3.2
註:使用這個版本的原因如Cassandra Tutorial - 安裝篇這篇文所說,在這邊就不再贅述,但是有一點很重要,官方版本的Cassandra在目前(20170220)已經更新到3.10了,Datastax也不再提供版本的更新與維護,因此對於使用新版本的人這篇文章或許不是很能符合你的需求,在參考前可能會需要注意一下。

參、步驟

1. 修改Cassandra設定檔
設定檔預設是放在 /etc/cassandra/conf/cassandra.yaml

修改第10行
cluster_name: 'Test Cluster'
cluster中的每個實體都必須使用相同設定

修改第343行
- seeds: "127.0.0.1"
將所有節點的 - seeds: "127.0.0.1" 設定為 seed node 的 ip,讓他們知道在加入 cluster 時(只有在加入當下才需要)要從哪一台電腦取得其他節點的資訊,此外 seed 可以一個以上,如果有超過一個 seed 的話,ip 以逗號隔開,例如 "<ip>,<ip>,<ip>"。
在本例中設定為 - seeds: "192.168.1.2"

修改第472行
listen_address: localhost
Cassandra內部在溝通資料時使用的ip就在這邊設定 (Cassandra's internal storage protocol uses the listen_address.),因此所有節點皆要將之設為自己的 ip 或 hostname ,以便讓其他節點知道傳送資料時知道要送到哪裡去,如果是設定為 hostname 的話,所有節點的 /etc/hostname, /etc/hosts 或 DNS 等皆要進行設定。
centos02>>listen_address: 192.168.1.2
centos03>>listen_address: 192.168.1.3
centos04>>listen_address: 192.168.1.4
centos05>>listen_address: 192.168.1.5

修改第546行
rpc_address: localhost
Client端與server溝通時 (Thrift RPC service and native transport) 使用的地址
centos02>>rpc_address: 192.168.1.2
centos03>>rpc_address: 192.168.1.3
centos04>>rpc_address: 192.168.1.4
centos05>>rpc_address: 192.168.1.5

註:之後如果要使用cqlsh的話必須在後面接上想要連接的server的ip才可以用,例如cqlsh 192.168.1.4


到這裡cassandra.yaml的設定就算完成了 ^_^

    2. 啟動cluster
    因為所有node在啟動時都會先與seed溝通,因此必須先啟動seed node,啟動完seed node後再啟動其他節點

    # service cassandra start

    之後可以檢查cluster節點的狀態
    #nodetool status

    由下圖可以發現我們的四個節點都已經成功地彼此連接了!