fc2ブログ

【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本体
WS000015_20120726161120.jpg

solr_home
WS000020_20120726175754.jpg
←マルチコアのフォルダを置いていく。このsolr直下にsolr.xmlがある

tomcat本体
WS000017_20120726161412.jpg
←/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アプリ
WS000019_20120726162006.jpg
←/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/startup.sh で起動確認

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

Secret

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading