Ceph

Материал из AdminWiki
Перейти к: навигация, поиск

Содержание

Краткое описание Calamari

Calamari - это система мониторинга и управления кластером распределенного файлового хранилища CEPH. В нее входят:

  • calamari-server - собственно сам сервер, бэкенд
  • calamari-clients - фронтенд (веб-интерфейс), устанавливается вместе с сервером
  • salt-master - сервер управления файлами конфигурации, устанавливается вместе с calamari-server
  • salt-minon - клиент получающий файлы конфигурации, устанавливается на все машины кластера CEPH
  • diamond - сборщик статистики, устанавливается на все машины кластера CEPH

Разумеется потребуется и другое программное обеспечение (например PostgresQL). Но его не нужно дополнительно настраивать, в отличие от упомянутых. Требуется только установить.

Первоначальные настройки дистрибутива

Устанавливаем свежий Ubuntu 14.04.1 (Trusty Tahr)

В моем варианте поставлена минимальная стандартная серверная конфигурация, т.е. в /var/log/apt/history.log присутствует следующая строка

Commandline: apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y install minimal^ openssh-server^ server^ standard^

Таким образом, некоторые пакеты (например: software-properties-common) уже присутствуют в системе. Также, несмотря на то, что некоторые необходимые для сборки пакеты (например: libssl-dev) придут по зависимостям от устанавливаемых пакетов, я их все равно буду указывать для установки, так как они обозначены в документации и рассмотренных статьях.

Для удобства установлен Midnight Commander.

Создан пользователь ceph с правами root через sudo.

По умолчанию aptitude настроен на автоматическую установку рекомендованных пакетов. Оставляем без изменения.

Обновление Ubuntu

sudo aptitude update && sudo aptitude -y upgrade

Если обновилось что-нибудь важное. Например, в моем случае, это пакет с ядром linux-image, тогда перезагружаемся

sudo reboot

Меняем часовой пояс с Самарского на Московский (по желанию)

sudo dpkg-reconfigure tzdata

Устанавливаем инструменты для сборки пакетов

sudo aptitude -y install build-essential debhelper devscripts git make g++

Важно

В последующих трёх пунктах я провожу сборку пакетов. Каждый из пакетов можно собирать на отдельной машине, но первоначальные настройки дистрибутива нужно проводить обязательно.

Установка окружения для calamari-server и сборка пакета

Устанавливаем зависимости для сборки calamari-server. Они указаны в Build-Depends или обнаружены мной как важные для процесса сборки. Как уже упоминал в начале статьи - некоторые из них уже установлены.

sudo aptitude -y install libcairo2-dev libpq-dev python-dev python-pip python-virtualenv python-crypto python-m2crypto python-mako \
python-msgpack python-zmq cython libssl-dev lsb-release openssl curl software-properties-common swig libzmq-dev python-cairo \
python-sphinx reprepro

Создаем каталог, в котором будем проводить работы и клонируем репозитории с calamari-server.

ceph@calamari:~$ mkdir -p ~/dev; cd ~/dev
ceph@calamari:~/dev$ git clone https://github.com/ceph/calamari.git 
ceph@calamari:~/dev$ cd calamari

Пробуем собрать

ceph@calamari:~/dev/calamari$ dpkg-buildpackage

<spoiler title="Получаем">

dpkg-buildpackage: source package calamari
dpkg-buildpackage: source version 1.0.0-1
dpkg-buildpackage: source distribution precise
dpkg-buildpackage: source changed by Gary Lowell <glowell@pudgy.ops.newdream.net>
dpkg-buildpackage: host architecture amd64
 dpkg-source --before-build calamari
 fakeroot debian/rules clean
dh clean --with python2
   dh_testdir
   dh_auto_clean
        make -j1 clean
make[1]: Entering directory `/home/ceph/dev/calamari'
target: clean
rm -rf venv rest-api/calamari_rest/version.py
make[1]: Leaving directory `/home/ceph/dev/calamari'
   dh_clean
        rm -f debian/calamari-server.substvars
        rm -f debian/calamari-server.*.debhelper
        rm -rf debian/calamari-server/
        rm -f debian/*.debhelper.log
        rm -f debian/files
        find .  \( \( -type f -a \
                \( -name '#*#' -o -name '.*~' -o -name '*~' -o -name DEADJOE \
                 -o -name '*.orig' -o -name '*.rej' -o -name '*.bak' \
                 -o -name '.*.orig' -o -name .*.rej -o -name '.SUMS' \
                 -o -name TAGS -o \( -path '*/.deps/*' -a -name '*.P' \) \
                \) -exec rm -f {} + \) -o \
                \( -type d -a -name autom4te.cache -prune -exec rm -rf {} + \) \)
        rm -f *-stamp
 dpkg-source -b calamari
dpkg-source: error: can't build with source format '3.0 (quilt)': no upstream tarball found at ../calamari_1.0.0.orig.tar.{bz2,gz,lzma,xz}
dpkg-buildpackage: error: dpkg-source -b calamari gave error exit status 255

</spoiler> Видим ошибку

dpkg-source: error: can't build with source format '3.0 (quilt)': no upstream tarball found at ../calamari_1.0.0.orig.tar.{bz2,gz,lzma,xz}
dpkg-buildpackage: error: dpkg-source -b calamari gave error exit status 255

и три строки, которые мозолят глаза:

dpkg-buildpackage: source version 1.0.0-1
dpkg-buildpackage: source distribution precise
dpkg-buildpackage: source changed by Gary Lowell <glowell@pudgy.ops.newdream.net>

Версия Calamari уже не та. Дистрибутив должен быть trusty. Да и пакет собираю я, а не Гэри. Ошибка, из-за которой прекратилась сборка пакета, мне тоже не нравится.

Поэтому, я буду собирать пакет по-своему.

BugFix Ошибка dpkg-buildpackage возникает потому, что в версии от разработчика в качестве формата пакета дебиан указана версия '3.0 (quilt)'. Меняем формат.

ceph@calamari:~/dev/calamari$ echo '3.0 (native)' > debian/source/format

Собираем пакет: Меняем файл debian/changelog в соответствием с нашим именем, адресом email, а также с версией, ревизией, релизом и важностью пакета.

ceph@calamari:~/dev/calamari$ DEBEMAIL=your@email.com DEBFULLNAME="Your Name" dch \
-v `./get-versions.sh VERSION`-`./get-versions.sh REVISION`-1 -D trusty -u low 'Switch to dpkg-source 3.0 (native) format'

Проверяем

ceph@calamari:~/dev/calamari$ head -5 debian/changelog
calamari (1.2.1-100-ge0b9b21-1) trusty; urgency=low
 
  * Switch to dpkg-source 3.0 (native) format
 
 -- Your Name <your@email.com>  Wed, 10 Dec 2014 17:05:10 +0300

После этого пакет собирается без ошибок, с правильной версией, ревизией, релизом и важностью. По понятным причинам не привожу вывод dpkg-buildpackage.

ceph@calamari:~/dev/calamari$ dpkg-buildpackage

Проверяем

ceph@calamari:~/dev/calamari$ ls -la ..
total 12016
drwxrwxr-x  3 ceph ceph     4096 Dec 10 17:20 .
drwxr-xr-x  5 ceph ceph     4096 Dec 10 17:11 ..
drwxrwxr-x 20 ceph ceph     4096 Dec 10 17:11 calamari
-rw-rw-r--  1 ceph ceph     1396 Dec 10 17:20 calamari_1.2.1-100-ge0b9b21-1_amd64.changes
-rw-rw-r--  1 ceph ceph      750 Dec 10 17:11 calamari_1.2.1-100-ge0b9b21-1.dsc
-rw-rw-r--  1 ceph ceph  1278706 Dec 10 17:11 calamari_1.2.1-100-ge0b9b21-1.tar.gz
-rw-r--r--  1 ceph ceph 10998618 Dec 10 17:20 calamari-server_1.2.1-100-ge0b9b21-1_amd64.deb

Возвращаемся в родительский каталог

ceph@calamari:~/dev/calamari$ cd ..

Установка окружения и сборка diamond

Важно: Если собираем пакет на отдельной машине - не забываем о выполнении 1 пункта статьи.

Устанавливаем зависимости для сборки diamond

sudo aptitude -y install python-mock cdbs python-support python-configobj

Скачиваем репозиторий diamond.

mkdir -p ~/dev; cd ~/dev
ceph@calamari:~/dev$ git clone https://github.com/ceph/Diamond.git --branch=calamari
ceph@calamari:~/dev$ cd Diamond
ceph@calamari:~/dev/Diamond$ DEBEMAIL=your@email.com DEBFULLNAME="Your Name" dch -v `./version.sh`-1 -D trusty \
-u low `/bin/echo -n "built on "; date`

Проверяем

ceph@calamari:~/dev/Diamond$ head -5 debian/changelog
diamond (3.4.67-1) trusty; urgency=low
 
  * built on Wed Dec 10 17:57:02 MSK 2014
 
 -- Your Name <your@email.com>  Wed, 10 Dec 2014 17:57:02 +0300

Собираем пакет

ceph@calamari:~/dev/Diamond$ dpkg-buildpackage

Проверяем

ceph@calamari:~/dev/Diamond$ ls -la ..
total 4572
drwxrwxr-x  3 ceph ceph    4096 Dec 10 18:00 .
drwxr-xr-x  4 ceph ceph    4096 Dec 10 17:54 ..
drwxrwxr-x 11 ceph ceph    4096 Dec 10 18:00 Diamond
-rw-r--r--  1 ceph ceph  232292 Dec 10 18:00 diamond_3.4.67-1_all.deb
-rw-rw-r--  1 ceph ceph    1182 Dec 10 18:00 diamond_3.4.67-1_amd64.changes
-rw-rw-r--  1 ceph ceph     723 Dec 10 18:00 diamond_3.4.67-1.dsc
-rw-rw-r--  1 ceph ceph 4427329 Dec 10 18:00 diamond_3.4.67-1.tar.gz

Возвращаемся в родительский каталог

ceph@calamari:~/dev/Diamond$ cd ..

Установка окружения для calamari-clients и его сборка

Важно: Если собираем пакет на отдельной машине - не забываем о выполнении 1 пункта статьи.

Добавляем репозитории с node.js:

echo "deb http://ppa.launchpad.net/chris-lea/node.js/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/nodejs.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B9316A7BC7917B12

Обновляем списки пакетов:

sudo aptitude update

Устанавливаем зависимости для сборки calamari-clients:

sudo aptitude -y install ruby1.9.1 ruby1.9.1-dev python-software-properties nodejs

Устанавливаем зависимости с помощью NPM и Gem:

sudo npm install -g bower@1.3.8
sudo npm install -g grunt-cli
sudo gem install compass

В некоторых статьях рекомендуется ставить gem без sudo, но у меня ругалось на права доступа до системных каталогов. Наступив еще на одни "грабли", поставил через sudo и следующей строкой поправил последствия воздействия пользователя root

sudo chown -R ceph  ~/.npm

Внимание: Установка зависимостей через NPM и Gem, и сборка calamari-clients у меня совпала со временем блокировки github'а. Будьте бдительны. Без доступа этому ресурсу вы поймаете много проблем. Возможно, не решаемых без полноценного(не анонимного) прокси или vpn.

Скачиваем репозиторий calamari-clients

mkdir -p ~/dev; cd ~/dev
ceph@calamari:~/dev$ git clone https://github.com/ceph/calamari-clients.git
ceph@calamari:~/dev$ cd calamari-clients

Скачиваем патч (в родительский каталог)

ceph@calamari:~/dev/calamari-clients$ wget https://raw.githubusercontent.com/avssav/patches/master/calamari-clients/makefile.patch -qO \
 ../makefile.patch

На тот случай, если гитхаб снова отвалиться оставлю здесь diff-файл. При копировании с экрана diff-файл создается кривоватый. <spoiler title="../makefile.patch">

ceph@calamari:~/dev/calamari-clients$ echo 'diff -ruN a/Makefile b/Makefile
--- a/Makefile  2014-12-03 10:13:32.486463458 +0300
+++ b/Makefile  2014-12-03 10:14:10.994462934 +0300
@@ -45,7 +45,7 @@
 DATESTR=$(shell /bin/echo -n "built on "; date)
 set_deb_version:
        DEBEMAIL=$(DEBEMAIL) dch \
-               --newversion $(VERSION)-$(REVISION)$(BPTAG) \
+               --newversion $(VERSION)-$(REVISION)$(BPTAG) -u low \
                -D $(DIST) --force-bad-version --force-distribution "$(DATESTR)"
 
 build:' > ../makefile.patch

</spoiler> Применяем патч:

ceph@calamari:~/dev/calamari-clients$ patch -ZEfsp1 < ../makefile.patch

Собираем deb-пакет calamari-clients.

ceph@calamari:~/dev/calamari-clients$ DEBEMAIL=your@email.com DEBFULLNAME="Your Name" DIST=trusty BPTAG=-1 REAL_BUILD=y make dpkg

Проверяем

ceph@calamari:~/dev/calamari-clients$ ls -la ..
total 936
drwxrwxr-x  3 ceph ceph   4096 Dec 10 18:54 .
drwxr-xr-x  8 ceph ceph   4096 Dec 10 18:45 ..
drwxrwxr-x 11 ceph ceph   4096 Dec 10 18:41 calamari-clients
-rw-r--r--  1 ceph ceph 838592 Dec 10 18:54 calamari-clients_1.2.1.1-53-gddd7187-1_all.deb
-rw-rw-r--  1 ceph ceph    810 Dec 10 18:54 calamari-clients_1.2.1.1-53-gddd7187-1_amd64.changes
-rw-rw-r--  1 ceph ceph  92902 Dec 10 18:54 calamari-clients-make-dpkg.txt
-rw-rw-r--  1 ceph ceph    431 Dec 10 18:41 makefile.patch

Возвращаемся в родительский каталог

ceph@calamari:~/dev/calamari-clients$ cd ..

Установка calamari-server

Сервер устанавливаю на отдельной машине. Выполняю все подпункты пункта 1, кроме последнего (5).

Добавляем репозитории с saltstack:

echo "deb http://ppa.launchpad.net/saltstack/salt/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/saltstack.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4759FA960E27C0A6
sudo aptitude update

Устанавливаем систему управления конфигурациями:

sudo aptitude -y install salt-master salt-minion salt-syndic

Устанавливаем зависимости для calamari-server

sudo aptitude install -y apache2 libapache2-mod-wsgi libcairo2 supervisor python-cairo libpq5 postgresql python-txamqp python-gevent \
python-sqlalchemy

Устанавливаем calamari-server и calamari-clients

sudo dpkg -i ./calamari-server_1.2.1-100-ge0b9b21-1_amd64.deb
sudo dpkg -i calamari-clients_1.2.1.1-53-gddd7187-1_all.deb

Настройка calamari

ceph@calamari:~$ sudo calamari-ctl initialize
[INFO] Loading configuration..
[INFO] Starting/enabling salt...
[INFO] Starting/enabling postgres...
[INFO] Initializing database...
[INFO] Initializing web interface...
[INFO] You will now be prompted for login details for the administrative user account.  This is the account you will use to log into the web interface once setup is complete.
Username (leave blank to use 'root'): 
Email address: your@email.com
Password:
Password (again):
Superuser created successfully.
[INFO] Starting/enabling services...
[INFO] Restarting services...
[INFO] Complete.

Добавляем ноды Ceph в мониторинг calamari

На всех нодах Добавляем репозиторий с salt-minion

echo "deb http://ppa.launchpad.net/saltstack/salt/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/saltstack.list
wget -q -O - "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6" | sudo apt-key add -
sudo aptitude update

Устанавливаем зависимости для установки diamond

sudo aptitude -y install python-support python-configobj

Diamond и его настройки

sudo dpkg -i diamond_3.4.67-1_all.deb
sudo cp /etc/diamond/diamond.conf.example /etc/diamond/diamond.conf

Salt-minion и его настройки

sudo aptitude -y install salt-minion
echo "master: CALAMARI_SERVER_IP" | sudo tee /etc/salt/minion.d/calamari.conf
sudo update-rc.d salt-minion defaults

Перезапускаем

sudo service salt-minion restart
sudo service diamond restart

Авторизация кластера Ceph в Calamari

После выполнения предыдущего пункта клиенты salt-minion с машин Ceph будут пытаться обновиться с мастера. На машине с calamari-server и salt-master выполняем

ceph@calamari:~$ sudo salt-key -L
Accepted Keys:
Unaccepted Keys:
ceph1
ceph2
ceph3
ceph4
ceph5
Rejected Keys:

Видим список машин кластера. Разрешаем им доступ

ceph@calamari:~$ sudo salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
ceph1
ceph2
ceph3
ceph4
ceph5
Proceed? [n/Y] y
Key for minion ceph1 accepted.
Key for minion ceph2 accepted.
Key for minion ceph3 accepted.
Key for minion ceph4 accepted.
Key for minion ceph5 accepted.

Все должно работать

Логинимся через броузер на http://CALAMARI_SERVER_IP с логином и паролем указанными при настройке (calamari-ctl initialize).

Полезные мелочи

Синхронизация настроек diamond на нодах Ceph происходит автоматически. Однако есть команда обновления настроек вручную

sudo salt-call state.highstate

Следующая команда проверит связность ноды Ceph с calamari-server

sudo salt-call ceph.get_heartbeats

Проверка на salt-master всех подключенных к нему salt-minion'ов

sudo salt '*' ceph.get_heartbeats

Примечание: В статье не включены некоторые промежуточные результаты. Например, исключен патч, который устранял неприятную ошибку. Но, проверяя статью, я в очередной раз клонировал calamari с гитхаба, применял свой патч и патч не сработал. В общем, как оказалось, пока я писал статью - calamari'вцы пофиксили багу в основной ветке.

Материалы

Compiling Calamari for Ceph on Ubuntu 14.04

Ceph Calamari: Step-by-step

Build package and Install Calamari on Debian Weezy

Ceph Calamari : The Survival Guide

Calamari Documentation

Precise Build Instructions

Оригинал статьи