2

私はデータベースのHAテストを行ってきましたが、サーバーの停止のシミュレーションで問題が見つかりました。

私のテストではDjangoを使用し、これを行います。

  1. データベースに接続する
  2. クエリを実行します
  3. サーバーのネットワークコードを引き出します
  4. 別のクエリを実行します

この時点で、すべてがmysql_ping関数内で無期限にハングします。私のアプリに関する限り、(前のクエリのために)データベースに接続されていますが、サーバーが応答するのに長い時間がかかっているだけです...

このような状況に対処する方法を知っている人はいますか?すでに接続しているため、connect_timeoutが機能しません。read_timeoutはやや鈍器のようです(とにかくDjangoで動作させることすらできません)。

デフォルトのソケットタイムアウトの設定も機能しません(これはMySQLだけでなく、すべてのソケット操作に影響を与えるため、非常に鈍くなります)。

スレッド内でクエリを実行し、Thread.join(timeout)を使用してタイムアウトを実行することを真剣に検討しています。

理論的には、このタイムアウトを実行できれば、再接続ロジックが開始され、データベースの自動フェイルオーバーが完全に機能するはずです(影響を受けるプロセスのkill -9は現在トリックを実行しますが、少し手動です!)。

4

1 に答える 1

0

これは、フロントに面した Web サーバーで read_timeout を設定することで、よりインラインになると思います。django アプリを無期限に停止させる理由はいくつも存在する可能性があります。1 つの特定のケースが見つかりましたが、さらに多くのケースが存在する可能性があります (コード エラー、キャッシュの問題など)。

于 2012-04-17T14:05:50.117 に答える