インデックス移行ツール

Luxor Ver.2.0以降のモジュールにて提供しているインデックス移行ツールluxortool.shについて説明します。

利用手順、コマンドの説明や実行例などの基本運用に関しては、『Luxor_Ver.2.3_インストレーションガイド』の「インデックス移行」よりご参照ください。ここでは、コマンド実施中の詳細表示とそれぞれの対策について記載します。

表 移行ツール実行中のメッセージ

意味 表示メッセージ 説明 注意事項
処理の開始 Collection XXX Data migration start インデックスの移行開始を表す。なお、XXXは移行しているインデックスの機能を表す。 移行進行中、データの整合性を考慮するには、画面上におけるデータ操作を行わないでください。
処理の完了 Collection XXX migration completed, spent a total of N seconds インデックスの移行完了を表す。なお、XXXは移行しているインデックスの機能を表す。 一つのコレクションが移行完了した時点で、画面上におけるデータ操作もお薦めしません。一部の機能では履歴などの情報を別コレクション保存するから、整合性を保つには、すべての移行作業が終わるまで画面上のデータ操作を避けてください。
進捗状況 [=                   ] 8.88% 12m19s +2h2m1s 8.88%は該当機能の移行の進捗を表す。
12m19sは該当機能の移行の残り時間を表す。
+2h2m1sは全機能の移行完了の所要時間を表す。

制限事項
1)実行中は、データ不整合を防ぐため、画面によるデータ追加がないようにしてください。
2)コレクション毎のドキュメント数は2147483648を超過しないようご注意ください。
3)Document-itemを移行する際、DocumentのIDをメモリに保存するため、移行対象Document数が大量にある場合、メモリリークが発生する可能性があります。Document数30000件を移行する際の目安として、所要メモリは10MBとなる。Document数が多い場合、回数を分けて実施してください。

インデックス移行ツール実行中に処理が失敗した場合の対処方法

移行ツール実行中に通信の一時中断などにより、エラーメッセージが出力される場合

出力例:

  Collection:document q:upd_date:[2012-11-23T11.23.14Z TO 2013-11-23T11.23.14Z] start:1650 end:1800

原因:
何らかの原因で送信失敗になってしまい、インデックス移行に失敗したことが原因です。エラー詳細は、移行ツールのlog.outファイルに記録されます。

対処法:
すべてのインデックス移行を完了してから、ファイルlog.outにアクセスして確認し、作成失敗になったリクエストを再送信してください。
再送信方法は下記よりご参照ください。

log.outの出力内容を参照して設定ファイルconf.xmlを設定してください。5ヵ所についてlog.outの出力内容により変更が必要です。詳細は下記例を参照し変更してください。
※サービス再起動は不要です。

<?xml version="1.0" encoding="UTF-8"?>
<config>
<SourceIP>移行元のLuxorサーバのIPアドレス</SourceIP>    
<TargetIP>移行先のLuxorサーバのIPアドレス</TargetIP>           
<SourceThread>15</SourceThread>              
<TargetThread>20</TargetThread>                        
<SourceDocument>100</SourceDocument>         
<TargetDocument>1000</TargetDocument>              
<Collection>
<name>document</name>    ----->要変更
<from>2012-11-23T11.23.14Z</from>  -----> 要変更
<to>2013-11-23T11.23.14Z</to>     -----> 要変更
<start>1650</start>    -----> 要変更
<end>1800</end>       -----> 要変更
</Collection>  
<Collection>
</config>

移行ツール実行中に、コンソール画面にてjava heap spaceが出力される場合の原因と対処法

出力例:

  Exception in thread "pool-5-thread-10" java.lang.OutOfMemoryError: Java heap space
   at org.noggit.CharArr.resize(CharArr.java:108)
   at org.noggit.CharArr.reserve(CharArr.java:114)
   at org.apache.solr.common.util.ByteUtils.UTF8toUTF16(ByteUtils.java:68)
    at org.apache.solr.common.util.JavaBinCodec.readStr(JavaBinCodec.java:833)
    at org.apache.solr.common.util.JavaBinCodec.readStr(JavaBinCodec.java:822)
    at org.apache.solr.common.util.JavaBinCodec.readObject(JavaBinCodec.java:261)
    at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:251)
    at org.apache.solr.common.util.JavaBinCodec.readArray(JavaBinCodec.java:712)
    at org.apache.solr.common.util.JavaBinCodec.readObject(JavaBinCodec.java:267)
    at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:251)
    at org.apache.solr.common.util.JavaBinCodec.readSolrDocument(JavaBinCodec.java:525)
    at org.apache.solr.common.util.JavaBinCodec.readObject(JavaBinCodec.java:300)
    at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:251)
    at org.apache.solr.common.util.JavaBinCodec.readArray(JavaBinCodec.java:712)
    at org.apache.solr.common.util.JavaBinCodec.readObject(JavaBinCodec.java:267)
    at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:251)
    at

原因:
インデックスの大きいデータが一回の移行処理に集中してしまい、移行ツールの所要メモリが不足したことが原因となります。
上記エラーが出力された時、次の手順より対応してください。

対処法:

1) 実行中のインデックス移行ツールを中止する。(linuxの停止方法を参照。)
2) インデックス移行ツールのconf.xmlファイルでPoolsizeの値を小さく調整する。

※ conf.xmlファイルの詳細に関しては、『インストレーションガイド』の「移行ツール利用方法」を参照してください。

3) 2)の設定を調整完了後、移行ツールの所要メモリを大きく調整する。

※ 移行ツールの所要メモリの調整に関しては、移行ツール設定ファイルconf.xmlの"Memory"を参照してください。特に調整を行っていない場合、デフォルトとしてサーバのメモリ容量の1/2を利用して処理します。

移行ツール実行中に、コンソール画面にてthis IndexWriter is closedエラーメッセージが出力される場合

出力例:

Exception in thread "pool-2-thread-13" org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://10.3.2.200:10080/solr/wflow: this IndexWriter is closed
 at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:610)
 at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:279)
 at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:268)
 at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:160)</details>

原因:
上記事象の原因は、Luxorサーバのメモリ不足となります。下記対処法より解消してください。

対処法:

1) Luxorサーバのメモリ容量増加。
2) TomcatGCの最適化を制御する設定を調整。

TomcatGCの最適化を調整する方法

/etc/init.d/solrTomcatにアクセスし、CATALINA_OPTSの後に下記内容を追加する。
nnn -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:CMSInitiatingOccupancyFraction=75