Elasticsearch構築メモ
環境
- OS
- Censtos7.2
- ソフトウェア
- Elasticsearch 5.2.2
- kibana 5.2.2
- grafana 4.1
- cerebro 0.6.3
- ハードウェア
- メモリ : 4GB
- CPU : 2core
インストール
やんごとなき理由でローカルインストールです・・・
su -l
yum install -y elasticsearch-5.2.2.rpm
yum install -y kibana-5.2.2-x86_64.rpm
yum install -y grafana-4.1.2-1486989747.x86_64.rpm
tar zxvf cerebro-0.6.3.tgz
設定
クラスタ設定
今回は推奨の3台構成。
vi /etc/elasticsearch/elasticsearch.yml
+ network.host: 0.0.0.0
+ discovery.zen.ping.unicast.hosts: ["ip_address1", "ip_address2","ip_address3"]
+ discovery.zen.minium_master_nodes: 2
discovery.zen.minuum_master_nodes
については公式にもある通り、
クラスタ構成台数/2+1に設定します。
kibana設定
vi /etc/kibana/kibana.yml
+ server.host: 0.0.0.0
また、5.2では一部kibanaのコードにバグがあり、ファイヤーウォール環境下ではページ描画に時間がかかるため以下の設定を変更します。
# vi /usr/share/kibana/src/server/config/schema.js
- manifestServiceUrl: _joi2['default'].string()['default']('https://tiles.elastic.co/v2/manifest'),
+ manifestServiceUrl: _joi2['default'].string()['default']('https://localhost'),
調べるとどうもhttps://tiles.elastic.co/v2/manifest?my_app_version=5.2.0
というURLにアクセスしようとしてタイムアウトを待っているようです。
2017年2月現在、GitHubのissueにも挙がっています。
https://github.com/elastic/kibana/issues/10205
起動
systemctl enable elasticsearch
systemctl start elasticsearch
systemctl status elasticsearch
systemctl enable kibana
systemctl start kibana
systemctl status kibana
/root/cerebro-0.6.3/bin/cerebro &
設計
ElasticsearchではIndex,Type,Documentという概念があり、
それぞれRDBでいうデータベース、テーブル、レコードに相当します。
Mapping
RDBでいうDB設計です。
今回は以下の定義でIndexを作成します。
ちなみにこれ以降設定等は基本的にKibanaのコンソールから行います(面倒なので!)
PUT /log
{
"settings":{
"number_of_shards" : 3,
"number_of_replicas" : 1,
"max_result_window":100000,
"refresh_interval":"5s",
"index":{
"mapping":{
"ignore_malformed":"true"
}
},
"mapper":{
"dynamic":"false"
}
},
"mappings":{
"alert":{
"properties":{
"server":{
"type":"keyword",
"fields"{
"text":{
"type":"text"
}
}
},
"date":{
"type":"date"
},
"log":{
"type":"text"
}
}
}
}
}
実はElasticsearchはDynamic Mappingにも対応していて、
存在しないindexにデータを投入すると自動でindexを作成してくれます。
しかし、余計な設定や意図しない設定が反映されたりするのでやはりMappingは手動をおすすめします。
Index
indexとはRDBでいうDB相当です。ここにデータであるdocumentを格納します。
Elasticsearchはクラスタを組むことでデータをノードごとに分散して保持することが可能ですが、
何台でデータを保持するか(shards)を基本的にIndex作成後にで変更出来ないため、設計時によく考える必要があります。
今回はデフォルトで3としています。
Type
タイプはRDBでいうテーブルのようなものです。
ただここで設計したフィールドは他のTYPEでも同じ設計でないといけません。
(例えばlogというフィールド名でフィールドタイプがtextだった場合、他のタイプでもlogというフィールドはtext型でないといけない)
ただし、TYPEは6.0で削除されるので使わない方がよいでしょう。
Shard
shardは一つのIndexを分割したものです。
各shardは基本的にノードごとに分散して配置されます、shardを適切な数に設計することが高速化につながります。
shardは基本的に一度設定すると変更が不可能なため、事前に十分な運用・拡張性を考慮する必要があります。
また、各shardには上限ドキュメント数があり、約20億doc(2,147,483,519)を越えてデータを投入することはできません。(Lucenの限界)
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/_basic_concepts.html