Pull to refresh

Сборка и установка пакетов системы мониторинга Calamari для распределенного хранилища CEPH 0.87 на Ubuntu 14.04.1 (Trusty Tahr)

Reading time 11 min
Views 13K
Дано: существующий кластер CEPH 0.87. Задача: обеспечить мониторинг. Задача № 2: Написать инструкцию (попроще).

Я погуглил и нашел Calamari. Покопал дальше и нашел несколько статей на английском по сборке и установке. Попробовал поставить, наступил на несколько «граблей». В результате пришел к написанию этой статьи.
Отмечу, что пакеты, собранные в результате, вряд ли полностью соответствует debian-policy по сборке deb-пакетов. Обеспечить мониторинг важнее.

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


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

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

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


1. Устанавливаем свежий 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 настроен на автоматическую установку рекомендованных пакетов. Оставляем без изменения.

Я предполагаю, что все, написанное ранее, вы сможете сделать без чьей-либо помощи. А далее постараюсь описать свои действия как можно подробнее.
2. Обновляем:
sudo aptitude update && sudo aptitude -y upgrade

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

4. Меняем часовой пояс с Самарского на Московский (по желанию):
sudo dpkg-reconfigure tzdata

5. Устанавливаем инструменты для сборки пакетов:
sudo aptitude -y install build-essential debhelper devscripts git make g++

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

2. Установка окружения для 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

Получаем
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


Видим ошибку
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 ..

3. Установка окружения и сборка 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 ..

4. Установка окружения для 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-файл создается кривоватый.
../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


Применяем патч:
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 ..

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


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

UPDATE 2015.07:
Saltstack от разработчика обновилась до версии 2015.07. Calamari с ним не работает. Устанавливаем saltstack следующим образом
sudo aptitude -y install python-pip
sudo pip install 'salt==2014.7.0'

Установка salt-master до 2015.07 (оставляю для информации)
Добавляем репозитории с 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.

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


UPDATE 2015.07:
Saltstack от разработчика обновилась до версии 2015.07. Calamari с ним не работает. Устанавливаем saltstack следующим образом.
На всех нодах
Устанавливаем gdebi
sudo aptitude -y install gdebi-core

Diamond и его настройки
sudo gdebi --option=APT::Get::force-yes=1,APT::Get::Assume-Yes=1 -n diamond_3.4.67-1_all.deb
sudo cp /etc/diamond/diamond.conf.example /etc/diamond/diamond.conf

Salt-minion и его настройки
wget https://github.com/avssav/packages/raw/master/saltstack/salt-common_2014.7.0%2Bds-2trusty1_all.deb
wget https://github.com/avssav/packages/raw/master/saltstack/salt-minion_2014.7.0%2Bds-2trusty1_all.deb
sudo gdebi --option=APT::Get::force-yes=1,APT::Get::Assume-Yes=1 -n salt-common_2014.7.0+ds-2trusty1_all.deb
sudo gdebi --option=APT::Get::force-yes=1,APT::Get::Assume-Yes=1 -n salt-minion_2014.7.0+ds-2trusty1_all.deb
echo "master: CALAMARI_SERVER_IP" | sudo tee /etc/salt/minion.d/calamari.conf
sudo update-rc.d salt-minion defaults


Установка salt-minion до 2015.07 (оставляю для информации)
На всех нодах
Добавляем репозиторий с 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

7. Авторизация кластера 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.

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


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

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


Синхронизация настроек 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'вцы пофиксили багу в основной ветке.

9. Материалы


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
Tags:
Hubs:
+8
Comments 8
Comments Comments 8

Articles