この質問は、2 つのデータベースを 2 つの異なるサーバーで同期させる場合の冗長性の実装に関するものです。まず、問題の背景を理解できるように設定について説明します。
2 つの異なるサーバーがあり、2 つの異なる場所で異なる DB タイプの異なるオペレーティング システムを運用しています。
Server 1 (local server):
Windows 2003 Small Business Server OS
MSSQL DB Server
Server-Side Language - C# ASP.NET
Server 2 (website server):
Linux CentOS 6
MySQL DB
Server-Side Language - PHP
サーバー 1 はソフトウェアの内部管理側を実行し、サーバー 2 は外部 Web サイト インターフェイスです (サーバー 2 にはいくつかの管理面 2 があります)。残念ながら、私たちのオフィスではブロードバンドが頻繁に失われています。これは、2 つのサーバー間の通信が常に可能であるとは限らないことを意味します (3G ブロードバンドの冗長性がありますが、動的 DNS が新しい IP アドレスで DNS レコードを更新するのに時間がかかります)。プライマリ ブロードバンドを失います)。これが、各サーバーに独自の DB が必要になった理由です。これらの 2 つのサイドの一方または他方を完全にオフラインにすることはできないためです。
そのため、両方のサーバーに独自のローカルデータベースを持ち、変更を他のサーバーにも適用するように、両方のサーバーに組み込みました。他のサーバーに接続できない場合は、クエリをローカル DB に保存して、他のサーバーが再び使用可能になったときにクエリを適用できるようにします。これにより、次の 2 つの問題が残ります。
このようなデータベース間の同期に関する一般的なポイント - サーバーの再接続時に適用される競合するクエリを回避するにはどうすればよいですか? 私の言いたいことの説明については、以下の例 1 を参照してください。DNS レコードが更新されるまでの数分間だけ接続が失われるため、この問題は最小限に抑えられます。
バックログされたクエリを適用するとき、バックログされたクエリを解決するためにスクリプトを手動で起動するのではなく、スクリプトがクエリを自動的に適用するようにしたいと考えています。ただし、バックログでバックログされたクエリをまだ適用している間にユーザーがページから移動した場合、これがどのような影響を与えるかはわかりません。
例 1:
Web サイト側 (サーバー 2) のユーザーがメール アドレスや電話番号などを変更し、管理側 (サーバー 1) のユーザーがそのユーザーの詳細を変更した場合、これら 2 つのクエリの情報は矛盾します。サーバーが再接続すると、2 つのクエリが他のサーバーに適用されますが、エントリはまだ同期していません。
PS申し訳ありませんが、質問はとても長いです。