6

私は Cassandra を初めて使用し、複数のリージョンにまたがる EC2 環境で Cassandra を立ち上げて実行する任務を負っています。そのため、EC2 リージョン全体が崩壊した場合でも、アプリは引き続き楽しく動作します。Ec2MultiRegionSnitch に関して見つけられる限り多くのドキュメントを読みましたが、完全に停止しました。カサンドラ 1.0.10 を実行しています。

私の問題は次のとおりです。

1) bin/cassandra を起動すると、次のエラーが表示されます: JMX で mbean の登録を開始できませんでした。どのノードでも bin/nodetool -h ring を実行できますが、健全なシステムに期待される表示が得られます。cassandra デプロイメントに mx4j ライブラリを追加しました。私はそれを削除してみることができたと思います。

2) 次に bin/cassandra-cli -h を開始すると、次のようにキースペースを作成できます。

    CREATE KEYSPACE mykeyspace 
    WITH placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy'
    and strategy_options = {us-east-1:2,us-west-1:2};

3) 「use mykeyspace」を実行した後、次のように列ファミリーを作成できます。

    CREATE COLUMN FAMILY people 
       WITH comparator=UTF8Type AND key_validation_class=UTF8Type AND 
       default_validation_class=UTF8Type AND column_metadata=[{column_name:FIRST_NAME,validation_class:UTF8Type},
      {column_name:LAST_NAME,validation_class:UTF8Type},
      {column_name:EMAIL,validation_class:UTF8Type},
      {column_name:LOGIN,validation_class:UTF8Type, index_type: KEYS}];

4) これを行った後、4 つのノードのいずれかで bin/cassandra-cli -h を実行し、use mykeyspace; を実行します。説明; 各ノードは、列ファミリーとシード リストを含む mykeyspace を正しく記述します。

5)しかし、単純なことを実行しようとすると:

    set people['1']['FIRST_NAME'] = 'John'; 

次のようにスタック トレースを取得します。

    null
    UnavailableException()
        at org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:15206)
        at org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:858)
        at org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:830)
        at org.apache.cassandra.cli.CliClient.executeSet(CliClient.java:901)

私の構成:

ポート 22、7000、7199、および 9160 に対して ec2-authorize を実行しました

クラスターには 4 つのノードがあります。次の各リージョンに 1 つのノードがあります:AvailabilityZones。

    us-east-1:us-east-1a  (initial_token: 0)
    us-east-1:us-east-1c  (initial_token: 85070591730234615865843651857942052864)
    us-west-1:us-west-1a  (initial_token: 1)
    us-west-1:us-west-1c  (initial_token: 85070591730234615865843651857942052865)

各 EC2 インスタンスは、パブリック IP アドレスに関連付けられています。

各ノードで、cassandra.yamlを次のように構成しました。

    seeds: <set to the public ip address for the us-east-1a and us-west-1a nodes>
    storage_port: 7000
    listen_address: <private ip address of this node>
    broadcast_address: <public ip address of this node>
    rpc_address: 0.0.0.0
    rpc_port: 9160
    endpoint_snitch: Ec2MultiRegionSnitch

さらに、各ノードのcassandra-env.shに以下を含めました。

    JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<Node's local IP Address>"

私の嘆願 このことを希望どおりに機能させるのに役立つ十分な情報を誰かに提供したことを願っています。

最初の mx4j の問題からの追加情報スタック トレース:

    WARN 22:07:17,651 Could not start register mbean in JMX java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.cassandra.utils.Mx4jTool.maybeLoad(Mx4jTool.java:66)
    at org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:243)
    at org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:356)
    at org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:107)
    Caused by: java.net.BindException: Cannot assign requested address
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:353)

私のcassandra-topology.properties

    aaa.aaa.aaa.aaa=us-east-1:us-east-1a
    bbb.bbb.bbb.bbb=us-east-1:us-east-1c

    ccc.ccc.ccc.ccc=us-west-1:us-west-1a
    ddd.ddd.ddd.ddd=us-west-1:us-west-1c

    default=us-east-1:us-east-1a

私のnodetoolリング出力__

    Address         DC          Rack        Status State   Load            Owns    Token                                       
                                                                           85070591730234615865843651857942052865      
    aaa.aaa.aaa.aaa  us-east     1a          Up     Normal  11.09 KB        50.00%  0                                           
    bbb.bbb.bbb.bbb  us-west     1a          Up     Normal  6.68 KB         0.00%   1                                           
    ccc.ccc.ccc.ccc  us-east     1c          Up     Normal  11.09 KB        50.00%  85070591730234615865843651857942052864      
    ddd.ddd.ddd.ddd  us-west     1c          Up     Normal  15.5 KB         0.00%   85070591730234615865843651857942052865  

リージョン/アベイラビリティ ゾーンを正しく追加したことは確かです。少なくとも、ドキュメントに記載されている内容と一致したと思います。(このリンクの Ec2MultiRegionSnitch を見てください) http://www.datastax.com/docs/1.0/cluster_architecture/replication

西には 2 つのリージョンがあるため (us-west-1 はカリフォルニア リージョン、us-west-2 はオレゴン リージョン)、単にリージョンを us-west と us-east としてリストすることはできないと思います。したがって、単に us-west を配置するだけでは、地域の差別化に成功するとは思いません。

4

1 に答える 1