SolrサーバーのIPアドレスは.NETレベルでキャッシュされています。solr.search接続文字列値が静的IPアドレスではなくドメイン名である場合、この動作により接続の問題が発生する可能性があります。ドメインのDNSマッピングが新しいIPアドレスに変更された場合、インスタンスが再起動されるまで、その変更がSitecoreインスタンスによって取得されません。
これは、SearchStaxのディザスタ リカバリを使用する場合によく発生するシナリオです。この記事では、DNSが新しいIPアドレスを指すように更新されたときに、Solrへの接続を再確立する方法を案内します。
DNSが新しいIPアドレスを指すように更新されたときに、Solrへの接続を再確立するには、次のいずれかのオプションを検討してください。
using System; using System.Globalization; using HttpWebAdapters; using CommonServiceLocator; using Microsoft.Extensions.DependencyInjection; using Sitecore; using Sitecore.ContentSearch.SolrProvider.Abstractions; namespace YourNamespace { public class ResettableConnectionHttpWebRequestFactory : IHttpWebRequestFactory { private IHttpWebRequestFactory _httpWebRequestFactory; private readonly int _connectionLeaseTimeout; private static readonly TimeSpan DefaultConnectionLeaseTimeout = TimeSpan.FromMinutes(4); public ResettableConnectionHttpWebRequestFactory(string connectionLeaseTimeout) { _connectionLeaseTimeout = (int)DateUtil.ParseTimeSpan(connectionLeaseTimeout, DefaultConnectionLeaseTimeout, CultureInfo.CurrentCulture) .TotalMilliseconds; } public IHttpWebRequest Create(Uri url) { var request = GetHttpWebRequestFactory().Create(url); request.ServicePoint.ConnectionLeaseTimeout = _connectionLeaseTimeout; return request; } private IHttpWebRequestFactory GetHttpWebRequestFactory() { if (_httpWebRequestFactory != null) return _httpWebRequestFactory; return _httpWebRequestFactory = CreateHttpWebRequestFactory(); } private IHttpWebRequestFactory CreateHttpWebRequestFactory() { IHttpWebRequestFactory resultFactory; var solrAddress = ServiceLocator.Current.GetService<BaseSolrSpecificSettings>().SolrAddress(); if (solrAddress != null && solrAddress.UseBaseAuthentication) { resultFactory = new BasicAuthHttpWebRequestFactory(solrAddress.Username, solrAddress.Password); } else { resultFactory = new HttpWebRequestFactory(); } return resultFactory; } } }備考:Sitecoreで使用される次のアセンブリへの参照を追加します。
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/" xmlns:search="http://www.sitecore.net/xmlconfig/search/"> <sitecore search:require="solr"> <contentSearch> <indexConfigurations> <solrHttpWebRequestFactory type="YourNamespace.ResettableConnectionHttpWebRequestFactory, YourDll"> <param desc="connectionLeaseTimeout">00:03:00</param> </solrHttpWebRequestFactory> </indexConfigurations> </contentSearch> </sitecore> </configuration>