6

接続されたクライアントに関する最小限のデータを格納するレプリケートされた mnesia db を使用して、現在 4 つのノードで実行されている erlang アプリケーションがあります。mnesia レプリケーションは過去にシームレスに動作していました (とにかく私が知る限り) が、クライアントは最近、ノードの 1 つでアプリケーションに関連する ID が欠落していることに気付きました。

これがどのように起こったのかよくわかりません。当時、私たちのネットワークに問題があった可能性があります。多分?しかし、現時点でより緊急なのは、すべてのノードでデータを良好な状態にすることです。既知の正常なノードからレプリケートするよう mnesia に指示する方法はありますか?

4

2 に答える 2

1

正直なところ、既知の正常なノードから非同期の Mnesia をレプリケートする最もクリーンな方法は、不良ノードでアプリケーションをシャットダウンし、すべての Mnesia データベース ファイルを削除してから、次の手順を実行することだと思います。

「悪い」ノード名と Mnesia ディレクトリを使用して Mnesia をスタンドアロンで起動し、既知の正常なノードからテーブルを複製し、Mnesia をシャットダウンする escript を作成します。その escript を不良ノードで実行します。

テーブルをレプリケートし、Mnesia を正常にシャットダウンすることで、ノードはクラスターと同期されます。次に、不良ノードでアプリケーションを起動すると、アプリケーションが結合され、クラスターとの同期が維持されます。

もちろん、この説明には正確な詳細が欠けていますが、それが要点です。これを行うための力ずくではない方法は確かにありますが、大量のデータを複製する必要がない限り、この方法が最も迅速でクリーンな方法だと思います。

于 2015-06-20T03:26:48.697 に答える