本番稼働中のSolrのスキーマを変更する手順書を作りながら、「向き先変えたりとかいろいろ面倒だなぁ」ってグチったところ、「それ、レプリケーションできるみたいよ」という話を聞いたので試してみました。
構成
サーバ構成としてはだいたいこんな感じです。
[master]----[slave1] <---[AP1][AP2]
+---[slave2] <---[AP3]
Solrは4.10.3でスレーブが2台。
APは3台あって、AP1とAP2がslave1を参照。AP3がslave2を参照している状態。
レプリケーションしてくれるならマスターのスキーマ変更して再起動して、スレーブ向いてるAPをマスターに向けてスレーブの設定変更して再起動して・・・という面倒な手順を踏まなくてよくなります。
マスター側の設定
マスター側の設定は以下のようにしました。
solrconfig.xml
<requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" >
<lst name="master">
<str name="replicateAfter">commit</str>
<str name="replicateAfter">startup</str>
<str name="replicateAfter">optimize</str>
<str name="confFiles">schema.xml,data-config.xml</str>
</lst>
</requestHandler>
これでSolr再起動。
スレーブ側の設定
スレーブ側の設定は特にいじってません。
レプリケーションされることを確認
マスター側のschema.xmlとdata-config.xmlにフィールドを追加して、Solr再起動。
そしてフルインポートをかけたところ無事にスレーブ側のschema.xmlとdata-config.xmlにも設定が反映され、インデックスも無事に作られました。
ああ、これで面倒な手順を踏むことなく設定が変えられる!!知ってよかった!!