顯示具有 database 標籤的文章。 顯示所有文章
顯示具有 database 標籤的文章。 顯示所有文章

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

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

    2016年10月30日 星期日

    Cassandra Tutorial - 名詞篇 - 最後更新20161031


    1、前言


    突然意識到這個部落格荒廢好久了XD,之前都在忙上課或是研討會的東西(或是耍費)所以都沒有增加一點新東西,趁著繼續用碩論的機會,趕快來發一篇文章喚醒自己的記憶。

    個人認為相較於MongoDB,Cassandra的學習資源真的少的可憐,因為Cassandra的系統架構更加的複雜(但是網路上都說很簡單...),雖然官方文件以及cassandra.yaml的說明很完整,但又有很多眉眉角角的東西需要注意,因此在學習上面碰到許多障礙,這篇文章整理了官方文件以及網路資源,使用自己可以理解的話整理而來,包括了很多讓我搞混的名詞,在整理的同時希望可以幫助自己以及讀者更加了解這些名詞的意義,而因我也正在學習中,因此這篇文章將會持續更新,如果有寫錯的地方歡迎告知討論。


    2、正文


    2.1 Gossip

    Gossip是一個點對點的傳輸協定,透過這個協定,集群中節點間週期性(秒)的交換彼此的狀態,因此可以使節點快速的了解其他節點的狀態。
    為了避免Gossip在溝通時出現問題,同個集群中的節點必須使用相同的seed nodes list。

    2.2 seed node

    當有新的節點加入集群時,該節點會與seed node溝通(bootstrap),以取得集群中其他節點的狀態,一個集群中可以有一個以上的seed node節點。
    當節點被設定為seed node後,在集群運作時,唯一的差別就只是多了與新節點溝通資訊(bootstrap)這項功能功能,因此它也不是SPOF(已經開始運作後,沒有需要bootstrap的問題)。

    2.3 Single Point of Failure(SPOF)

    SPOF直翻為單點失效,所以SPOF是指一個狀態嗎? 非也,SPOF指的是在某環境中,如果某硬體(或指單位,或指零件等等)故障會造成整個系統不可用時,該硬體就被稱為SPOF。
    補充:
    在看一些論文時,常常會看到文中稱某硬體redundancy,一直以為都把它翻成多餘的,但是翻譯成備援可能比較恰當,所以在高可用環境中,為了避免SPOF,使用Redundancy的硬體配備有它的必要性。
    Cassandra這種每個節點的腳色都一樣的架構可以避免SPOF的問題。

    2.4 Bootstrap

    單純是指新節點加入時與seed node溝通資料資訊的過程。
    ---內容持續增加中---