Дано: существующий кластер 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-файл создается кривоватый.
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).
Добавляем репозитории с 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
На всех нодах
Добавляем репозиторий с 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
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
Автор: avssav