【Solr】Solrサーバのセットアップ【tomcat】
2012-03-27 00:45:12 Tue
■環境
- CentOS 5 32bit
- jdk 1.6.0.31
- solr 3.4.0
- tomcat 7.0.23
solrは1つのコアしか利用しないつもりでも将来的なマルチコアを想定して環境を作っておく。
そんなに面倒でもないので。
あと、solrにはjettyが同梱されます。
そのままjettyを使っても良いのですがapache tomcat 上で利用することにし、tomcatはapache httpサーバとajpプロトコルで連携させます。
細かいファイル構成まで書いていると死にそうなのでざっくりと。
solr本体
solr_home
←マルチコアのフォルダを置いていく。このsolr直下にsolr.xmlがある
tomcat本体
←/usr/local/jakarta/apache-tomcat-7.0.26/conf/Catalina/localhost/solr.xml でWARのdocBaseを指定しつつtomcatのEnvironmentのnameにsolr_home、valueにsolr_homeのパスを文字列で記述
solr webアプリ
←/usr/local/apache-solr-3.4.0/dist/apache-solr-3.4.0.war を展開したものを入れておく。フィルターの設定とかいらないとか、WARがあるならわざわざ展開する必要はない。
■JDKのインストール
./jdk* を実行して展開する
/usr/local ディレクトリに移動する
bash_profileなどにJavaの実行パスを追加
PATH=$PATH:$HOME/bin
JAVA_HOME=/usr/local/jdk1.6.0_31
PATH=$PATH:$JAVA_HOME/bin
java -version でインストールの確認
※ bit数に注意
実はJavaにパス通さなくても下記のtomcatインストールのところにある
vi /etc/init.d/tomcat7 の起動用スクリプトで
JAVA_HOME をちゃんと設定していれば問題なし。
■apacheのインストール
http://itochif.com/contents/Linux/centos5/web/apache_00100.html 参考
rpm -qa httpd でインストール済みか確認
yum -y install httpd でインストールする
/etc/rc.d/init.d/httpd start で apache 起動
起動/停止コマンドの参考 http://tech.hitsug.net/?CentOS%2FApache%2F%E8%B5%B7%E5%8B%95%E8%A8%AD%E5%AE%9A
/etc/rc.d/init.d/httpd stop でapacheを停止する
■tomcatのインストール
http://symfoware.blog68.fc2.com/blog-entry-839.html を参考
mkdir /usr/local/jakarta ディレクトリを作成
jakartaディレクトリでtomcatのターボールを展開
apache-tomcat-7.0.23/bin/shutdown.sh で停止
ln -s /usr/local/jakarta/apache-tomcat-7.0.23 /usr/local/tomcat7 でシンボリックリンク作成
vi /etc/init.d/tomcat7 で起動用スクリプト作成
#! /bin/sh
### BEGIN INIT INFO
# Provides: tomcat7
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat7 servlet server
# Description: tomcat7 servlet server
### END INIT INFO
DESC="tomcat7 servlet server"
NAME=tomcat7
DAEMON1=/usr/local/tomcat7/bin/startup.sh
DAEMON2=/usr/local/tomcat7/bin/shutdown.sh
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
export JAVA_HOME=/usr/local/jdk1.6.0_31
export TOMCAT_HOME=/usr/local/tomcat7
. /lib/lsb/init-functions
case "$1" in
start)
echo -n "Starting servlet server: $NAME"
$DAEMON1
;;
stop)
echo -n "Stopping servlet server: $NAME"
$DAEMON2
;;
*)
echo "Usage: $SCRIPTNAME {start|stop}" >&2
exit 1
;;
esac
exit 0
chmod 755 などで実行権限を付与
/etc/init.d/tomcat7 start で起動
/etc/init.d/tomcat7 stop で停止
自動起動設定などをしておく
■solrのインストール
unzip apache-solr-3.4.0.zip で展開する
/usr/local ディレクトリに展開したディレクトリをすべて移動する
/usr/local/apache-solr-3.4.0/example を main などディレクトリ名を変更するかディレクトリコピーする
/usr/local/apache-solr-3.4.0/main/multicore/solr.xml で使用するコア名とディレクトリを指定する
<cores adminPath="/admin/cores">
<!--<core name="core0" instanceDir="core0" />-->
<core name="core1" instanceDir="core1" />
</cores>
/usr/local/apache-solr-3.4.0/main/multicore/core1 にlibディレクトリを作成
lucene-gosen-1.1.1-naist-chasen.jarをlibディレクトリに配置
/usr/local/apache-solr-3.4.0/main/solr/conf を /usr/local/apache-solr-3.4.0/main/multicore/core1/conf にコピー
confディレクトリ内に定義した schema.xml を配置
下記のコマンドでsolrサーバを起動/停止確認
■solr実行コマンドチューニング
java -Dsolr.solr.home=multicore -DSTOP.PORT=8888 -DSTOP.KEY=hogefuga -server -Xmx8192m -Xms5120m -XX:+UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+UseTLAB -XX:MaxPermSize=1024m -XX:MaxDirectMemorySize=2048m -jar start.jar &
java -Dsolr.solr.home=multicore -DSTOP.PORT=8888 -DSTOP.KEY=hogefuga -server -Xmx8192m -Xms5120m -XX:+UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+UseTLAB -jar start.jar &
■solrサーバ起動/停止コマンド
◯起動
java -Dsolr.solr.home=multicore -DSTOP.PORT=8888 -DSTOP.KEY=hogefuga -jar ./start.jar &
◯停止
java -DSTOP.PORT=8888 -DSTOP.KEY=hogefuga -jar ./start.jar --stop &
mkdir /usr/local/solr でディレクトリを作成
cp -r /usr/local/apache-solr-3.4.0/example/solr/* /usr/local/solr でディレクトリコピー、
あとで行うマルチコア用の設定をするのでrm -fr conf などでconfやbinディレクトリは削除しておく。
cp -r /usr/local/apache-solr-3.4.0/contrib/ /usr/local/solr/ でディレクトリコピー
cp -r /usr/local/apache-solr-3.4.0/dist/ /usr/local/solr/ でディレクトリコピー
mkdir /opt/solr でディレクトリを作成
unzip /usr/local/apache-solr-3.4.0/dist/apache-solr-3.4.0.war で/opt/solr に展開
cd /usr/local/tomcat7/conf/Catalina/localhost/solr.xml を以下のように作成
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="/opt/solr/" debug="0" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/usr/local/solr" override="true"/>
</Context>
マルチコアの設定として /usr/local/solr/solr.xml を変更
<!-- <cores adminPath="/admin/cores" defaultCoreName="core1">-->
<cores adminPath="/admin/cores">
<!--<core name="core0" instanceDir="core0" />-->
<core name="core1" instanceDir="core1" />
</cores>
defaultCoreName を設定すると、http://ホスト名:ポート/solr/admin/ で http://ホスト名:ポート/solr/core1/admin/ のエイリアスとしてアクセスできる
/usr/local/solr にcore1フォルダを作成
cp -r /usr/local/apache-solr-3.4.0/example/solr/conf /usr/local/solr/core1 でディレクトリをコピー
/usr/local/solr/core1 にlibディレクトリを作成
lucene-gosen-1.1.1-naist-chasen.jarをlibディレクトリに配置
/usr/local/solr/core1/conf/solrconfig.xml の../../ となっているところを /usr/local/solr/ に置換
ここまででtomcatを起動してアクセスできることを確認
■apacheとtomcatの連携
vi /etc/httpd/conf.d/proxy_ajp.conf を更新
# 最終行に追記
ProxyPass /tomcat/ ajp://localhost:8009/
/etc/rc.d/init.d/httpd restart でapacheをリスタート
/etc/init.d/tomcat7 stop して start でtomcatをリスタート
http://ホスト名/tomcat/solr/core1/admin/ こんな感じでアクセスできることを確認
ルートから丸ごとtomcatにプロキシする場合は
ProxyPass / ajp://localhost:8009/ とすることでOK
8080ポートでのアクセスは不要なので vi /usr/local/tomcat7/conf/server.xml でポートを利用しないように設定変更
<!--<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />-->
■クエリーの文字コードが化けてしまうので対策
http://shinodogg.com/?p=3035
○tomcat6に付属しているサンプルのフィルタクラスをtomcat7にコピーしてweb.xmlに設定
\apache-tomcat-6.0.35.tar\apache-tomcat-6.0.35\webapps\examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class これがいる
これを /opt/solr/WEB-INF/classes/filters/SetCharacterEncodingFilter.class にコピー
/opt/solr/WEB-INF/web.xml にfilter設定を追記
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
○server.xmlのajpプロトコルでエンコーディングの設定を追加
vi /usr/local/tomcat7/conf/server.xml で ajp プロトコルのところでエンコーディング周りの設定を追加。
<Connector port="ポート" ~略~ protocol="AJP/1.3″ ~略~
useBodyEncodingForURI="true" URIEncoding="UTF-8″ />
■JAVA_OPTSの設定
http://ameblo.jp/wataru420/entry-10837851281.html
http://d.hatena.ne.jp/flick-flick/20120120/1327024721
/usr/local/tomcat7/bin/setenv.sh を作成
#!/bin/sh
JAVA_OPTS="-server -Xms512M -Xmx512M"
export JAVA_OPTS
◯tomcatのBasic認証はこちら(apacheでやればいいみたいだけどajpとか使ってても普通にやればいいの?がわからず調査していないのでtomcatでやってます)
http://zonotex.blogspot.jp/2012/05/tomcatapache-solrbasic.html
solrjでBasic認証ヘッダ付与の実装例
http://zonotex.blogspot.jp/2012/05/caused-by-org.html
⇒comment
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます