2

テストのために、3 ノード クラスターを 2 ノードに縮小し、後で 5 ノード クラスターに対して同じことを実行したいと考えました。

ただし、クラスターを縮小するベスト プラクティスに従うと、次のようになります。

  1. すべてのテーブルをバックアップする
  2. すべてのテーブル:alter table xyz set (number_of_replicas=2)以前は 2 未満だった場合
  3. SET GLOBAL PERSISTENT discovery.zen.minimum_master_nodes = <half of the cluster + 1>;
    3a。データ チェックが常に緑色である必要がある場合は、min_availability を「full」に設定します: https://crate.io/docs/reference/configuration.html#graceful-stop
  4. 1 つのノードでグレースフル ストップを開始する
  5. データチェックが緑色になるまで待ちます
  6. 3から繰り返します。
  7. 完了したら、次のノード構成を永続化しますcrate.yml gateway.recover_after_nodes: n discovery.zen.minimum_master_nodes:[![enter image description here][1]][1] (n/2) +1 gateway.expected_nodes: n

クラスターが再び「グリーン」に戻ることはなく、重要なノードのチェックも失敗しています。

ここで何がうまくいかなかったのですか?

crate.yml:

  ... 
  ################################## Discovery ##################################

  # Discovery infrastructure ensures nodes can be found within a cluster
  # and master node is elected. Multicast discovery is the default.

  # Set to ensure a node sees M other master eligible nodes to be considered
  # operational within the cluster. Its recommended to set it to a higher value
  # than 1 when running more than 2 nodes in the cluster.
  #
  # We highly recommend to set the minimum master nodes as follows:
  #   minimum_master_nodes: (N / 2) + 1 where N is the cluster size
  # That will ensure a full recovery of the cluster state.
  #
  discovery.zen.minimum_master_nodes: 2

  # Set the time to wait for ping responses from other nodes when discovering.
  # Set this option to a higher value on a slow or congested network
  # to minimize discovery failures:
  #
  # discovery.zen.ping.timeout: 3s
  #

  # Time a node is waiting for responses from other nodes to a published
  # cluster state.
  #
  # discovery.zen.publish_timeout: 30s

  # Unicast discovery allows to explicitly control which nodes will be used
  # to discover the cluster. It can be used when multicast is not present,
  # or to restrict the cluster communication-wise.
  # For example, Amazon Web Services doesn't support multicast discovery.
  # Therefore, you need to specify the instances you want to connect to a
  # cluster as described in the following steps:
  #
  # 1. Disable multicast discovery (enabled by default):
  #
  discovery.zen.ping.multicast.enabled: false
  #
  # 2. Configure an initial list of master nodes in the cluster
  #    to perform discovery when new nodes (master or data) are started:
  #
  # If you want to debug the discovery process, you can set a logger in
  # 'config/logging.yml' to help you doing so.
  #
  ################################### Gateway ###################################

  # The gateway persists cluster meta data on disk every time the meta data
  # changes. This data is stored persistently across full cluster restarts
  # and recovered after nodes are started again.

  # Defines the number of nodes that need to be started before any cluster
  # state recovery will start.
  #
  gateway.recover_after_nodes: 3

  # Defines the time to wait before starting the recovery once the number
  # of nodes defined in gateway.recover_after_nodes are started.
  #
  #gateway.recover_after_time: 5m

  # Defines how many nodes should be waited for until the cluster state is
  # recovered immediately. The value should be equal to the number of nodes
  # in the cluster.
  #
  gateway.expected_nodes: 3
4

1 に答える 1

1

したがって、重要なことが 2 つあります。

  • レプリカの数は、基本的に、一般的なセットアップで失うことができるノードの数です (2 をお勧めします。これにより、スケールダウンしてプロセスでノードを失っても問題ありません)。
  • この手順は、2 ノードを超えるクラスターに推奨されます ;)

CrateDB は、レプリカとプライマリがノードを共有しないように、クラスター全体にシャードを自動的に分散します。それが不可能な場合 (2 つのノードと 2 つのレプリカを持つ 1 つのプライマリがある場合)、データ チェックは決して「グリーン」に戻りません。クラスターが緑色に戻ります ( alter table mytable set (number_of_replicas = 1))。

重要なノード チェックは、クラスターが更新された crate.yml をまだ受信していないためです。ファイルにはまだ 3 ノード クラスターの構成が含まれているため、このメッセージが表示されます。CrateDB は起動時に expected_nodes のみをロードするため (ランタイム設定ではありません)、スケールダウンを完了するにはクラスター全体の再起動が必要です。ローリング再起動で実行できますが、必ずSET GLOBAL PERSISTENT discovery.zen.minimum_master_nodes = <half of the cluster + 1>;適切に設定してください。そうしないと、コンセンサスが機能しません...

また、リバランスによってクラスターが過負荷になり、誤ってデータが失われるのを避けるために、1 つずつスケールダウンすることをお勧めします。

于 2016-12-08T15:25:53.737 に答える