CentOS 7.2にElastic Search 1.7.4を次のようにインストールしました。
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.4.noarch.rpm
Sudo rpm -ivh elasticsearch-1.7.4.noarch.rpm
サービスが開始され、ESが機能します(curlで検証されます)。ただし、デフォルトの構成でIPv6のみをリッスンします。 netstat -naを実行すると、次のようになります。
tcp6 0 0 :::9200 :::* LISTEN
tcp6 0 0 :::9300 :::* LISTEN
他のサーバーからnmapを使用すると、ポート9200および9300がフィルターされ、ファイアウォールが無効になっていることがわかります。
/etc/elasticsearch/elasticsearch.ymlの編集と設定:
network.bind_Host: 0.0.0.0
何も変更しません。これをサーバーの外部IPv4アドレスに設定すると、netstat -na出力に2つのエントリが追加されますが、ローカルネットワークからESにアクセスできる必要があるため、これは役に立たず、netstatはこれをtcp6として登録します。
tcp6 0 0 192.168.0.54:9200 :::* LISTEN
tcp6 0 0 192.168.0.54:9300 :::* LISTEN
設定:
network.bind_Host: _eth0:ipv4_
ESをローカルIPv4にバインドさせ、もちろんローカルサーバーからのみ利用できるようにします。 「ipv4」の部分を省略すると、ESはNICのIPv6アドレスにバインドします。
ESをIPv4にバインドするにはどうすればよいですか?代替手段はありません。私のネットワークはIPv4のみであり、このバージョンを必要とするアプリケーションを実行しているため、この古いバージョンのESを使用する必要があります。
これは、デフォルトでは、AF_INET6ソケットがIPv4とIPv6の両方で実際に機能するためです。 RFC 3493-IPv6の基本ソケットインターフェイス拡張のセクション3.7-IPv4ノードとの互換性を参照してください
ただし、ご存知のとおり、firewalldはそのままで有効になっています。
このファイルを/etc/firewalld/services/elasticsearch.xml
に作成します
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Elasticsearch</short>
<description>Elasticsearch is a distributed, open source search and analytics engine, designed for horizontal scalability, reliability, and easy management.</description>
<port protocol="tcp" port="9300"/>
<port protocol="tcp" port="9200"/>
</service>
権限を更新する
chmod 0400 /etc/firewalld/services/elasticsearch.xml
chown root: /etc/firewalld/services/elasticsearch.xml
これらのコマンドを実行する
firewall-cmd --zone=public --add-service=elasticsearch --permanent
firewall-cmd --reload
設定する必要があるtwoネットワーク設定があるため、これはESでの一般的な落とし穴です:network.bind_Host
AND network.publish_Host
。このため、ES開発者は次のショートカットを追加しました。
network.Host: 0.0.0.0
IPv6が有効になっているが構成されていない場合、ESで他のいくつかの問題が発生したため、sysctl.confを編集することをお勧めします。
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
そして、やります sysctl -p
。