2

MySQLを使用してデータを保存するWebアプリがあります。Webアプリは内部にあります(インターネット経由では利用できません)。

このアプリケーションを3つ(場合によってはそれ以上)の場所(ブランチオフィス)に展開する必要があります。データを同期できる必要があります(ある場所で作成されたエントリは、他のブランチの場所で利用できます)。

要件

  • Webアプリのローカルインスタンス+mysqlデータベース
  • 各場所はローカルで読み取りと書き込みを行います/独自のネットワーク上にあります
  • データベースは1日1回(おそらくSSH経由のスクリプトを介して)同期されるため、各場所に同じデータがあります。

これを(これまでのところ)理解できた唯一の方法は、UUID(一意の識別子)を作成し、各行をソースビット(発信元の場所用)と同期ビット(new = 0、synced = 1)でエンコードすることです。毎晩各場所にSSHで接続し、各場所に= my source and synced = 0の行を追加するスクリプトを作成します...これは野蛮で、あまりエレガント/信頼性がないことを認識していますが、他に何をすべきかわかりません。

クライアントは、インターネット接続が失敗した場合、アプリがローカルで機能できるようにしたいが、他のブランチ間で(夜間のスクリプトなどを介して)同期できるようにしたいと考えています。私が言ったように、すでに合計3つの場所があり、おそらく今年後半にはさらに多くの場所が来るでしょう。

アーキテクチャに関するアドバイスをいただければ幸いです。

PS。セキュリティ上の理由から、データベースをインターネットに接続していません。しかし、すべての提案を受け入れます。

ありがとう。

4

1 に答える 1

1

クライアントは、このようなアーキテクチャの決定により、追加のハードウェア、開発、およびメンテナンスのコストに多額の費用をかける可能性があります。ミッションクリティカルなデータ入力のニーズがない限り、すべてのブランチの場所でハードウェアスタックを複製することは少しおかしな期待かもしれません。

そうは言っても、サーバー間でデータを複製するには、オープンインターネットを介してデータを移動する必要があります。ただし、もちろん、これを設定する独自のVPNがない場合は除きます。データを移行/マージするための毎日のプロセスを実行しようとすることは、頭の中で危険信号であり、まったく初心者ではないはずです。これは非常に複雑な問題です。必要になる可能性が高いのは、ある種のマスターマスターデータベースレプリケーションクラスターです。幸いなことに、MySQLはこれを行う機能を提供します。残念ながら、設定して適切に設定するのは複雑な場合があります。ここでこの質問をする必要がある場合は、おそらく少し難しいかもしれません。

データベースのセキュリティに関しては、サーバーを保護するための適切な予防策を講じている限り、MySQLデータベースをインターネット上でホストすることを心配する必要はありません。おそらくネットワークレベルで開始し、ポート3306(およびSSHアクセスの場合は22)へのアクセスと、WebアプリケーションサーバーのIPアドレスへのアクセスのみを許可します。これには、アクセス元の特定の既知のホストからのトラフィックのみを受け入れるようにMySQLユーザーアカウントを設定することも含まれます。

于 2013-03-26T22:02:56.257 に答える