Я установил Elastic Search 1.7.4 на CentOS 7.2 следующим образом:
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, но мне нужно, чтобы 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 к IPv6-адресу сетевой карты.
Как включить привязку ES к IPv4? У меня нет альтернативы, моя сеть работает только с IPv4, и мне нужно использовать эту старую версию ES, потому что я запускаю некоторые приложения, для которых требуется эта версия.
Из обмен unix.
Это происходит потому, что по умолчанию сокеты AF_INET6 фактически работают как для IPv4, так и для IPv6. См. Раздел 3.7 - Совместимость с узлами IPv4 в RFC 3493 - Расширения базового интерфейса сокета для IPv6.
Но, как вы уже догадались, 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
Это обычная ошибка ES, потому что есть два сетевые настройки, которые необходимо установить: network.bind_host
И network.publish_host
. Из-за этого разработчики ES добавили этот ярлык:
network.host: 0.0.0.0
У меня были другие проблемы с ES, когда IPv6 был включен, но не настроен, поэтому вы можете отредактировать 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
.
Попробуйте отключить брандмауэр, который поставляется с centos
systemctl disable firewalld
systemctl stop firewalld
https://bytefreaks.net/gnulinux/how-to-startstop-or-enabledisable-firewalld-on-centos-7
Я рекомендую специальный аппаратный брандмауэр перед машиной, я НЕ буду полагаться на программный брандмауэр на машине, которую вы используете. Если злоумышленник бьет по машине, уже слишком поздно.