53717


こんにちは。私はDockerについてはcomposeまでは大体理解していますが、Cassandraについては初心者です。Cassandraを試して見たいと思い以下のように`docker-
compose.yaml`を作成して実行しました。

  * docker-compose.yaml

[code]

    version: '3.3'
    services:
      cassandra1:
        image: cassandra:latest
        container_name: cassandra1
        volumes:
          - "cassandra_data_1:/var/lib/cassandra"
        environment:
          - "CASSANDRA_CLUSTER_NAME=Test Cluster"
          - "CASSANDRA_DC=se1"
          - "CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch"
      cassandra2:
        image: cassandra:latest
        container_name: cassandra2
        volumes:
          - "cassandra_data_2:/var/lib/cassandra"
        environment:
          - "CASSANDRA_SEEDS: cassandra1" -> "CASSANDRA_SEEDS=cassandra1"に変更
          - "CASSANDRA_CLUSTER_NAME=Test Cluster"
          - "CASSANDRA_DC=se1"
          - "CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch"
        depends_on:
          - cassandra1
      cassandra3:
        image: cassandra:latest
        container_name: cassandra3
        volumes:
          - "cassandra_data_3:/var/lib/cassandra"
        environment:
          - "CASSANDRA_SEEDS: cassandra1" -> "CASSANDRA_SEEDS=cassandra1"に変更
          - "CASSANDRA_CLUSTER_NAME=Test Cluster"
          - "CASSANDRA_DC=se1"
          - "CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch"
        depends_on:
          - cassandra1
    
    volumes:
      cassandra_data_1:
      cassandra_data_2:
      cassandra_data_3:
    
[/code]

これを`build`して`up`したら`sudo docker exec -it cassandra1
cqlsh`コマンドでcqlshにアクセスすることができました。

そこまでは良かったのですが、各コンテナに入って`nodetool status`をしたところ以下のような結果になりました。

  * cassandra1

[code]

    Datacenter: se1
    ===============
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  172.21.0.2  103.68 KiB  256          100.0%            02266bf3-adec-4cd8-8ed6-b6ba692fc56b  rack1
    
[/code]

  * cassandra2

[code]

    Datacenter: se1
    ===============
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  172.21.0.3  160.29 KiB  256          100.0%            187d9453-cd2e-49b1-8c88-50e7b3ee3a1c  rack1
    
[/code]

  * cassandra3

[code]

    Datacenter: se1
    ===============
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  172.21.0.4  160.07 KiB  256          100.0%            024a5cc1-72a4-4fea-996e-b365c8643dee  rack1
    
[/code]

出力は三つのノードが表示されて、各ノードで結果は一緒だと思っていたのですがこうなってしまったため各ノードは同クラスタにないのではないかと思っています。これは私の勘違いで同一クラスタにいることになっているのでしょうか？それとも設定ミスでいないのでしょうか？


CC BY-SA 4.0
2019-03-25T06:05:54.110
53707
2019-03-27T08:42:16.393
2019-03-27T08:42:16.393
24870
24870
question
docker docker-compose cassandra
docker-composeによる同一クラスタのCassandraコンテナ群の作成について


`nodetool status` はCassandraクラスターの状態を表示します。  
結果にはクラスターに参加しているノードが一覧表示されるため、一つのノードしか表示されない場合、そのノードのみで構成されたクラスターになっています。(三つのクラスターができている)

Cassandraでクラスターを構成する場合、クラスターに参加するノードが最初に起動したときに接続を行うシードノードを設定します。dockerイメージの場合、そのノードは環境変数
`CASSANDRA_SEEDS` で指定します。(設定ファイル /etc/cassandra/cassandra.yaml に反映されます。)

ポストされている docker-compose.yaml を見ると、環境変数で `"CASSANDRA_SEEDS: cassandra1"`
とされていますが、ここを他の行と同じく `"CASSANDRA_SEEDS=cassandra1"` としてみてください。  
そうすると、 `cassandra1` がシードノードと認識されクラスターが構成されるはずです。


CC BY-SA 4.0
2019-03-25T09:33:55.933
53717
2019-03-25T09:33:55.933
4157
53707
answer