0

sphinx インデックス ファイルをバックアップしようとすると、バックアップ スクリプトで断続的に問題が発生します。バックアップ コマンドは、多かれ少なかれ、いくつかの除外パターン ( 、、など...)を持つtarすべてのファイルに対する単なるコマンドです。/var/lib/sphinxsearch/dataspltmp

しかし、私が直面している問題は、ほぼ継続的に再インデックスを実行していることです。つまり、tar が操作されているファイルは常に新しいバージョンでローテーションされています。これに対処する計画があります。これは、スフィンクス ロックファイルを使用することです。

  • すべてのインデックスについて:
    • ファイルのロックを取得し.splます (できれば、再インデックスが同時に実行されないようにします)
    • 関連ファイルを追加( .spa.spd.sph.spi.spk、).spm.spp.sps
    • .splファイルのロックを解除する

私の懸念は、ロックファイルがスフィンクスでどのように動作するかについての詳細なドキュメントが見つからないように見えることです。これは、低レベルで Sphinx の並行性と相互作用するツールであり、潜在的な落とし穴がたくさんあります (並行性は私を怖がらせます)。私は疑問に思っています:

  1. スフィンクスでロックファイルがどのように機能するかについて包括的な説明を得ることができる場所はありますか?
  2. スフィンクスをバックアップするための私の計画は正しい計画ですか? 私はグーグルを見回しましたが、これ以上良いものは見つかりませんでしたが、誰かがより良い方法を知っています。
4

1 に答える 1

1

私の知る限り、「ロックファイル」-存在についてのみテストされています。ファイルが存在し、searchd がアクティブにインデックスを提供しています。ファイルは存在しません。インデックスは安全に再作成したり、削除したりできます。

ロックファイルが存在する場合、インデクサーはインデックスの再インデックス化を拒否します。

ただし、 --rotate を指定すると、代わりに新しいバージョンのインデックス (ファイル名に .new. を含む) が作成されます。既存のインデックスに触れないため、ロック ファイルが存在するかどうかは気にしません。

終了したら、searchd へのシグナルを送信します。searchd は、アクティブなインデックスを削除し、インデックス ファイルの名前を変更し、新しいバージョンを提供します (サービスを中断しないように - また、ロックファイルを所定の位置に保持します)。


したがって、インデクサーを停止する唯一の方法 (--rotate を使用すると仮定) は、indexname.new.spl を作成することです。アドバイザリーロックをしても気付かないと思います。

一貫性のあるバックアップを取得するためのより良い、しかしよりトリッキーな方法は、インデクサーから searchd へのシグナルをインターセプトすることです。インデクサーからの sighup をリッスンするプロセスを用意し、バックアップが進行中の場合はバックアップが終了するまで一時停止してから、sighup を searchd に送信します。

(ただし、インデクサーが sighub をインターセプターに送信するには、いくつかの作業が必要になる場合があります。偽の pid ファイルを使用して構成ファイルを作成する必要があります。そのため、インターセプターの pid は検索されません)


もちろん、より大きな問題は、インデックスを簡単に再作成できる場合 (とにかく頻繁に再作成する場合)、わざわざバックアップを作成する必要があるということです。紛失した場合は、再作成できます。

于 2013-08-06T16:14:56.990 に答える