寫在前面
cassandra3.x官方文檔的非官方翻譯。翻譯內容水平全依賴本人英文水平和對cassandra的理解。所以強烈建議瀏覽英文版cassandra 3.x 官方文檔。此文檔1半是翻譯,1半是個人對cassandra的認知。盡可能將我的理解通過援用的方式標注,以示區分。另外文檔翻譯是項長時間并有挑戰的工作,如果你愿意加入cassandra git book,可以發信給我。固然你也能夠加入我們的QQ群,104822562。1起學習探討cassandra.
摘要
探測器決定了數據中心和機架節點的歸屬。他們將網絡拓撲結構告知給Cassandra,因此要求可以比較高效的進行路由允許Cassandra通過將機器依照數據中心和機架進行分組從而分發副本。具體來講,復制策略基于新的探測器提供的信息放置副本。所有的節點必須返回相同的機架和數據中心信息。Cassandra 盡其所能,不將多個副本放在同1個機架上。(這不1定指代物理位置)
Note: 如果你更改探測器,你可能需要履行額外的步驟,由于探測器會影響副本放置。詳情查看更換探測器
1.動態探測
默許情況下,所有的探測器通過1個動態探測層來監控讀延遲,盡量不將要求路由到性能差的節點上。動態探測默許情況下是被啟動的,同時也是適用于大多數的部署。想看看他是如何工作的,可以查看http://www.datastax.com/dev/blog/dynamic-snitching-in-cassandra-past-present-and-future.可以cassandra.yaml文件中為每一個節點配置動態探測閾值。
更多詳細的內容,可以查看http://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archDataDistributeFailDetect.html列出的屬性
2.簡單探測
SimpleSnitch(默許值)只適用于單數據中心的部署。它不能辨認數據中心或機架信息,且只可以用于單數據中心的部署或公有云的單地區。它將策略的順序作為距離,可以提高緩存當禁掉讀修復。
使用簡單探測器時,在定義keyspace的時候,使用SimpleStrategy,然后指定1個復制因子。
3.RackInferringSnitch
RackInferringSnitch 通過機架和數據中心來決定節點的距離,分別和節點ip地址的第3位、第2位對應。這個探測器時用來寫自定義探測器最好的例子。(除非這正好匹配你的部署協議)
注:
這個探測器實現起來非常粗魯,就是取ip
public String getRack(InetAddress endpoint)
{
return Integer.toString(endpoint.getAddress()[2] & 0xFF, 10);
}
4.PropertyFileSnitch
這個探測器通過機架和數據中心來決定節點的距離。使用cassandra-topology.properties 文件中定義的網絡拓撲細節。當使用這個探測器可以將數據中心的名字定義為任何你想要的。確保定義keyspace時指定的名字和這邊定義的1樣。集群中的每一個節點都應當在cassandra-topology.properties文件中定義。而且集群中的每一個節點這個文件都應當1樣。
進程
如果你的節點有有不1樣ip,集群中有兩個物理數據中心每一個數據中心都有兩個機架。第3個邏輯數據中心用來復制分析數據。配置文件可能看起來像下面這樣:
Note: 數據中心和機架的名字是大小寫敏感的.
# datacenter One
175.56.12.105=DC1:RAC1
175.50.13.200=DC1:RAC1
175.54.35.197=DC1:RAC1
120.53.24.101=DC1:RAC2
120.55.16.200=DC1:RAC2
120.57.102.103=DC1:RAC2
# datacenter Two
110.56.12.120=DC2:RAC1
110.50.13.201=DC2:RAC1
110.54.35.184=DC2:RAC1
50.33.23.120=DC2:RAC2
50.45.14.220=DC2:RAC2
50.17.10.203=DC2:RAC2
# Analytics Replication Group
172.106.12.120=DC3:RAC1
172.106.12.121=DC3:RAC1
172.106.12.122=DC3:RAC1
# default for unknown nodes
default =DC3:RAC1
注:
這類配置方式應當是比較常見的方式,筆者也常常這么干。清晰明了,簡單易懂。唯1的問題在于進行節點擴大時,需要更新所有的節點上此配置文件。不過不用重啟節點令配置生效。默許刷新的時間是5s
org.apache.cassandra.locator.PropertyFileSnitch private static final int DEFAULT_REFRESH_PERIOD_IN_SECONDS = 5;
5.Ec2Snitch
集群中的所有節點都在1個地區,這類簡單的集群部署在Amazon EC2可使用Ec2Snitch方法。
在EC2上的部署,地區(region)的名字作為數據中心的名字。區域(zones)被當作數據中心中的機架。例如,如果1個節點在us-east⑴區域,us-east是數據中心的名字,1是機架的位置。(機架對分發副本很重要,而不是為了數據中心的命名)由于使用的是私有IPs,所以探測器沒法跨地區。
如果你只使用單數據中心,不需要指定任何的屬性。
如果使用多數據中心,需要在cassandra-rackdc.properties配置文件中設置dc_suffix選項。其他行會被疏忽。
例如,us-east地區的每一個節點,在cassandra-rackdc.properties文件中指定數據中心。
Note: 數據中心名字是大小寫敏感的
node0
dc_suffix=_1_cassandra
node1
dc_suffix=_1_cassandra
node2
dc_suffix=_1_cassandra
node3
dc_suffix=_1_cassandra
node4
dc_suffix=_1_analytics
node5
dc_suffix=_1_search
這樣會為該地區生成3個數據中心
us-east_1_cassandra
us-east_1_analytics
us-east_1_search
Note: 在這個例子中,數據中心命名習慣是根據負載性質來定的。你可使用其他的規范,如DC1,DC2,100,200.
Keyspace Strategy 選項
當定義keyspace strategy 選項,使用EC 地區名字,如’us-east’作為數據中心的名字
注:
亞馬遜是云主機,提供給用戶的只有region 和zone的概念。分別對應著cassandra的數據中心和機架,確保數據不會被放在1起。可以在AWS regions`查看regions信息。
6.Ec2MultiRegionSnitch
當在Amazon EC2中的cassandra集群需要跨多地區的時候,使用Ec2MultiRegionSnitch。
當使用Ec2MultiRegionSnitch時,必須要在cassandra.yaml文件和屬性文件cassandra-rackdc.properties中配置設置。
cassandra.yaml文件配置跨區域通訊
Ec2MultiRegionSnitch 指定broadcast_address值為public IP,以此來允許跨地區的連接。將每一個節點配置以下:
這樣可使得在EC2 某個region的Cassandra 節點可以綁定到另外的region,從而支持了多數據中心。對region內部的流量,Cassandra會切換到private IP建立連接。
在cassandra.yaml文件中設置seed nodes為public IP.私有IP不會再網絡間被路由到。如:
seeds: 50.34.16.33, 60.247.70.52
對EC2中每個seed nodes,可以通過下面指令找到public IP 地址
`curl http://instance-data/latest/meta-data/public-ipv4`
Note:不要講所有的節點都作為seeds,具體查看gossip
配置snitch跨地區通訊
在EC2部署,地區(region)的名字作為數據中心的名字。區域(zones)被當作數據中心中的機架。例如,如果1個節點在us-east⑴區域,us-east是數據中心的名字,1是機架的位置。(機架對分發副本很重要,而不是為了數據中心的命名)
對每一個節點,需要在cassandra-rackdc.properties文件中指定它的數據中心。dc_suffix 選項定力了snitch將用到的數據中心。其他行會被疏忽。
在下面的例子中,這兒有兩個cassandra數據中心,每一個數據中心根據負載命名。在這個例子中,數據中心命名習慣是根據負載性質來定的。你可使用其他的規范,如DC1,DC2,100,200.(數據中心的名字大小寫敏感)
Region: us-east | Region: us-west |
---|---|
Node and datacenter:
This results in four us-east datacenters:
|
Node and datacenter:
This results in four us-west datacenters:
|
Keyspace Strategy 選項
當定義keyspace strategy 選項,使用EC 地區名字,如’us-east’作為數據中心的名字。
相干的信息
[install locationl](http://docs.datastax.com/en/cassandra/3.0/cassandra/install/referenceInstallLocationsTOC.html)