2012-01-04
這篇的說明是以Cassandra 1.x版為基準,早期版本可能不是這樣。
接著...進入正題,先來個名詞解釋!
Snitch:用來設定cassandra ring裡的node怎麼分群。如果所有node都在同個網段時(e.g. 172.16.0.x)這部份可用預設SimpleSnitch設定不需修改,如果各個node分布的硬體在多個dc(datacenter)或是多個rank,而且各個node的網段又完全不同的話,這部份就要改設定,不然cassandra ring可能會串不起來。半官方解說在
這裡。可以設定的值有下列儿種
* SimpleSnitch
* DseSimpleSnitch
* RackInferringSnitch
* PropertyFileSnitch
* EC2Snitch
* EC2MultiRegionSnitch
Replication Strategy:根據Snitch設定值的不同,當建立新keyspace時所需對應設定的參數。半官方解說在
這裡。可以設定的值有下列儿種
* SimpleStrategy
* NetworkTopologyStrategy
看完上面這堆後,真的知道它是怎麼一回事的,應該沒多少人。覺的文件像在講外星語是很正常的,所以接下來直接來看實作吧。看完實作後再回頭來看前面的名詞解釋,就會了解是怎麼一回事了。
實作的機器有下面二台
Cassandra Server1:172.16.0.157
Cassandra Server2:172.16.0.220
因為Snitch跟Replication Strategy要搭配才會發生效用,然後這二台機器又在同個網段(172.16.0.X),所以可以用最簡單也是最常用的搭配組合「SimpleSnitch + SimpleStrategy」。官方文件中最常見的介紹方式也是這個組合。
===========================================================================
SimpleSnitch + SimpleStrategy設定方式
1.修改二個node的cassandra.yaml的設定
endpoint_snitch: org.apache.cassandra.locator.SimpleSnitch2.用nodetool進行測試,會發現結果中的dc被命名為datacenter1,rank則是rack1,這二個部份無法手動調整
loudtu@cloudtu-VirtualBox:~/cassandra-1.0.6-1/bin$ ./nodetool -h 127.0.0.1 ring3.建立新的keyspace。配合SimpleSnitch,有其對應的SimpleStrategy語法。範列中{replication_factor:2}指的是
Address DC Rack Status State Load Owns Token
85070591730234615865843651857942052864
172.16.0.220 datacenter1 rack1 Up Normal 123.46 KB 50.00% 0
172.16.0.157 datacenter1 rack1 Up Normal 111.73 KB 50.00% 85070591730234615865843651857942052864
{replication_factor:number_of_replicas}
create keyspace testks===========================================================================
with strategy_options=[{replication_factor:2}]
and placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy';
endpoint_snitch: org.apache.cassandra.locator.RackInferringSnitch2.用nodetool進行測試,會發現結果中的dc被命名為16,rank則是0,這二個部份無法手動調整。但是這個命名是有規則的,相關規則可參照 這裡的說明。
cloudtu@cloudtu-VirtualBox:~/cassandra-1.0.6-1/bin$ ./nodetool -h 127.0.0.1 ring3.建立新的keyspace。配合RackInferringSnitch,有其對應的NetworkTopologyStrategy語法。範列中{16:2}指的是
Address DC Rack Status State Load Owns Token
85070591730234615865843651857942052864
172.16.0.220 16 0 Up Normal 107.69 KB 50.00% 0
172.16.0.157 16 0 Up Normal 111.83 KB 50.00% 85070591730234615865843651857942052864
{datacenter_name:number_of_replicas}
create keyspace testks===========================================================================
with strategy_options=[{16:2}]
and placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy';
endpoint_snitch: org.apache.cassandra.locator.PropertyFileSnitch2.因為設定成PropertyFileSnitch,所以接著必需到二個node的cassandra-topology.properties設定所有node的IP與其相對應的dc與rank。
# Data Center One
172.16.0.157=DC1:RAC1
# Data Center Two
172.16.0.220=DC2:RAC1
# default for unknown nodes
default=DC1:RAC1
cloudtu@cloudtu-VirtualBox:~/cassandra-1.0.6-1/bin$ ./nodetool -h 127.0.0.1 ring4.建立新的keyspace。配合PropertyFileSnitch,有其對應的NetworkTopologyStrategy語法。範列中{DC1:1,DC2:1}指的是
Address DC Rack Status State Load Owns Token
85070591730234615865843651857942052864
172.16.0.220 DC2 RAC1 Up Normal 150.59 KB 50.00% 0
172.16.0.157 DC1 RAC1 Up Normal 155.01 KB 50.00% 85070591730234615865843651857942052864
{datacenter_name:number_of_replicas}
。本範例中有多個dc,所以設定值之間必需用「,」隔開。
create keyspace testks===========================================================================
with strategy_options=[{DC1:1,DC2:1}]
and placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy';