Consul-failover-events
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
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
出力は、次のスクリーンショットのようになります。
$ 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。