Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Contrail 設定データベースのバックアップと復元

このドキュメントでは、Juju Charms を介して Canonical Openstack で導入された Contrail Networking の Contrail 設定データベース(Cassandra と Zookeeper)をバックアップおよび復元する方法について説明します。

バックアップと復元の手順は、同じ Contrail Networking リリースを実行しているノードに対して完了する必要があります。この手順は、Contrail Networking データベースのみをバックアップするために使用します。オーケストレーション システム データベースをバックアップする手順は含まれていません。

注意:

Contrail データベースの状態は OpenStack データベースなどの他のシステム データベースと関連付けられるため、データベースのバックアップはすべてのシステムで一貫している必要があります。バックアップ操作を実行する前に、ノースバウンド API に関連付けられているデータベースの変更をすべてのシステムで停止する必要があります。たとえば、ロード バランサー レベル (HAproxy など) でノースバウンド API の外部 VIP をブロックできます。

次の手順は、Ubuntu 16.04 LTS(Xenial Xerus)で実行されているJujuバージョン2.7およびバージョン2.3.7でテストされました。

さらに、この手順には、Juju マシン番号 (1、2、3) の例が含まれています。Jujuマシン番号に置き換える必要がありますJujuマシン番号は、ホストで次のコマンドを実行することで識別できます。

構成データベースのバックアップ

手順に従って、構成データベースをバックアップします。

すべてのコマンドは、特に明記されていない限り、Jujuクライアントがインストールされているホストで実行されます。

手記:

db_manage.py スクリプトはディザスタリカバリスクリプトです。このスクリプトの実行後にエラーが発生した場合は、ジュニパーネットワークスのサポートにお問い合わせください。

  1. スクリプト db_manage.py 更新します。
  2. スクリプト db_json_exim.py 更新します。

    スクリプト db_json_exim.py 最新バージョンには、python futureライブラリが必要です。

  3. contrail-controller アプリケーションの Juju エージェントを停止します。

    各コントローラーノードで、 juju-status コマンドを実行して、エージェントが 失われた 状態であることを確認します。

  4. すべてのノードで Contrail 設定サービスを停止します。
  5. contrailコントローラ ノードのステータスを確認します。 非アクティブ 状態でなければなりません。
  6. コントローラノードの 1 つで Contrail 設定 DB の整合性を確認します。
  7. Contrail 設定 DB で repair コマンドを実行して、データを同期します。
  8. データベースの状態を保存します。これは、後でプロシージャ後のデータベースの状態と比較するために必要になる場合があります。
  9. コントローラノードの 1 つにログインし、Contrail Config DB のバックアップを取ります。

    次のいずれかの方法に従うことができます。

    • スクリプトdb_json_exim.pyデフォルトでバックアップを取ります。

    • 手順 2でダウンロードしたdb_json_exim.pyスクリプトでバックアップを取ります。

  10. データベース バックアップ ファイルをコンテナーからホストにコピーします。
  11. すべてのコントローラノードで Contrail 設定サービスを再起動します。

    各コントローラーノードで contrail-status コマンドを実行して、サービスが アクティブ または バックアップ 状態であることを確認します。

  12. Contrail-Controller アプリケーションの Juju エージェントを再起動します。

    Jujuクライアントが設定されているマシンから juju status コマンドを実行します。Jujuエージェントが アクティブ 状態であることを確認します。

  13. db dump json ファイルの論理構造を確認します。空でないことを確認してください。

    ノード 1 には db ダンプが含まれています。

    db ダンプ ファイルに、環境の UUID と VM の IP アドレスの正しい構成が含まれていることを確認します。

    手記:

    環境に読み込まれた VM がない場合、上記のコマンドでは出力は表示されません。

構成データベースの復元

手順に従って、構成データベースを復元します。

  1. contrail-controller、contrail-analytics、contrail-analyticsdb アプリケーションの Juju エージェントを停止します。
  2. すべてのコントローラノードで Contrail サービスを停止します。
  3. 各コントローラーノードで contrail-status コマンドを実行し、サービスが 非アクティブな 状態であることを確認します。
  4. すべてのコントローラーで Zookeeper データディレクトリのバックアップを取ります。
  5. コマンドを使用して、Zookeeper インスタンスの 1 つから現在のデータを消去 rmr
  6. すべてのコントローラーで Zookeeper サービスを停止します。
  7. すべてのコントローラーから Zookeeper データディレクトリーの内容をクリーンアップします。
  8. すべてのコントローラから Cassandra データ ディレクトリをバックアップします。
  9. すべてのコントローラから Cassandra データ ディレクトリの内容をクリーンアップします。

    上記のコマンドを実行すると、古いパスワードが消去されます。

  10. 各コントローラのCassandra構成を一度に1つずつ変更して、パスワードをリセットします。

    /etc/cassandra/cassandra.yamlファイルのauthenticator変数を編集します。

    authenticator: PasswordAuthenticatorauthenticator: AllowAllAuthenticatorに置き換えてください。

  11. db * スクリプトなどの古い Contrail サービスが実行されていないことを確認します。古いサービスを見つけたら、それらを強制終了します。

    Docker コンテナの外部にある Contrail ノードで次のコマンドを実行します。

  12. すべてのコントローラで Contrail-Database と Zookeeper サービスを再起動します。
  13. Zookeeper サービスのステータスを確認します。
  14. Cassandra サービスの状態を確認します。

    nodetool statusコマンドの詳細については、https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/tools/toolsStatus.html を参照してください。

  15. 構成 DB のバックアップをコピーします。
  16. 構成 DB を復元します。
    1. db を復元するための一時的な contrail-api.conf ファイルを準備します。
    2. contrail-api.conf ファイルのcassandra_password cassandra_userを変更します。
      juju ssh 1 sudo docker exec -it contrail-controller vim /tmp/contrail-api-dbrestore.conf
    3. /tmp/db-dump/ db-dump.jsonファイルからデータベースをインポートします。

      次のいずれかの方法に従うことができます。

      • デフォルトでdb_json_exim.pyスクリプトでデータベースをインポートします。

      • ダウンロードしたdb_json_exim.pyスクリプトでデータベースをインポートします。

    エラーが発生した場合は、手順 5 から構成データベースを復元する手順を繰り返します。

  17. ノード間で Cassandra データを同期します。
  18. 各コントローラのCassandra構成を一度に1つずつ変更して、パスワードをリセットします。

    /etc/cassandra/cassandra.yamlファイルのauthenticator変数を編集します。

    juju ssh <node> sudo docker exec contrail-controller systemctl restart contrail-database

    authenticator: AllowAllAuthenticatorauthenticator: PasswordAuthenticatorに置き換えてください。

  19. 任意のコントローラノードで Contrail ユーザーを作成します。
  20. Contrail ユーザーが他のコントローラノードで使用可能かどうかを確認します。

    これらのノードで作成されたContrailユーザーが表示されない場合は、すべてのコントローラーノードで system_auth キースペースのレプリケーション係数を確認してください。

  21. レプリケーション係数は、次のいずれかの方法で確認します。
    • nodetoolコマンドを使用する。

      出力では、各ノードがトークンとパーティションを 100% 所有していることを示す必要があります。

    • Cassandra db.

      system_auth パラメーターは 3 replication_factorでなければなりません。

      replication_factor3 に設定されていない場合は、次のコマンドを実行します。

  22. すべてのコントローラノードで Contrail サービスを再起動します。
  23. 各コントローラーノードで contrail-status コマンドを入力して、サービスが アクティブ 状態または バックアップ 状態であることを確認します。
  24. contrail-controller、contrail-analytics、contrail-analyticsdbアプリケーション用のJujuエージェントを再起動します。
  25. Zookeeper の状態を確認します。
  26. すべてのコントローラーノードのログファイルにエラーがないか確認します。
  27. db_manage.pyスクリプトを使用してデータベースを確認します。