Существует несколько способов настройки Neo4j Cluster в Amazon Web Services (AWS), и я хочу показать вам один из способов сделать это.
Обзор:
- Создать VPC
- Запустить 1 экземпляр
- Установите Neo4j HA
- Клон 2 Экземпляры
- Настройте экземпляры
- Начать координаторы
- Запустить кластер Neo4j
- Создать 2 балансировщика нагрузки
- Следующие шаги
Мы начнем с входа в Amazon Web Services и создания виртуального частного облака:
Мы создадим VPC только с одной общедоступной подсетью (но вы можете выбрать VPC с общедоступной и частной подсетями, если хотите).
После того, как наш VPC запущен, мы можем создавать экземпляры, перейдя в EC2.
Вы можете выбрать любой образ машины Amazon, который вам нужен, но я собираюсь использовать Ubuntu 12.04 LTS.
Вы можете выбрать любой тип экземпляра в зависимости от размера ваших данных. Я просто создам небольшой тип экземпляра, но обязательно запустите его в VPC.
Я выберу IP 10.0.0.151. Я создам еще 2 экземпляра позже, которые будут 152 и 153.
Я создам новую пару ключей, назову ее «ha_cluster» и загружу на мою машину.
Я создам новую группу безопасности под названием «neo4j_ha_cluster» и добавлю весь трафик в 10.0.0.0/24:
Zookeeper и Neo4j будут общаться только внутри этой сети. После того, как наш экземпляр создан, мы назначим новый Elastic IP, убедившись, что выбрали VPC, где он запрашивает, где вы хотите его использовать.
Свяжите Elastic IP с текущим работающим экземпляром.
Откройте окно терминала и перейдите в каталог, где вы ранее сохранили файл ha_cluster.pem. Затем измените разрешения:
chmod 400 ha_cluster.pem
Мы немного изменим этот Elastic IP, поэтому будем использовать забавный способ подключения к экземпляру через ssh, чтобы IP не связывался с каким-либо конкретным хостом. Замените 50.18.213.58 на ваш Elastic IP-адрес.
ssh -i ha_cluster.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]
Как только мы вошли на сервер, давайте запустим обновление и установим Java.
sudo apt-get update sudo apt-get install openjdk-6-jdk
Далее мы загрузим и установим Neo4j Enterprise edition и переименуем каталог в neo4j.
wget http://dist.neo4j.org/neo4j-enterprise-1.8-unix.tar.gz tar -xvzf neo4j-enterprise-1.8-unix.tar.gz mv neo4j-enterprise-1.8 neo4j
Нам нужно немного изменить верхний предел количества файлов, которые мы можем открыть. Мы можем зайти в root и отредактировать файл limit.conf:
sudo su vi /etc/security/limits.conf
Мы добавим две записи, устанавливающие ограничения файла 40000 для пользователя Ubuntu.
ubuntu soft nofile 40000 ubuntu hard nofile 40000
Перезагрузите экземпляр и в ожидании его запуска мы будем использовать неуправляемое расширение, созданное Крисом Джиораном, для работы с балансировщиком нагрузки Amazon.
git clone git://github.com/maxdemarzi/ha-rest-master-info.git cd ha-rest-master-info mvn package cd ..
Это создаст файл ha-rest-master-info / target / ha-rest-master-info-0.2.jar, который мы хотим скопировать в наш экземпляр.
scp -i ha_cluster.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ha-rest-master-info/target/ha-rest-master-info-0.2.jar [email protected]:/home/ubuntu/neo4j/plugins
Переподключитесь к экземпляру и проверьте, что ограничения на количество открытых файлов обновления теперь возвращают 40000.
ssh -i ha_cluster.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected] ulimit -n
Также убедитесь, что файл JAR сделал это:
ls neo4j/plugins ha-rest-master-info-0.2.jar README.txt
Отлично, теперь давайте настроим Neo4j для его использования. Отредактируйте neo4j-server.properties и внесите следующие изменения:
Установите сервер на текущий IP. Вам нужно будет изменить это значение на 152 и 153 для других членов кластера.
vi neo4j/conf/neo4j-server.properties org.neo4j.server.webserver.address=10.0.0.151
Мы также должны указать Neo4j работать в режиме высокой доступности, раскомментировав строку ниже:
org.neo4j.server.database.mode=HA
Наконец, включите код в добавленный нами jar-файл:
org.neo4j.server.thirdparty_jaxrs_classes=org.neo4j.ha.server.rest.info=/ha-info/
Нам также нужно отредактировать файл neo4j.properties :
Сначала установите для идентификатора сервера значение 1 (или 2 или 3 для других экземпляров).
vi neo4j/conf/neo4j.properties ha.server_id = 1
Во-вторых, установите адреса 3 координаторов:
ha.coordinators=10.0.0.151:2181,10.0.0.152:2181,10.0.0.153:2181
Наконец, измените настройку сервера на 10.0.0.151 (или 152, 153 в других экземплярах).
ha.server = 10.0.0.151:6001
Давайте настроим 3 координатора, по одному для каждого из экземпляров ec2, которые мы раскрутим, заменив записи в
координирующем.cfg на соответствующие записи ниже.
vi neo4j/conf/coord.cfg server.1=10.0.0.151:2888:3888 server.2=10.0.0.152:2888:3888 server.3=10.0.0.153:2888:3888
Наконец, мы хотим убедиться, что все экземпляры знают друг о друге, поэтому отредактируйте файл hosts:
sudo vi /etc/hosts 10.0.0.151 ip-10-0-0-151 10.0.0.152 ip-10-0-0-152 10.0.0.153 ip-10-0-0-153
На данный момент мы хотим сделать еще две копии. Таким образом, мы можем повторить эти шаги еще два раза или, что еще лучше, создать образ вашего экземпляра и клонировать его.
Он перезапустит экземпляр, на котором вы находитесь (и выйдете из системы), но через минуту или три вы сможете перейти в раздел Images> AMIs и запустить клон вашего первого экземпляра.
Убедитесь, что вы запускаете его внутри VPC, а не на EC2.
Запустите 1 за раз, чтобы вы могли указать IP-адрес для 10.0.0.152 и 153.
Выберите уже существующую группу безопасности и дайте экземплярам подойти.
Убедитесь, что вы изменили файлы neo4j.properties и neo4j-server.properties, как указано выше:
vi neo4j/conf/neo4j.properties ha.server_id=2 (and then 3) ha.server = 10.0.0.152:6001 (and then 153)
vi neo4j/conf/neo4j-server.properties org.neo4j.server.webserver.address=10.0.0.152 (and then 153)
Вы также захотите установить идентификаторы координатора Zookeeper для каждого экземпляра:
On instance 1: echo '1' > data/coordinator/myid On instance 2: echo '2' > data/coordinator/myid On instance 3: echo '3' > data/coordinator/myid
Запустите координаторы во всех 3 случаях:
neo4j/bin/neo4j-coordinator start
Наконец, запустите Neo4j на всех 3 экземплярах (используя опцию без ожидания):
neo4j/bin/neo4j start-no-wait
Starting Neo4j Server...WARNING: not changing user process [2213]...Started the server in the background, returning...
Дайте им минуту для запуска, а затем вы можете проверить, какой из них является мастером:
curl http://10.0.0.151:7474/ha-info/masterinfo/isMaster true
Теперь мы настроим два балансировщика нагрузки. Балансировщик нагрузки, где мы будем указывать наши «чтения» и другой балансировщик нагрузки, где мы будем указывать наши «записи».
Создайте новый балансировщик нагрузки и установите для портов значение 7474:
Для нашего балансировщика нагрузки чтения мы укажем проверку работоспособности в корень:
Добавьте нашу подсеть VPC:
А также создайте новую группу безопасности, которая позволяет проходить через порт 7474:
Затем мы создадим второй балансировщик нагрузки, который указывает только на Master:
Использование / ha-info / masterinfo / isMaster в качестве пути проверки здоровья.
Добавьте все три экземпляра в оба балансировщика нагрузки:
Дайте им несколько минут, чтобы придумать:
Тогда вы можете проверить их статус. Все три экземпляра должны сообщить «In Service» для считывателя балансировки нагрузки:
Только один экземпляр должен сообщить «In Service» для балансировщика нагрузки записи:
Мы можем проверить, что они оба работают:
curl internal-Neo4j-Up-1172790076.us-west-1.elb.amazonaws.com:7474/ { "management" : "http://internal-Neo4j-Up-1172790076.us-west-1.elb.amazonaws.com:7474/db/manage/", "data" : "http://internal-Neo4j-Up-1172790076.us-west-1.elb.amazonaws.com:7474/db/data/" }
… И чтобы убедиться, что балансировщик нагрузки записи указывает на мастер:
curl internal-Neo4j-Master-864793314.us-west-1.elb.amazonaws.com:7474/ha-info/masterinfo/isMaster true
Теперь у вас есть кластер Neo4j, запущенный на VPC в облаке Amazon. Вы можете указать свои серверы приложений на эти балансировщики нагрузки и перейти оттуда. Если это казалось немного сложным … ну, это так. Ищите упрощенное решение для кластеризации в Neo4j версии 1.9.
Ознакомьтесь с различными вариантами конфигурации в документации Neo4j . В частности, настройки ha.pull_interval и ha.tx_push_factor.
Если у вас возникли проблемы с Zookeeper, вы должны сбросить кластер координаторов в чистое состояние, закрыв все экземпляры, удалив файлы данных data / координатор / версия-2 / * и перезапустив координаторы.
Также ознакомьтесь с сообщением в блоге Гарольда Спенсера-младшего об использовании эвкалипта и руководством « Сделай сам на Amazon EC2» .
Хотелось бы помочь в облегчении этого процесса, поэтому, если вы обладаете сумасшедшими навыками Amazon EC2 и знаете, как лучше это автоматизировать, оставьте комментарий ниже. Благодаря!