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