Настройка CouchDB и ElasticSearch на сервере Ubuntu 13.10
Ubuntu, VPS | Комментировать запись
Что такое CouchDB?
CouchDB – это база данных NoSQL, которая хранит данные как документы json. Эта очень простая в использовании СУБД предоставляет гибкую модель данных. CouchDB также поддерживает непрерывную репликацию master-master, а это означает, что данные могут непрерывно реплицироваться между двумя базами данных без необходимости устанавливать сложную систему ведущей и ведомой баз данных (master и slave).
Что такое ElasticSearch?
ElasticSearch – это полнотекстовый поисковой движок, который индексирует любую информацию и способен найти практически все. Он отлично взаимодействует с CouchDB, поскольку CouchDB имеет одну особенность: для всех запросов необходимо либо знать идентификатор документа, либо использовать MapReduce.
Установка CouchDB
Чтобы получить последнюю версию CouchDB, скомпилируйте ее из исходного кода. За справкой обратитесь к руководству «Компилирование CouchDB из исходного кода».
Настройка среды
Обновите пакетный менеджер:
apt-get update
Установите инструменты для компилирования:
apt-get install -y build-essential
Установите Erlang, язык программирования, на котором написана СУБД CouchDB:
apt-get install -y erlang-base erlang-dev erlang-nox erlang-eunit
Затем установите остальные библиотеки, необходимые для корректной работы CouchDB:
apt-get install -y libmozjs185-dev libicu-dev libcurl4-gnutls-dev libtool
Загрузка исходных файлов
Перейдите в каталог, в котором будут храниться исходные файлы CouchDB:
cd /usr/local/src
Скачайте исходный код:
curl -O http://apache.mirrors.tds.net/couchdb/source/1.5.0/apache-couchdb-1.5.0.tar.gz
Распакуйте полученный архив:
tar xvzf apache-couchdb-1.5.0.tar.gz
Перейдите в новый каталог:
cd apache-couchdb-1.5.0
Соберите и установите исходный код:
./configure
make && make install
Примечание: на выполнение данных действий может уйти некоторое время. После их выполнения нужно только создать пользователя для CouchDB и передать ему соответствующие привилегии.
Создайте пользователя CouchDB:
adduser --disabled-login --disabled-password --no-create-home couchdb
Примечание: все извещения, запрашивающие различную информацию о пользователе, можно проигнорировать, оставив значения по умолчанию.
Теперь передайте пользователю CouchDB соответствующие привилегии:
chown -R couchdb:couchdb /usr/local/var/log/couchdb /usr/local/var/lib/couchdb /usr/local/var/run/couchdb
Настройте CouchDB как сервис, чтобы не запускать его вручную:
ln -s /usr/local/etc/init.d/couchdb /etc/init.d
update-rc.d couchdb defaults
Запустите CouchDB:
service couchdb start
Убедитесь в том, что CouchDB работает:
curl localhost:5984
На экране появится сообщение, которое начинается так:
{"couchdb":"Welcome"...
Установка ElasticSearch
Начальная настройка
Установите последнюю версию open-jdk:
apt-get install openjdk-7-jre-headless
Загрузите последнюю версию ElasticSearch:
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.8.deb
Установите пакет:
dpkg -i elasticsearch-0.90.8.deb
Прежде чем продолжить, нужно настроить Elasticsearch, чтобы эта программа не была общедоступна в Интернете; Elasticsearch не имеет встроенной системы безопасности, потому любой пользователь, имеющий доступ к интерфейсу HTTP, может управлять ею. Чтобы это предотвратить, отредактируйте elasticsearch.yml. Откройте конфигурационный файл при помощи команды:
sudo vi /etc/elasticsearch/elasticsearch.yml
Найдите строку network.bind_host, раскомментируйте ее и измените ее значение на localhost; в результате должно получиться:
network.bind_host: localhost
Затем внесите в файл следующую строку, чтобы отключить динамические скрипты:
script.disable_dynamic: true
Сохраните и закройте файл. Перезапустите Elasticsearch, чтобы изменения вступили в силу:
sudo service elasticsearch restart
Убедитесь, что ElasticSearch работает (если запрос не выполняется в первый раз, попробуйте снова; запуск программы может занять некоторое время):
curl http://127.0.0.1:9200
Команда выведет сообщение, которое начинается с:
{ "ok" : true, "status" : 200,
Хранение индексов
Измените место хранения индексов ElasticSearch. Отключите ElasticSearch:
/etc/init.d/elasticsearch stop
Создайте новый каталог:
mkdir /var/data/
mkdir /var/data/elasticsearch
Передайте права на папку пользователю elasticsearch:
chown elasticsearch /var/data/elasticsearch
Измените группу:
chgrp elasticsearch /var/data/elasticsearch
Внесите новый каталог данных в конфигурационный файл ElasticSearch.
С помощью nano откройте конфигурационный файл ElasticSearch.
nano /etc/default/elasticsearch
Замените строку, содержащую:
DATA_DIR=
строкой
DATA_DIR= /var/data/elasticsearch
Сохраните и закройте файл.
Настройка взаимодействия CouchDB и ElasticSearch
Установите CouchDB River Plugin.
Перейдите в каталог ElasticSearch:
cd /usr/share/elasticsearch/
Установите плагин:
./bin/plugin -install elasticsearch/elasticsearch-river-couchdb/1.2.0
Запустите ElasticSearch
/etc/init.d/elasticsearch start
Создайте базу данных CouchDB и индекс ElasticSearch
Внесите в БД какие-нибудь данные. Чтобы создать БД, наберите:
curl -X PUT http://127.0.0.1:5984/testdb
Создайте тестовые документы:
curl -X PUT 'http://127.0.0.1:5984/testdb/1' -d '{"name":"My Name 1"}'
curl -X PUT 'http://127.0.0.1:5984/testdb/2' -d '{"name":"My Name 2"}'
curl -X PUT 'http://127.0.0.1:5984/testdb/3' -d '{"name":"My Name 3"}'
curl -X PUT 'http://127.0.0.1:5984/testdb/4' -d '{"name":"My Name 4"}'
Создайте индекс ElasticSearch:
curl -X PUT '127.0.0.1:9200/_river/testdb/_meta' -d '{ "type" : "couchdb", "couchdb" : { "host" : "localhost", "port" : 5984, "db" : "testdb", "filter" : null }, "index" : { "index" : "testdb", "type" : "testdb", "bulk_size" : "100", "bulk_timeout" : "10ms" } }'
Тестирование
Создайте тестовый запрос при помощи ElasticSearch:
curl http://127.0.0.1:9200/testdb/testdb/_search?pretty=true
Экран должен отобразить что-то вроде:
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 4,
"max_score" : 1.0,
"hits" : [ {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "4",
"_score" : 1.0, "_source" : {"_rev":"1-7e9376fc8bfa6b8c8788b0f408154584","_id":"4","name":"My Name 4"}
}, {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "1",
"_score" : 1.0, "_source" : {"_rev":"1-87386bd54c821354a93cf62add449d31","_id":"1","name":"My Name"}
}, {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "2",
"_score" : 1.0, "_source" : {"_rev":"1-194582c1e02d84ae36e59f568a459633","_id":"2","name":"My Name 2"}
}, {
"_index" : "testdb",
"_type" : "testdb",
"_id" : "3",
"_score" : 1.0, "_source" : {"_rev":"1-62a53c50e7df02ec22973fc802fb9fc0","_id":"3","name":"My Name 3"}
} ]
}
}
Теперь можно выполнять полнотекстовые запросы данных с помощью ElasticSearch, не ограничиваясь использованием map/reduce или the _id каждого документа.
Tags: CouchDB, CouchDB River Plugin, ElasticSearch, Erlang, Linux, NoSQL, OpenJDK, Ubuntu, Ubuntu 13.10, VPS