インデックス移行ツール
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