2014年11月17日月曜日

ElasticSearchのインストール

検索サーバElasticSearchのインストールと設定。AWS(EC2)での利用。2014.11.15現在。

1. Javaのバージョンを1.7.xにする

もし問題なければ飛ばす。単純アップデートだと古いのものこってて競合するそうなので、古いのはremoveする
http://stackoverflow.com/questions/25518908/issues-after-elasticsearch-1-3-2-upgrade
# java -version

# yum install java-1.7.0-openjdk
# yum remove install openjdk-6-jre
# yum remove java-1.6.0-openjdk


2. ElasticSearch本体及びプラグインのインストール

# rpm -ivh https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.0.noarch.rpm

# /usr/share/elasticsearch/bin/plugin --install mobz/elasticsearch-head
# /usr/share/elasticsearch/bin/plugin --install royrusso/elasticsearch-HQ
# /usr/share/elasticsearch/bin/plugin --install elasticsearch/elasticsearch-analysis-kuromoji/2.4.1
# /usr/share/elasticsearch/bin/plugin --install elasticsearch/elasticsearch-cloud-aws/2.4.0
※head, HQはおこのみで。
※kuromoji, cloud-awsはelasticsearchのバージョンに応じて入れるバージョンが変わる。それぞれ公式のsetup情報にバージョン対応表が載ってるので確認。上記は1.4.0の場合。


3. 設定ファイル

1台構成ならcluster.name位設定しとけばほかはいらない。EC2で複数台サーバを連携する場合は自動でネゴシエートするためのbroadcastが使えないので、cloud-awsプラグインを入れて設定を行う。また利用するEC2インスタンスはSecurity Groupで9200-9400のPortを開けておく。
cluster.name: hoge

# multi-server for EC2 settings
discovery.zen.ping.multicast.enabled: false

cloud.aws.access_key: XXXX
cloud.aws.secret_key: XXXX
cloud.aws.region: ap-northeast
discovery.ec2.host_type: private_ip
discovery.ec2.ping_timeout: 5s
discovery.type: ec2
discovery.ec2.groups: IDorNAME
※access_key, secret_keyはAWSのIAM Roleの設定で、EC2のDescribeの権限を付けたものを設定
※host_typeはpublic_ipでも問題ないと思われる(未確認)
※ regionなしだと接続できずv2.4.0


4. 起動

# chkconfig --add elasticsearch on
# /etc/init.d/elasticsearch start



PHPのクライアントをComposerでインストール

$ php ../composer.phar require elasticsearch/elasticsearch:">=1.0"

HQ, headによる状態確認

ttp://ipaddar:9200/_plugin/head/
ttp://ipaddar:9200/_plugin/HQ/
プラグインをインストールできてれば、上記でアクセス可能。



Multi masterは出来ないので複数台構成にしてもmasterサーバはひとつ。可用性を考えるなら、dataを持たないゲートウェイ的なマスタを作り、そこに子をぶら下げる形か。

trittonn, mroonga, Lucene, Solrと比べて検索システムの中ではだいぶ導入が容易な印象。運用考えると日本語対応した今はCloudSearch使ったほうが楽かも。ただElasticSearchからCloudSearchへのスイッチはサービス拡大に応じて行えるレベルかな。