为什么DSE Cassandra在数据中心名称中显示完整的区域名称?

时间:2017-10-06 02:25:04

标签: cassandra datastax-enterprise

我在us-east-2区域的AWS EC2上运行DSE Cassandra 4.8.14和3节点集群。 我将我的cassandra.yaml设置为:

<DataContract(Name:="Class1", Namespace:="http://www.example.com/my/app")> _
Public Class Class1
    <DataMember> _
    Public Property Test
End Class

<DataContract(Name:="Class2{0}", Namespace:="http://www.example.com/my/app")>    
Public Class Class2(Of ReturnType)
    <DataMember> _
    Public Property Test As String
    <DataMember()> _
    Public Property Items() As ReturnType()
End Class

我的cassandra-rackdc.properties如下:

<ServiceContract(Name:="Service")> _
Public Interface IService

    <OperationContract()> _
    Function GetStuff() As Class2(Of Class1)

End Interface

使用此设置,根据DSE documentation,我应该将我的数据中心名称视为

<DataContract(Namespace:="http://www.example.com/my/app")>
Public Class Class1
    Inherits [Shared].Entities.Class1

End Class

但是,在mt系统中它显示为 us-east-2-2

  <?xml version="1.0"?>
     <configuration>

        <system.serviceModel>
<diagnostics>
  <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtTransportLevel="true"/>
  <endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true"/>
</diagnostics>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false"/>
<bindings/>
<services>
  <service behaviorConfiguration="MyServ" name="WcfService1.Service">
    <endpoint binding="netTcpBinding" bindingConfiguration="" contract="WcfService1.IService" />
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
      contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost/service/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="MyServ">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>

有人可以提供一些我在这里缺少的想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

确定数据中心名称的代码比文档中描述的内容稍微有些细微差别。

如果EC2区域以1结尾,如us-east-1,则数据中心名称为us-east。但是,如果EC2区域未在1中结束,就像您使用us-east-2的情况一样,那么它将使用整个区域名称作为数据中心名称。添加-2 dc_suffix ,数据中心名称将变为us-east-2-2

为什么命名如此不一致?很久以前有一个错误导致某些地区拥有相同的数据中心名称。例如,us-east-1us-east-2都是us-east。为了解决这个问题,提交者决定只保留那些以1结尾的区域来使用旧的数据中心名称,以便使用旧版本的小报告与现有的群集保持向后兼容。

CASSANDRA-7839的开放是为了标准化Ec2Snitch的命名约定,但它看起来还没有取得进展。

来源:

  1. https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/locator/Ec2Snitch.java
    (Ec2MultiRegionSnitch从Ec2Snitch延伸)

  2. https://issues.apache.org/jira/browse/CASSANDRA-4026