Elasticsearch 導入手順書(CentOS7)

## Elasticsearach のインストール

### CentOS7 へのインストール

タイムゾーンを JST に変更する必要がある場合は以下を実行しておく。

```bash
sudo timedatectl set-timezone Asia/Tokyo
```

JDK のインストール

```bash
sudo yum -y install wget
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.rpm
sudo yum localinstall -y jdk-8u144-linux-x64.rpm
```

Elasticsearch の yum リポジトリを追加

```bash
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/elasticsearch.repo
```

以下の内容を `elasticsearch.repo` に記述

```repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
```

Elasticsearch をインストール

```bash
sudo yum install -y elasticsearch
```

以下のディレクトリ構成でインストールされる

- /etc/elasticsearch/
  - elasticsearch.yml
  - jvm.options
  - log4j2.properties
- /usr/elasticsearch/
  - bin/
    - elasticsearch
    - elasticsearch-plugin
    - elasticsearch-translog
    - elasticsearch-keystore
    - elasticsearch-systemd-pre-exec
    - elasticsearch.in.sh
  - lib/
  - modules/
  - plugins/
- /var/
  - log/elasticsearch/
  - lib/elasticsearch/

## CentOS7 の設定を変更

CentOS7 のデフォルト値では問題が発生する部分があるので変更しておく。

elasticsearch ユーザでオープンできるファイル数の上限を変更する。現在の設定値を以下のコマンドで確認。

```bash
sudo su -
sudo -u elasticsearch bash -c "ulimit -n"
1024
```

デフォルト値は 1024 なので、公式ページの推奨値である 65536 に変更する。
再起動しても設定値が戻らないように limits.conf に以下を追記する。
(設定値を変更するだけでは反映されないので、最後に再起動する)

```bash
sudo vi /etc/security/limits.conf
```

```conf
elasticsearch  -  nofile  65536
```

次に、 `bootstrap.memory_lock` を `true` に設定できるように elasticsearch.conf を作成して以下を追記する。

```bash
sudo mkdir /etc/systemd/system/elasticsearch.service.d
sudo vi /etc/systemd/system/elasticsearch.service.d/elasticsearch.conf
```

```conf
[Service]
LimitMEMLOCK=infinity
```

スレッド数の上限を確認する。

```bash
sudo su -
sudo -u elasticsearch bash -c "ulimit -u"
4096
```

公式ページによると Elasticsearch が使用するスレッド数は最低 2048 とのことなので特に変更しない。

上記の設定を有効にするために一度サーバを再起動する。

設定が反映されたかどうかを確認する。

```bash
sudo su -
sudo -u elasticsearch bash -c "ulimit -n"
65536
```

Elasticsearch 起動後に以下を確認する。

```bash
curl 'localhost:9200/_nodes/stats/process?filter_path=**.max_file_descriptors&pretty'
{
  "nodes" : {
    "MCD3WQBrS6CzrOSS-YjOCg" : {
      "process" : {
        "max_file_descriptors" : 65536 ← ここが 65536 になっていることを確認する
      }
    }
  }
}
```

```bash
curl 'localhost:9200/_nodes/process?pretty'
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "hoge-search",
  "nodes" : {
    "MCD3WQBrS6CzrOSS-YjOCg" : {
      "name" : "hoge-search-001",
      "transport_address" : "10.0.0.8:9300",
      "host" : "10.0.0.8",
      "ip" : "10.0.0.8",
      "version" : "5.5.1",
      "build_hash" : "19c13d0",
      "roles" : [
        "master",
        "data",
        "ingest"
      ],
      "process" : {
        "refresh_interval_in_millis" : 1000,
        "id" : 832,
        "mlockall" : true ← ここが true になっていることを確認する
      }
    }
  }
}
```

## Elasticsearch の設定を変更

elasticsearch.yml を以下のように変更する。

```yaml
cluster.name: hoge-search
node.name: node-001 # 名前は適宜変更
bootstrap.memory_lock: true # CentOS7 はデフォルトではロックに失敗する
network.host:
  - _local_
  - _site_
http.port: 9200
discovery.zen.ping.unicast.hosts:
  - node-001 # 自分が 001 の場合は記載しない
  - node-002 # 自分が 002 の場合は記載しない

http.cors.enabled: true
http.cors.allow-origin: /https?:\/\/.+(:[0-9]+)?/
```

jvm.options を以下のように変更する。

```properties
-Xms4g
-Xmx4g
```

## Elasticsearch へのプラグインのインストール

Elasticsearch の bin ディレクトリに移動し以下を実行する。

ICU Analysis プラグインをインストール

```bash
sudo ./elasticsearch-plugin install analysis-icu
```

Kuromoji プラグインをインストール

```bash
sudo ./elasticsearch-plugin install analysis-kuromoji
```

## Elasticsearch を起動

```bash
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
```

起動を確認

```bash
sudo journalctl --unit elasticsearch
```

## Kibana のインストール

### CentOS7 へのインストール

Kibana をインストール

```bash
sudo yum install -y kibana
```

以下のディレクトリ構成でインストールされる

- /etc/kibana/
- /usr/share/kibana/
  - bin/
  - optimize/
  - plugins/
- /var/lib/kibana/

## Kibana の設定を変更

kibana.yml を以下のように変更。

```yml
# ↓ サーバのローカル IP アドレスを指定する
server.host: 10.0.0.8
```

## Kibana を起動

```bash
sudo systemctl enable kibana.service
sudo systemctl start kibana.service
```