領事-フェイルオーバーイベント
この章では、領事館でのフェイルオーバーイベントについて学習します。これは、次の機能の助けを借りて行われます-
- 単一クラスターの障害
- ジェプセンテスト
- 複数のクラスター障害
- スナップショットを撮る
これらのそれぞれを詳細に理解しましょう。
単一クラスターの障害
単一クラスターの障害では、データセンターの1つに配置されたクラスターが障害を開始します。すべての場合のシナリオで、フェイルオーバーの場合にシステムがそれを防ぐだけでなく、信頼できるバックアップも持っていることを確認することが重要です。領事フェイルオーバーイベントを防ぐために、領事アラートと呼ばれるものを使用します。メインプロジェクトは次の場所にあります–https://github.com/AcalephStorage/consul-alerts。
Consul-alertsは、ConsulHealthチェックに基づいて通知とリマインダーを送信するための高可用性デーモンです。このプロジェクトは、localhost:9000でデーモンとAPIを実行し、デフォルトのデータセンター(dc1)を使用してローカル領事エージェント(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を使用する場合は、次のコマンドを使用してDockerHubからイメージをプルします。
$ docker pull acaleph/consul-alerts
Dockerメソッドでは、次の3つのオプションを検討できます。
- コンテナ自体に組み込まれているConsulAgentを使用します。
- 別のDockerコンテナ上で実行されているConsulAgentを使用する。
- 領事アラートを使用して、リモート領事インスタンスを介してリンクします。
ここで、これらの両方について詳しく説明します。
コンテナ自体に組み込まれているConsulAgentを使用する
次のコマンドを使用して領事エージェントを起動しましょう-
$ 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 旗で言及されている領事のために --entrypoint。それに加えて、を使用して使用されるポートに言及することにより、クライアントをブートストラップしています-p flag, data directory /data フラグ-data-dirとclientを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コンテナ上で実行されているConsulAgentの使用
ここでは、任意のタイプの領事イメージを使用して、Dockerコンテナー上で実行できます。consul-alertsイメージを使用すると、consul-alertsコンテナーをconsul-alertsコンテナーに簡単にリンクできます。これは、--link flag。
Note −次のコマンドを使用する前に、領事コンテナがすでに別の端末で実行されていることを確認してください。
$ 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 is written in Clojure。残念ながら、デモの場合、Jepsenテストでは、データベースシステムを使用した膨大なレベルのクラスター形成が必要であるため、ここで説明する範囲外です。
Jepsenは、5つの異なるホストでテスト対象のデータストアをセットアップすることで機能します。テスト対象のデータストア用にクライアントを作成し、5つのノードのそれぞれにリクエストを送信するように指示します。また、「ネメシス」と呼ばれる特別な一連のクライアントを作成します。これは、次を使用してノード間のリンクを切断するように、クラスターに大混乱をもたらします。iptables。次に、ネットワークを交互に分割および修復しながら、異なるノードに対して同時に要求を行います。
テスト実行の最後に、クラスターを修復し、クラスターが回復するのを待ってから、システムの中間状態と最終状態が期待どおりであるかどうかを確認します。ここからいくつかの抜粋が取られています。
Jepsen Testingの詳細については、こちらを確認してください。
複数のクラスター障害
複数クラスターフェイルオーバーイベント中に、複数のデータセンターにデプロイされたクラスターは、顧客にサポートされているサービスをサポートできません。領事は、そのような状況の1つが発生した場合に、そのような状況でサービスを有効にするのに役立つ機能を確実に提供できるようにします。
これを実現するために、Consulを1つのクラスターから複数のクラスターに複製できるようにするためのプロジェクトを検討します。このプロジェクトは、consul-replicateデーモンを使用して複数のConsulデータセンター間でK / Vペアを複製する方法を提供します。このHashicorpプロジェクトは-で見ることができますhttps://github.com/hashicorp/consul-replicate。このプロジェクトを試すための前提条件には、次のものがあります。
- Golang
- Docker
- Consul
- Git
次のコマンドから始めましょう-
Note −次のコマンドを実行する前に、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を作成します。次の表は、対象となるサブコマンドの完全なリストを示しています。
オプション | 説明 |
---|---|
auth | コロンで区切られた基本認証ユーザー名(およびオプションのパスワード)。デフォルト値はありません。 |
領事* | ポートを使用してクエリを実行する領事インスタンスの場所(IPアドレスまたはFQDNの場合があります)。 |
max-stale | クエリの最大の古さ。指定した場合、領事館はリーダーだけでなくすべてのサーバーに作業を分散します。デフォルト値は0(なし)です。 |
ssl | 領事と話している間はHTTPSを使用してください。領事サーバーは、サーバーの安全な接続をサーバーとして構成する必要があります。デフォルト値はfalseです。 |
ssl-verify | SSL経由で接続するときに証明書を確認します。これには、-sslを使用する必要があります。デフォルト値はtrueです。 |
Syslog | ログ出力をsyslogに送信します(stdoutとstderrに加えて)。デフォルト値はfalseです |
Syslog-ファシリティ | Syslogに送信するときに使用する機能。これには、-syslogを使用する必要があります。デフォルトはLOCALです |
トークン | 領事APIトークン。デフォルト値はありません。 |
プレフィックス* | コロンで区切られた、オプションの宛先プレフィックスを含むソースプレフィックス。:)。このオプションは付加的であり、複数のプレフィックスを複製するために複数回指定できます。 |
除外する | レプリケーション中に除外するプレフィックス。このオプションは追加機能であり、複数のプレフィックスを除外するために複数回指定できます。 |
待つ | コロン(で区切られた、複製する前に安定性を待つminium(:maximum):)。オプションの最大値を省略した場合、必要な最小値の4倍と見なされます。デフォルト値はありません。 |
リトライ | ConsuleがAPIとの通信時にエラーを返した場合に待機する時間。デフォルト値は5秒です。 |
構成 | 現在の作業ディレクトリを基準にした、ディスク上の構成ファイルまたは構成ファイルのディレクトリへのパス。CLIで指定された値は、構成ファイルで指定された値よりも優先されます。デフォルト値はありません。 |
ログレベル | 出力のログレベル。これは、stdout / stderrロギングとsyslogロギング(有効な場合)に適用されます。有効な値は「debug」、「info」、「warn」、および「err」です。デフォルト値は「warn」です。 |
一度 | Consule Replicateを1回実行して終了します(デーモンのデフォルトの動作とは対照的です)。(CLIのみ) |
バージョン | バージョン情報を出力して終了します。(CLIのみ) |
スナップショットを撮る
スナップショットは、バックアップの場合にConsulクラスターを管理するために不可欠で重要な部分です。デフォルトでは、領事は領事クラスターのスナップショットを保存する方法を提供します。Consulは、consulを使用してスナップショットを作成するために使用できる4つの個別のサブコマンドを提供します。
- 領事スナップショット保存
- スナップショットエージェント領事
- 領事スナップショット検査
- 領事スナップショットの復元
これらのそれぞれを詳細に理解しましょう。
領事スナップショット保存
このコマンドは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含む、Consulサーバーの状態のアトミックなポイントインタイムスナップショットを取得するように設定されています。スナップショットは、指定されたファイル名で保存されます。
$ consul snapshot save <name-of-the-file>.snap
出力は、次のスクリーンショットに示すようになります。
現在のディレクトリにファイルが存在するかどうかを確認するには、現在のディレクトリで実行して確認してください。非リーダーノードの場合は、以下のコマンドを実行してください。
$ consul snapshot save -stale <name-of-file>.snap
スナップショットエージェント領事
このサブコマンドは、Consulサーバーの状態のスナップショットを取得してローカルに保存するプロセスを開始するか、オプションのリモートストレージサービスにプッシュします。
領事スナップショット検査
これは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含む、Consulサーバーの状態のポイントインタイムスナップショットを検査するために使用されます。コマンドは次のように実行できます-
Note −次のコマンドは、スナップショットが保存されているディレクトリでのみ実行できることに注意してください。
$ consul snapshot save <name-of-the-file>.snap
出力は、次のスクリーンショットに示すようになります。
領事スナップショットの復元
スナップショット復元コマンドは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含むConsulサーバーの状態のポイントインタイムスナップショットを復元するために使用されます。スナップショットは、保存されたバックアップファイルから読み取られます。
Note −次のコマンドは、スナップショットが保存されているディレクトリでのみ実行できることに注意してください。
$ consul snapshot restore <name-of-the-file>.snap
出力は、次のスクリーンショットに示すようになります。
AWSでConsulに取り組んでいる場合、このプロジェクトは時間を節約するのに役立つ可能性があります- https://github.com/pshima/consul-snapshot。