Erlang で記述された複数の Web サーバーを実行 (負荷分散) しており、バックエンド データベースに Mnesia を使用している場合、システム全体を新しいバージョンにアップグレードする最良の方法は何ですか?
2 に答える
Erlang はホット コード ローディングをサポートしていますが、使用しなければならないものではありません。あなたの場合、ロードバランサーから一度に 1 つのノードを削除し、新しいコードを実行して再起動し、ロードバランサーに戻す方が簡単なようです。
稼働中のシステムで新しい Erlang/OTP リリースにホットアップグレードしたい場合は、ノードを停止することも準備しておく必要があります。
しかし、あなたに起こりうる本当の問題は、記憶喪失から来る懸念です. 記憶喪失が何をしたいのかという詳細について、新しい質問をする必要があると思います。スキーマ/テーブルの変更がなく、1 つのノードを停止して後で追加するだけの場合。または、実際に新しいテーブルまたはテーブルに新しい列を導入している場合。Mnesia は、テーブル レプリカを使用してノードを追加および削除する機能を提供します。また、複数のテーブル定義を独自にサポートしますmnesia:transform_table/3,4
。
コードのアップグレードだけを行っている場合は、fab を使用した erlang のリリース処理に関する記事を書きました。この設定により、ノードを再起動することなく、リアルタイムでコードをロードできます。ただし、データベースの変換は、リリースのアップグレードとは別にトリガーされた単一のノードから実行する必要があります。