クラスター化された Magento 環境で Apache Solr を適切に実装するにはどうすればよいですか?

クラスター化された Magento 環境で Apache Solr を適切に実装するにはどうすればよいですか?

現在、クラスター化された Apache Web サーバーのペアで実行されている Magento Enterprise 1.12 インストールを使用しています。両方の Web サーバーは、マスター マスター MySQL 構成でクラスター化された別々のサーバー上の独自のデータベースからデータを取得します。

問題は、Solr 3.6.1 を導入しようとしているのですが、クラスターに適切に追加する方法がよくわからないことです。Solr のインスタンスを 1 つ (おそらく別のサーバー) セットアップして、両方のサイトをそのインスタンスにポイントすればよいのでしょうか。それとも、両方のサーバーに Solr のスタンドアロン インスタンスが必要ですか。何らかの方法で Solr のインスタンスを 2 つ一緒に構成する必要がありますか。十分な情報を提供できなかった場合はお詫び申し上げます。

答え1

サーバーの 1 つに Solr を設定し、Magento 管理者構成でSolr Server Hostnameこのサーバーのアドレスとして構成する必要があります (別のドメイン名がない場合は、そこに IP アドレスを挿入します)。Mysql レプリケーションがあるため、両方とも同じ構成が使用されます。

ホスト名とポート (8080 など) が 2 番目のサーバー内からアクセスできることを確認してください。

答え2

Slayer が基本的な答えを出しました。Solr run は Java アプリであり、getty などの Java Web サーバーで実行されます。Apache がポート 80 で実行されていると仮定すると、両方の Web サーバーがその Solr サーバーと通信できるようにネットワークを構成する必要があります (Magento 構成の実際の IP アドレスを使用し、明らかに 127.0.0.1 ではありません)。ただし、ネットワークの外部からは通信できません。

さらに、セキュリティとして httpauth 認証ではなくこれを使用します。これは、動作しない問題が発生したためです。基本的に、Magento は一部のオペレーション中に資格情報なしで ping を送信して失敗するため、資格情報を含む実際のクエリは送信されません。

わかりました。もう 1 つの重要なポイントは、「フルテキスト インデックス」です。

スタックオーバーフローに長い回答がありますhttps://stackoverflow.com/questions/11667728/magento-1-12-and-solr-3-6-no-proper-results-and-no-spell-suggestions/12984270#12984270しかし、簡潔に述べたいと思います。

シェルから php shell/indexer.php --reindex-all catalogsearch_fulltext 経由でフルテキスト インデクサーを実行すると、正しく動作しません。イベントは発生しません。そのため、UI から実行してください。ただし、製品の数によっては操作に 4 時間以上かかるため、これは問題です。簡単な解決策は、フルテキスト インデクサー機能の PHP タイムアウトを微調整することです。明らかに、Apache のタイムアウトは短くする必要があります。タイムアウトは短くてもかまいませんが、PHP タイムアウトが長い場合は、Apache がデッド ページを表示しても実行を継続する必要があります。

また、最新の Magento は、フルテキスト インデクサー コードをトランザクションにラップします。その結果、実行中にサイト上で検索すると、catalogsearch_query テーブルで「wait lock timeout」が返されます。これをラップしているトランザクションを削除したところ、問題は解決しました。

関連情報