@johtaniの日記 2nd

@johtani ‘s blog 2nd edition

Elasticsearch Unplugged - 2.0におけるネットワークの変更(日本語訳)

※この記事は次のブログを翻訳したものになります。

原文:Elasticsearch unplugged - Networking changes in 2.0

Elasticsearchをローカルのマシンで起動します。 そして、昨日試したデータを削除するためにDELETE *を実行します。 すると、悲しそうな叫びを同僚が発していることに気づき、なぜそんなことになっているのか不思議に思うでしょう。。。

Elasticsearchはいつも、親しみやすいものでした。 複数ノードのクラスタがどのように機能するのかをテストするには、 ローカルのマシンでいくつかのElasticsearchのインスタンスを起動するだけでした。 起動したインスタンスはマルチキャストを利用して自動的にお互いを見つけて、1つのクラスタになり、負荷を共有し始めます。 しかし、これは親しみやすすぎました。 カンファレンスなどで、ローカルのマシンでElasticsearchを起動してみてください。 すると100ノードのクラスタに参加しているのがすぐにわかるでしょう。

もうすぐリリースされる、2.0.0-beta1では、Elasticsearchが通信先を選択するネットワークの機能に関する変更があります。 ただし、これまで通り、簡単に開発者が経験できる機能も残っています。

localhostへのバインド

以前、Elasticsearchはデフォルトで、利用可能なネットワークインタフェース全てにバインドしていました。 そこから、一番適したインタフェースをpublish_hostとして選択しようとします。 このアドレスはElasticsearchがクラスタの他のノードとやりとりするためのアドレスです。

Elasticsearch 2.0では、デフォルトでは、localhostにのみバインドします。 127.0.0.1(IPv4)と[::1](IPv6)の両方にバインドしようとします。 また、どちらかのみの環境でも動作します。 この変更は、特に指定がない限り、Elasticsearchがネットワーク上の他のノードと接続しません。 本番環境に移行する場合は、network.hostパラメータを使って設定しましょう。 設定は、elasticsearch.ymlに記述するか、コマンドラインで指定します。

1
2
bin/elasticsearch --network.host 192.168.1.5
bin/elasticsearch --network.host _non_loopback_

network.hostの全てのオプションについては、network settingsのドキュメントをごらんください。

マルチキャストは廃止

Elasticsearch 1.xはネットワークの他のノードに接続・探索するためにマルチキャストを使用しました。 マルチキャストは魔法のような挙動です。。。 残念ながら、マルチキャストのサポートは良くも悪くもあります。 Linuxはローカルホストでマルチキャストの待ち受けをしていません。 OS/Xは構成されたアドレスの全てのインタフェースにマルチキャストで配信できます。 また、ネットワークによってはマルチキャストはデフォルトでは使用できなくなっています。

Elasticsearch 2.0は異なるアプローチを採用しました。 マルチキャストを廃止します(ただし、新たにプラグインとして提供します)。 代わりに、ローカルホストでは、Elasticsearchはtransport.tcp.portで指定されている範囲(デフォルトは9300-9400)の最初の5ポートに対してユニキャストを使用できるようにします。

これは、開発者のための、設定することなく自動的にクラスタを組むという機能を残しています。 しかし、本番に移行するときは、unicast hostsで次のようにリストを指定する必要があります。

1
discovery.zen.ping.unicast.hosts: [ 192.168.1.2,  192.168.1.3 ]

unicast hostsとしてクラスタにあるノードの全てのリストを指定する必要はありません。 少なくとも、マスタノードとして選出されるべきものを指定します。 巨大なクラスタでは、3つの専用のマスタノードを持っており、この3つをunicast hostsとして設定することを推奨しています。

これにより、開発の知識・経験が、私たちの推奨する本番でのネットワーク設定に、より近いものとなります。

ノード情報の変更

最後に、inet[/127.0.0.1:9200]といったシンタックスを廃止します。 これは、Elasticsearchがnodes-info APIなどで、使用していたIPアドレスのためのシンタックスです。 今は、RFCに準拠した形で表示します。 127.0.0.1:9200(IPv4)や[::1]:9200(IPv6)のようにです。

質問がある場合は、ElasticsearchのWebフォーラムで質問してください。ベータはもうすぐです!(翻訳した時点で、すでにベータリリースされています。)

Comments