Жизнь системного администратора подкинула нового зверя на и без того тернистый путь. Потребовалось клиенту под проект в обязательном порядке использовать Couchbase.
Под катом инструкция по его установке, добавлению в кластер и балансировке данных. А вдруг кому будет полезно.
Установка Couchbase.
Устанавливаем openssl098e.
Скачиваем и устанавливаем couchbase 2.1.1
wget http://packages.couchbase.com/releases/2.1.1/couchbase-server-community_x86_64_2.1.1.rpm
rpm -Uhv couchbase-server-community_x86_64_2.1.1.rpm
В нашей компании активно используется виртуализация OpenVZ, а для нормальной работы couchbase в контейнере openvz необходим файл memsup из пакета erlang-os-mon версии не ниже 2.2.10.
Что делаем:
Останавливаем couchbase:
service couchbase-server stop
Для начала нужно скачать сам erlang, например, с официального сайта www.erlang.org/download.html
И скомпилировать нужную библиотеку, которая находится по пути lib/os_mon/priv
Затем, из lib/os_mon/priv/bin берем memsup и помещаем в каталог /opt/couchbase/lib/erlang/lib/os_mon-2.2.7/priv/bin/
Выставляем на него права:
chown bin:bin /opt/couchbase/lib/erlang/lib/os_mon-2.2.7/priv/bin/memsup
chmod a+x /opt/couchbase/lib/erlang/lib/os_mon-2.2.7/priv/bin/memsup
Запускаем сервер couchbase-server и пользуемся.
Админка по умолчанию доступна по hostname:8091/
Добавление нового сервера в кластер и балансировка данных.
Внимание!!! Перед добавлением нового сервера в кластер необходимо снять бэкап БД.
Например, так:
/opt/couchbase/bin/cbbackup -u Administrator -p PASSWORD http://localhost:8091/ /tmp/cbbackup/
Или, если нужен бэкап только одного бакета, остальные не важны:
/opt/couchbase/bin/cbbackup -u Administrator -p PASSWORD http://localhost:8091/ /tmp/cbbackup/ -b SRC_BUCKET
При добавлении нового сервера в кластер couchbase, необходимо сделать ребалансировку данных и может случиться так, что ребалансировка не проходит и в логе будет ошибка примерно такого содержания:
<0.20769.2129> exited with {unexpected_exit,
{'EXIT',<0.20785.2129>,
{badmatch,
[{'EXIT',
{{badmatch,{error,closed}},
{gen_server,call,
[<19210.18145.6>,had_backfill,30000]}}}]}}}
Вариант 1.
На hw ноде можно попробовать изменить vm.swappiness на время балансировки данных и повторно запустить ребалансировку:
sysctl -w vm.swappiness=0
Если балансировка не прошла:
Вариант 2. (Очищаем, либо удаляем бакет)
1. Смотрим через админку couchbase host:8091/ на каком бакете валится балансировка (вкладка Server Nodes и открываем сами сервера)
2. Идем на вкладку Data Bucket, открываем нужный бакет, а в нём кнопку (Edit)
3. Ищем в самом низу, рядом с кнопкой DELETE кнопку FLUSH. (Если её нет, чуть выше ставим галочку Flush-Enable.) И нажимаем FLUSH, тем самым очищаем содержимое бакета (Бэкап же у нас есть)
4. Если бакет очистился нормально, делаем снова ребалансировку. Если прошла то заливаем бакет назад.
/opt/couchbase/bin/cbrestore -u Administrator -p PASSWORD /tmp/cbbackup/ http://host:8091/ -b <_имя_бакета_>
5. Если бакет не очищается, либо если после очистки балансировка также не проходит на нем, то
6. В меню редактирования бакета (Edit) запоминаем (записываем) о нем всю информацию и удаляем его. После этого создаем новый с такими же параметрами и заливаем бэкап.
И так по каждому бакету.
И очень полезная команда, чаще всего приходится пользоваться:
/opt/couchbase/bin/cbrestore -u Administrator -p PASSWORD -b SRC_BUCKET -B DST_BUCKET -k "key1|key2|key3|key...|KeyN" /tmp/cbbackup/ http://localhost:8091
Восстанавливает отдельные ключи.
Автор: akhaustov