Solr 6.0.1 インストールしてからコアの追加まで


# まとめ
vagrant で作った仮想マシン(CentOS 6系)にとりあえず入れてみました。
- solr-6.0.1 をインストールした
- 今時の Solr はインストールスクリプトで service に登録までしてくれる
- `/etc/default/solr.in.sh` を弄って設定変更できる
- デフォルトの `solr.solr.home` は `/var/solr/data` で、これは solr ユーザの配下。

後は読まなくても大丈夫です。

# インストール
    $ curl -O http://ftp.jaist.ac.jp/pub/apache/lucene/solr/6.0.1/solr-6.0.1.tgz
    $ tar xvzf solr-6.0.1.tgz
    $ sudo sh solr-6.0.1/bin/install_solr_service.sh solr-6.0.1.tgz
    

```
id: solr: そのようなユーザは存在しません
Creating new user: solr

Extracting solr-6.0.1.tgz to /opt


Installing symlink /opt/solr -> /opt/solr-6.0.1 ...


Installing /etc/init.d/solr script ...


Installing /etc/default/solr.in.sh ...

NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=2752). Happy searching!


Found 1 Solr nodes:

Solr process 2752 running on port 8983
{
  "solr_home":"/var/solr/data",
  "version":"6.0.1 c7510a0fdd93329ec04c853c8557f4a3f2309eaf - sarowe - 2016-05-23 19:40:37",
  "startTime":"2016-06-15T01:34:23.106Z",
  "uptime":"0 days, 0 hours, 0 minutes, 17 seconds",
  "memory":"79 MB (%16.1) of 490.7 MB"}

Service solr installed.
```
最近の solr にはインストールスクリプトが用意されているんですね。無事インストールされてしまいました。インストールスクリプトの出力から、だいたい以下のことが読み取れます。
- solr ユーザで動く
- ソースコードは `/opt/solr-{version}` に入り、シンボリックリンクが `/opt/solr`
- `$SOLR_HOME` は `/var/solr/data` になった

インストールスクリプトを使うために solr-6.0.1.tgz が必要なので、残しておきましょう。


# オプションを変えたい
とりあえず走ったプロセスを確かめてみます。

    $ ps aux | grep solr

    solr      1222  0.9 17.7 2612080 181344 ?      Sl   10:36   0:05 java -server -Xms512m -Xmx512m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 -XX:+CMSScavengeBeforeRemark -XX:PretenureSizeThreshold=64m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:CMSMaxAbortablePrecleanTime=6000 -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/solr/logs/solr_gc.log -Djetty.port=8983 -DSTOP.PORT=7983 -DSTOP.KEY=solrrocks -Duser.timezone=UTC -Djetty.home=/opt/solr/server -Dsolr.solr.home=/var/solr/data -Dsolr.install.dir=/opt/solr -Dlog4j.configuration=file:/var/solr/log4j.properties -Xss256k -XX:OnOutOfMemoryError=/opt/solr/bin/oom_solr.sh 8983 /var/solr/logs -jar start.jar --module=http
    
いろいろとパラメータが設定されている。どこでパラメータが設定されているのかよくわかんないですね。`/etc/init.d/solr` を覗いてみます。

```
SOLR_ENV="/etc/default/solr.in.sh"
```

とか

```
if [ -n "$RUNAS" ]; then
    su -c "SOLR_INCLUDE=\"$SOLR_ENV\"\"$SOLR_INSTALL_DIR/bin/solr\" $SOLR_CMD" - "$RUNAS"
else
    SOLR_INCLUDE="$SOLR_ENV" "$SOLR_INSTALL_DIR/bin/solr" "$SOLR_CMD"
fi
```
とか書いてある。起動オプションは `/etc/default/solr.in.sh` に書かれているようです。中身を見て

```
# Increase Java Heap as needed to support your indexing / query needs
SOLR_HEAP="512m"

# Expert: If you want finer control over memory options, specify them directly
# Comment out SOLR_HEAP if you are using this though, that takes precedence
# SOLR_JAVA_MEM="-Xms512m -Xmx512m"
```

とか書いてありました。この辺を修正して、

```
# SOLR_HEAP="512m"
SOLR_JAVA_MEM="-Xms512m -Xmx1024m"
```

にして

```
$ sudo service solr restart
```

```
$ ps aux | grep solr

solr      3111 20.0 13.0 3137708 133248 ?      Sl   15:40   0:02 java -server -Xms512m -Xmx1024m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 -XX:+CMSScavengeBeforeRemark -XX:PretenureSizeThreshold=64m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:CMSMaxAbortablePrecleanTime=6000 -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/solr/logs/solr_gc.log -Djetty.port=8983 -DSTOP.PORT=7983 -DSTOP.KEY=solrrocks -Duser.timezone=UTC -Djetty.home=/opt/solr/server -Dsolr.solr.home=/var/solr/data -Dsolr.install.dir=/opt/solr -Dlog4j.configuration=file:/var/solr/log4j.properties -Xss256k -XX:OnOutOfMemoryError=/opt/solr/bin/oom_solr.sh 8983 /var/solr/logs -jar start.jar --module=http
```

変わりました。


# コアを追加したい
solr.solr.home がデフォルトでは `/var/solr/data` になってるので、普通に `/var/solr/data/new_core` とかに必要なコアの情報を置いてCREATEする。`/var/solr` のディレクトリ配下は solr ユーザが権限を持っているので、中に入ってる基本的なコンフィグ詰め合わせからサンプルを持ってきます。

```
$ sudo -i -u solr
$ mkdir -p /var/solr/data/new_core/conf
$ cp -r solr-6.0.1/server/solr/configsets/basic_configs/conf/* /var/solr/data/new_core/conf
```

Web版のGUIも用意されていますが、個人的な趣味の問題で Web API をそのまま叩きます。

```
curl -s 'http://localhost:8983/solr/admin/cores?action=CREATE&name=new_core&instanceDir=new_core-0&wt=json&indent=4'
```
とか。

```
{
  "responseHeader":{
    "status":0,
    "QTime":2039},
  "core":"new_core"}
```

コアできた。

続きは次回。