Настройка CouchDB и ElasticSearch на сервере Ubuntu 13.10

Что такое 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: , , , , , , , , ,

Добавить комментарий