Consul-failover-events

提供:Dev Guides
移動先:案内検索

Consul-フェールオーバーイベント

この章では、Consulのフェイルオーバーイベントについて学習します。 これは、次の機能の助けを借りて行われます-

  • 単一クラスター障害
  • ジェプセン試験
  • 複数のクラスター障害
  • スナップショットを撮る

これらのそれぞれを詳細に理解しましょう。

単一クラスター障害

単一のクラスター障害では、データセンターの1つに配置されたクラスターが障害を開始します。 すべてのケースのシナリオで、フェイルオーバーの場合、システムはそれを防止できるだけでなく、信頼できるバックアップも確保することが重要です。 Consul Failoverイベントを防ぐために、Consul-alertsと呼ばれるものを使用します。 メインプロジェクトは、https://github.com/AcalephStorage/consul-alertsにあります。

Consul-alertsは、Consul Healthチェックに基づいて通知とリマインダーを送信するための可用性の高いデーモンです。 このプロジェクトは、localhost:9000でデーモンとAPIを実行し、デフォルトのデータセンター(dc1)でローカルのconsulエージェント(localhost:8500)に接続します。

プロジェクトを開始するには2つの方法があります。 最初の方法は、 GO を使用してインストールすることです。 GOがインストールおよび構成されているユーザーの場合、以下の手順に従うことができます-

$ go get github.com/AcalephStorage/consul-alerts
$ go install
$ consul-alerts start

最後のコマンドは、consul-alert、datacenterオプション、consul-aclトークンなどのデフォルトポートを簡単にオーバーライドするために使用できます。 コマンドは以下のように書くこともできます-

$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500
--consul-dc = dc1 --consul-acl-token = ""

2番目の方法では、ユーザーがDockerを使用します。 どちらの方法も、さまざまなシナリオで等しく役立ちます。 Docker上でConsul-alertsを使用するには、次のコマンドを使用してDocker Hubからイメージをプルします。

$ docker pull acaleph/consul-alerts

Consul-Alerts

Dockerメソッドでは、次の3つのオプションを検討できます-

  • コンテナ自体に組み込まれているConsul Agentを使用します。
  • 別のDocker Container上で実行されているConsul Agentを使用します。
  • Consul-alertsを使用して、リモートConsulインスタンスをリンクします。

これらの両方について詳細に説明します。

コンテナ自体に組み込まれているConsul Agentを使用する

次のコマンドを使用して、consulエージェントを起動しましょう-

$ docker run -ti \
   --rm -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   --entrypoint =/bin/consul \
   acaleph/consul-alerts \
   agent -data-dir/data -server -bootstrap -client = 0.0.0.0

ここでは、フラグ*-entrypoint で言及されているように、Consulの *entrypoint をオーバーライドしています。 それに加えて、*-pフラグを使用して使用されるポート、フラグ-data-dirを使用するデータディレクトリ/data *、および0.0.0.0としてクライアントに言及することにより、クライアントをブートストラップします。

エントリポイント

新しいターミナルウィンドウで、consul-alertsオプションを開始します。

$ docker exec -ti consul-alerts/bin/consul-alerts start --alertaddr = 0.0.0.0:9000
--log-level = info --watch-events --watch-checks

ここでは、上記の手順で、consul-alertsを実行して、インタラクティブモードで起動します。 アラートアドレスポートは9000と記載されています。 ウォッチは、執政官のチェックとともに、執政官エージェントが有効になっているかどうかをチェックします。

アラートオプション

執政官アラートが簡単に開始され、執政官エージェントが追加された新しいヘルスチェックが登録されていることが明確にわかります。 データセンターはdc1とみなされ、ユーザーに応じて変更できます。

別のDocker Container上で実行されているConsul Agentの使用

ここでは、Dockerコンテナ上で実行される任意のタイプの領収書イメージを使用できます。 consul-alertsイメージを使用して、consulコンテナをconsul-alertsコンテナに簡単にリンクできます。 これは*-linkフラグ*を使用して行われます。

-次のコマンドを使用する前に、consulコンテナーが別の端末で既に実行されていることを確認してください。

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   --link consul:consul \
   acaleph/consul-alerts start \
   --consul-addr=consul:8500 \
   --log-level = info --watch-events --watch-checks

Consul-alertsを使用してリモートConsulインスタンスをリンクする

ここで、次のコマンドを使用して、Consul-alertsを使用して、リモートのconsulインスタンスを介してリンクする必要があります。

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   acaleph/consul-alerts start \
   --consul-addr = remote-consul-server.domain.tdl:8500 \
   --log-level = info --watch-events --watch-checks

ジェプセン試験

Jespenは、任意のシステムで部分的な耐性とネットワークをテストするために作成されたツールです。 システム上でいくつかのランダムな操作を作成して、システムをテストします。 JepsenはClojure で書かれています。 残念ながら、デモでは、Jepsenのテストにはデータベースシステムとの膨大なレベルのクラスター形成が必要であるため、ここではカバーしません。

Jepsenは、テスト対象のデータストアを5つの異なるホストにセットアップすることで機能します。 テスト対象のデータストア用のクライアントを作成し、5つのノードのそれぞれにリクエストを送信するよう指示します。 また、「Nemesis」と呼ばれる特別な一連のクライアントを作成します。これは、 iptables を使用してノード間のリンクを切断するなど、クラスターに大混乱をもたらします。 次に、ネットワークのパーティション分割と修復を交互に行いながら、異なるノードに対して同時にリクエストを作成します。

テスト実行の最後に、クラスターを修復し、クラスターが回復するまで待機してから、システムの中間状態と最終状態が期待どおりかどうかを確認します。 こちらからの抜粋がいくつかあります。

Jepsenテストの詳細については、https://aphyr.com/posts/281-call-me-maybe-carly-rae-jepsen-and-the-perils-of-network-partitions [こちら]をご覧ください。

複数のクラスター障害

複数クラスターフェールオーバーイベント中に、複数のデータセンターに展開されたクラスターは、お客様がサポートしているサービスをサポートできません。 Consulでは、このような状態の1つが発生したときに、Consulがそのような状態のサービスを有効にするのに役立つ機能を備えていることを確認できます。

これを実現するために、Consulを1つのクラスターから複数のクラスターに複製できるようにするプロジェクトを検討します。 このプロジェクトは、consul-replicateデーモンを使用して、複数のConsulデータセンター間でK/Vペアを複製する方法を提供します。 このHashicorpプロジェクトは、https://github.com/hashicorp/consul-replicateで表示できます。 このプロジェクトを試してみるための前提条件のいくつかが含まれます-

  • ゴラン
  • 港湾労働者
  • 領事
  • Git

私たちは次のコマンドで始めましょう-

-次のコマンドを実行する前に、Gitがマシンに適切にインストールおよび構成されていることを確認してください。

*$ git clone* -https://github.com/hashicorp/consul-replicate.git

出力は、次のスクリーンショットのようになります。

Git Clone

$ cd consul-replicate
$ make

出力は、次のスクリーンショットのようになります。

複製

バイナリのビルドに問題がある場合は、次のコマンドを使用してDockerイメージを手動でプルすることもできます-

$ docker pull library/golang:1.7.4

上記のコマンドは、bin/consul-replicateを作成し、バイナリとして呼び出すことができます。 次の表は、それがカバーするサブコマンドの完全なリストを示しています-

Option Description
auth The basic authentication username (and optional password), separated by a colon. There is no default value.
consul* The location of the consul instance to query (may be an IP address or FQDN) with port.
max-stale The maximum staleness of a query. If specified, Consule will distribute work among all servers instead of just the leader. The default value is 0 (none).
ssl Use HTTPS while talking to Consul. Requires the consule server to be configured to server secure connections. The default value is false.
ssl-verify Verify certificates when connecting via SSL. This requires the use of -ssl. The default value is true.
syslog Send log output to syslog (in addition to stdout and stderr). The default value is false
syslog-facility The facility to use when sending to syslog. This requires the use of -syslog. The default is LOCAL
token The Consul API token. There is no default value.
prefix* The source prefix including the, with options destination prefix, separated by a colon(:). This option is additive and may be specified multiple times for multiple prefixes to replicate.
exclude A prefix to exclude during replication. This option is additive and may be specified multiple times for multiple prefixes to exclude.
wait The minium(:maximum) to wait for stability before replicating, separated by a colon(:). If the optional maximum value is omitted, it is assumed to be 4x the required minimum value. There is no default value.
retry The amount to time to wait if Consule returns an error when communicating with the API. The default value is 5 seconds.
config The path to a configuration file or directory of configuration files on disk, relative to the current working directory. Values specified on the CLI take precedence over values specified in the configuration file. There is no default value.
log-level The log level for output. This applies to the stdout/stderr logging as well as syslog logging (if eneabled). Valid values are "debug", "info", "warn, and "err". The default value is "warn".
once Run Consule Replicate once and exit (as opposed to the default behavior of daemon). (CLI-only)
version Output version information and quit. (CLI-only)

スナップショットを撮る

スナップショットは、バックアップの場合にConsulクラスターを管理するための不可欠で重要な部分です。 デフォルトでは、Consulはconsulクラスターのスナップショットを保存する方法を提供します。 Consulは、consulを使用してスナップショットを作成できる4つのサブコマンドを提供します。

  • 領事スナップショット保存
  • Consulスナップショットエージェント
  • 領事スナップショット検査
  • Consul snapshot restore

これらのそれぞれを詳細に理解しましょう。

領事スナップショット保存

このコマンドは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、ACLを含むConsulサーバーの状態のアトミックなポイントインタイムスナップショットを取得するように設定されています。 スナップショットは上記のファイル名で保存されます。

$ consul snapshot save <name-of-the-file>.snap

出力は、次のスクリーンショットのようになります。

スナップショット保存

現在のディレクトリ内のファイルの存在を確認するには、現在のディレクトリで実行して確認してください。 非リーダーノードの場合、次のコマンドを実行してください-

$ consul snapshot save -stale <name-of-file>.snap

Consul Snapshot Agent

このサブコマンドは、Consulサーバーの状態のスナップショットを取得してローカルに保存するか、オプションのリモートストレージサービスにプッシュするプロセスを開始します。

スナップショットエージェント

Consul Snapshot Inspect

キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含むConsulサーバーの状態の特定の時点のスナップショットを検査するために使用されます。 コマンドは次のように実行できます-

-次のコマンドは、スナップショットが保存されているディレクトリでのみ実行できることに注意してください。

$ consul snapshot save <name-of-the-file>.snap

出力は、次のスクリーンショットのようになります。

スナップショット検査

Consul Snapshot Restore

snapshot restoreコマンドは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含むConsulサーバーの状態の特定の時点のスナップショットを復元するために使用されます。 スナップショットは、保存されたバックアップファイルから読み取られます。

注意-次のコマンドは、スナップショットが保存されているディレクトリでのみ実行できることに注意してください。

$ consul snapshot restore <name-of-the-file>.snap

出力は、次のスクリーンショットのようになります。

スナップショット復元

AWSでConsulを使用している場合、このプロジェクトは時間を節約するのに役立ちます-https://github.com/pshima/consul-snapshot。