Глава 5. Мониторинг кластеров Ceph с применением Calamari

В данной главе мы охватим:

  • Мониторинг кластера Ceph - классический путь

  • Мониторинг кластеров Ceph

  • Введение в Ceph Calamari

  • Построение пакетов Calamari сервер

  • Построение пакетов Calamari клиент

  • Наладка главного сервера Calamari

  • Добавление узлов Ceph в Calamari

  • Мониторинг кластера Ceph в инструментальной панели Calamari

  • Обнаружение ошибок Calamari

 Введение

Вне зависимости от того есть ли у вас небольшой, средний или экзамасштабный кластер, мониторинг является наиболее критически важной частью вашей инфраструктуры. После окончания вами проектирования, развёртывания и реализации промышленных служб вашего кластера Ceph, мониторинг становится главной обязанностью администратора системы хранения. В данной главе мы узнаем о различных подходах к наблюдению за вашим кластером Ceph и его компонентами. Мы рассмотрим как мониторинг через командную строку (CLI), так и через графический интерфейс (GUI), использующий встроенный инструментария CLI; мы также внедрим Calamari, являющийся инструментальной панелью управления кластером Ceph с открытым исходным кодом.

 Мониторинг кластера Ceph - классический путь

Будучи администратором системы хранения, вам необходимо отслеживать ваш кластер хранения Ceph и выяснять что происходит в нём в данный момент. Регулярное и дисциплинированное отслеживание держит вас в курсе о состоянии вашего кластера. На основании уведомлений мониторинга вы получите небольшой зазор по времени для принятия необходимых мер до отключения службы.

Наблюдение за кластером Ceph является повседневной задачей, которая включает в себя мониторинг MON, OSD, MDS, PG, а также подготовку служб хранения таких, как RBD, Radosgw, CephFS и клиентов Ceph. По умолчанию Ceph поставляется с богатым набором инструментария командной строки и API для выполнения наблюдения за этими компонентами. Кроме того, существуют проекты с открытым исходным кодом которые интенсивно развиваются для целей мониторинга кластеров Ceph в инструментальной панели единого обзора с GUI. В следующем рецепте мы сосредоточимся на инструментах CLI Ceph для мониторинга кластера.

 Мониторинг кластеров Ceph

В этом рецепте мы будем изучать команды, применяемые для мониторинга всего кластера Ceph.

  Как это сделать...

Здесь мы распространяемся о мониторинге вашего кластера Ceph. Далее шаги раскрываются в поясняющих темах.

Проверка жизнеспособности кластера

Для проверки жизнеспособности вашего кластера примените команду ceph с последующим health в качестве параметра:

# ceph health
	   

Вывод этой команды будет состоять из нескольких разделов, разделяемых точкой с запятой:

	[root@ceph-node1 ~]# ceph health 
	HEALTH_WARN 64 pgs degraded; 1408 pgs stuck unclean; recovery 1/5744 objects degraded (0.017%) 
	[root@ceph-node1 ~]# 
	   

Первый раздел вывода показывает что ваш кластер находится в состоянии предостережения, HEALTH_WARN, поскольку 64 группы размещения (PG, placement groups) деградировали. Второй раздел представляет, что 1408 PG не очищены, третий раздел вывода представляет, что кластер выполняет восстановление 1 из 5744 объектов и этот кластер на 0.017% деградировал. Если ваш кластер жизнеспособен, вы получите вывод, что HEALTH_OK.

Для получения дополнительных деталей по состоянию вашего кластера примените команду ceph health detail. Эта команда сообщит вам обо всех PG, которые не активны и не очищены, т.е. здесь будут выведены с подробностями все PG, которые не очищены, не согласованы и деградировали. Если ваш кластер в жизнеспособен, вы получите вывод, что HEALTH_OK.

Вывод этой команды будет состоять из нескольких разделов, разделяемых точкой с запятой:

	[root@ceph-node2 ceph]# ceph health detail 
	HEALTH_ERR 61 pgs degraded; 6 pgs inconsistent; 1312 pgs stuck unclean; recovery 3/5746 objects degraded (0.052%); 8 scrub errors 
	pg 9.76 is stuck unclean since forever, current state active+remapped, last acting [7,3,2] 
	pg 8.77 is stuck unclean since forever, current state active+remapped, last acting [4,6,8] 
	pg 7.78 is stuck unclean for 788849.714074, current state active+remapped, last acting [6,5,1] 
	pg 6.79 is stuck unclean since forever, current state active+remapped, last acting [4,7,8] 
	pg 5.7a is stuck unclean since forever, current state active+remapped, last acting [7,4,2] 
	pg 4.7b is stuck unclean since forever, current state active+remapped, last acting [7,3,1] 
	pg 11.74 is stuck unclean for 788413.925336, current state active+remapped, last acting [4,7,8] 
	pg 10.75 is stuck unclean for 788412.797947, current state active+remapped, last acting [7,3,0] 
	   

Мониторинг событий кластера

Вы можете наблюдать за событиями кластера применяя команду ceph с параметром -w. Эта команда высветит сообщения обо всех событиях вашего кластера, включая информационные (INF), предостерегающие (WRN) и сообщения об ошибках (ERR) в реальном времени. Вывод данной команды будет непрерывным, изменяемым кластеров вживую; для возврата в оболочку вы можете применить Ctrl + C:

# ceph -w

	[root@ceph-node1 ~]# ceph -w 
	    cluster 9609b429-eee2-4e23-af31-28a24fcf5cbc 
	     health HEALTH_OK 
	     monmap e3: 3 mons at {ceph-node1=192.168.1.101:6789/0,ceph-node2=192.168.1.102:6789/0,ceph-node3=192.168.1.103:6789/0}, election epoch 640, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3 
	     mdsmap e68: 1/1/1 up {0=ceph-node2=up:active} 
	     osdmap e1821: 9 osds: 9 up, 9 in 
	      pgmap v20731: 1628 pgs, 45 pools, 2422 MB data, 3742 objects 
	            7605 MB used, 127 GB / 134 GB avail 
	                1628 active+clean 
	
	2015-06-06 20:13:27.047075 mon.0 [INF] pgmap v20731: 1628 pgs: 1628 active+clean; 2422 MB data, 7605 MB used, 127 GB / 134 GB avail; 7931 kB/s, 1 objects/s recovering 
	2015-06-06 20:14:25.958762 mon.0 [INF] from.'client.? 192.168.1.103:0/1008239' entity='cli ent.admin' cmd.[{"prefix": "pg repair", "pgid": "43.29"}]: dispatch 
	2015-06-06 20:14:32.031029 mon.0 [INF] pgmap v20732: 1628 pgs: 1628 active+clean; 2422 MB data, 7605 MB used, 127 GB / 134 GB avail 
	2015-06-06 20:14:57.541278 mon.0 [INF] pgmap v20733: 1628 pgs: 1628 active+clean; 2422 MB data, 7621 MB used, 127 GB / 134 GB avail 
	2015-06-06 20:15:02.371735 mon.0 [INF] pgmap v20734: 1628 pgs: 1628 active+clean; 2422 MB data, 7633 MB used, 127 GB / 134 GB avail 
	   

Существуют также прочие параметры, которые могут применяться с командой ceph для сбора различных типов подробностей сообщений. Это:

  • --watch-debug: для отслеживания сообщений отладки

  • --watch-info: для отслеживания информационных сообщений

  • --watch-sec: для отслеживания сообщений безопасности

  • --watch-warn: для отслеживания предупреждающих сообщений

  • --watch-error: для отслеживания сообщений об ошибке

Статистика использования кластера

Чтобы узнать статистику использования пространства вашего кластера примените команду ceph с параметром df. Эта команда покажет общий размер кластера, доступный размер, используемый размер и проценты. Она также высветит информацию о пулах, такую как имя пула, идентификатор, использование и число объектов в каждом пуле:

# ceph df

	[root@ceph-node1 ..]# ceph df 
	GLOBAL:
	    SIZE     AVAIL      RAW USED       %RAW USED
		134G       127G        7440M            5.39
	POOLS: 
	    NAME                              ID      USED      %USED     MAX AVAIL     OBJECTS 
	    rbd                               0         114M     0.08        42924M        2629 
	    images                            1       53002k     0.04        42924M          12 
	    volumes                           2           47        0        42924M           8 
	    vms                               3         208M     0.15        42924M          31 
	    .rgw.root                         4          162        0        42924M           2 
	    .rgw.control                      5            0        0        42924M           8 
	    .rgw                              6         2731        0        42924M          15 
	    .rgw.gc                           7            0        0        42924M          32 
	    .users.uid                        8          736        0        42924M           4 
	    .users.email                      9            8        0        42924M           1 
	    .users                            10          16        0        42924M           2 
	    .users.swift                      11           8        0        42924M           1 
	    .rgw.buckets.index                12           0        0        42924M           9 
	    .rgw.buckets                      13        1744        0        42924M           4 
	   

Проверка состояния кластера

Проверка состояния кластера является наиболее общей и наиболее частой операцией при управлении кластером Ceph. Вы можете проверить состояние вашего кластера с применением команды ceph и status в качестве параметра:

# ceph status
	   

Вместо подкоманды status вы можете применить более короткую версию, -s, как опцию:

# ceph -s
	   

Следующий снимок экрана покажет состояние нашего кластера:

	[root@ceph-node1 ~]# ceph -s 
	    cluster 9609b429-eee2-4e23-af31-28a24fcf5cbc 
	    health HEALTH_OK 
	    monmap e3: 3 mons at {ceph-node1=192.168.1.101:6789/0,ceph-node2=192.168.1.102:6789/0,ceph-node3=192.168.1.103:6789/0}, election epoch 640, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3 
	    mdsmap e73: 1/1/1 up {0=ceph-node2=up:active} 
	    osdmap el823: 9 osds: 9 up, 9 in 
	     pgmap v20762: 1628 pgs, 45 pools, 2422 MB data, 3742 objects 
	           7440 MB used, 127 GB / 134 GB avail 
	               1628 active+clean 
	[root@ceph-node1 ~]# 
	   

Эта команда выводит на экран массу полезной информации для вашего кластера Ceph:

  • cluster: Эта команда представляет ваш уникальный идентификатор кластера Ceph.

  • health: Эта команда показывает жизнеспособность кластера

  • monmap: Эта команда представляет версию эпохи карты монитора, информацию о мониторе, версию эпохи выбора монитора и состояние кворума монитора.

  • mdsmap: Эта команда представляет вашу версию эпохи mdsmap и ваше состояние mdsmap.

  • osdmap: Эта команда представляет вашу эпоху osdmap, общее число OSD (total), число работающих OSD (up) и число OSD в наличии (in).

  • pgmap: Эта команда показывает вашу версию pgmap, общее число PG, число пулов, используемая ёмкость для одной копии, а также общее число объектов. Она также отображает информацию об использовании кластера, включая размер использования, размер свободного пространства и общий размер. Наконец, она отображает состояние PG.

    [Замечание]Замечание

    Чтобы увидеть состояние кластера в реальном времени, вы можете применить ceph status в команде Linux watch:

    # watch ceph -s
    	   

Записи аутентификации вашего кластера

Ceph работает с системой аутентификации на основе ключей. Все компоненты кластера взаимодействуют друг с другом раз они подвергаются аутентификации системы на основе ключей. Вы можете применить команду ceph с подкомандой auth list для получения списка всех ваших ключей:

# ceph auth list
	   
[Замечание]Замечание

Чтобы узнать больше об операциях команды вы можете использовать help в качестве дополнительного параметра. Например, выполните # ceph auth --help и примените команду согласно предписаниям подсказки.

 Наблюдение за мониторами Ceph

Обычно кластер Ceph развёртывается с более чем одним экземпляром MON для высокой доступности. Так как существует большое число мониторов, они должны достигать кворума для поддержки надлежащего функционирования кластера.

  Как это сделать...

Мы сосредоточимся сейчас на командах для наблюдения за мониторами. Шаги будут раскрываться в поясняющих темах.

Проверка состояния монитора

Для отображения состояния монитора кластера и карты MAP воспользуйтесь командой ceph с дополнительным параметром либо mon stat либо mon dump:

# ceph mon stat
# ceph mon dump
	   

Следующий снимок экрана отображает вывод этих команд:

	[root@ceph-node1 ~]# ceph mon stat 
	e3: 3 mons at {ceph-node1=192.168.1.101:6789/0,ceph-node2=192.168.1.102:6789/0,ceph-node3 =192.168.1.103:6789/0}, election epoch 640, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3 
	[root@ceph-node1 ~]# 
	[root@ceph-node1 ~]# ceph mon dump 
	dumped monmap epoch 3 
	epoch 3 
	fsid 9609b429-eee2-4e23-af31-28a24fcf5cbc 
	last_changed 2015-03-18 00:20:07.092486 
	created 0.000000 
	0: 192.168.1.101:6789/0 mon.ceph-node1 
	1: 192.168.1.102:6789/0 mon.ceph-node2 
	2: 192.168.1.103:6789/0 mon.ceph-node3 
	[root@ceph-node1 ~]# 
	   

Проверка состояния кворума мониторов

Для поддержания кворума между мониторами Ceph кластер всегда должен иметь более половины доступных в кластере мониторов. Проверка состояния кворума вашего кластера очень полезна во время определения проблем с мониторами. Вы можете проверить состояние кворума при помощи команды ceph с подкомандой quorum_status:

# ceph quorum_status -f json-pretty
	   

Следующий снимок отображает вывод этой команды:

	[root@ceph-node1 ~]# ceph quorum_status -f json-pretty 
	
	{ "election_epoch": 640, 
	  "quorum": [ 
	        0, 
	        1, 
	        2], 
	  "quorum_names": [ 
	        "ceph-node1", 
	        "ceph-node2", 
	        "ceph-node3"], 
	  "quorum_leader_name": "ceph-node1", 
	  "monmap": { "epoch": 3, 
	      "fsid": "9609b429-eee2-4e23-af31-28a24fcf5cbc", 
	      "modified": "2015-03-18 00:20:07.092486, 
	      "created": "0.000000", 
	      "mons": [
		        { "rank": 0, 
	              "name": "ceph-node1", 
	              "addr": "192.168.1.101:6789\/0"}, 
	            { "rank": 1, 
				  "name": "ceph-node2", 
	              "addr": "192.168.1.102:6789\/0}, 
	            { "rank": 2, 
	              "name": "ceph-node3", 
	              "addr": "192.168.1.103:6789\/0"}]}} 
	[root@ceph-node1 ~]# 
	   

Состояние кворума высвечивает election_epoch, что является номером версии выборов и quorum_leader_name, которое обозначает имя вашего хоста, руководящего кворумом. Оно также отображает эпоху карты монитора и идентификатор кластера. Каждому монитору кластера выделяется ранг. Для операций ввода/ вывода клиенты вначале соединяются с ведущим монитором кворума; если ваш ведущий монитор недоступен, клиент тогда соединяется со следующим по рангу монитором.

[Замечание]Замечание

Для генерации форматированного вывода команды Ceph применяйте параметр -f json-pretty.

 Мониторинг OSD Ceph

Мониторинг OSD является решающей задачей и требует полного внимания, поскольку существует множество OSD для наблюдения и заботы. Чем больше ваш кластер, тем больше OSD он будет иметь и тем более скурпулёзное наблюдение вам потребуется. Обычно хосты кластеров Ceph заполнены большим числом дисков, поэтому вероятность столкнуться с отказом OSD очень высока.

  Как это сделать...

Мы сосредоточимся сейчас на командах для наблюдения за OSD. Шаги будут раскрываться в последующих поясняющих темах:

Обзор дерева OSD

Обзор дерева OSD очевидно полезен для получения информации о состояниях OSD таких как IN или OUT и UP или DOWN. Обзор дерева OSD отображает все узлы со всеми их OSD и их местоположение в карте CRUSH. Вы можете попробовать отображение своего дерева OSD с применением следующей команды:

# ceph osd tree

	[root@ceph-node1 ~]# ceph osd tree 
	# id    weight  type name       up/down reweight 
	-1      0.08995 root default 
	-2      0.02998         host ceph-node1 
	0       0.009995                        osd.0   up      1 
	1       0.009995                        osd.1   up      1 
	2       0.009995                        osd.2   up      1 
	-3      0.02998         host ceph-node2 
	3       0.009995                        osd.3   up      1 
	4       0.009995                        osd.4   up      1 
	5       0.009995                        osd.5   up      1 
	-4      0.02998         host ceph-node3 
	6       0.009995                        osd.6   up      1 
	7       0.009995                        osd.7   up      1 
	8       0.009995                        osd.8   up      1 
[root@ceph-node1 ~]# 
	   

эта команда отображает различную полезную информацию для OSD Ceph, такую как вес, состояние UP/DOWN и IN/OUT. Выдача будет прекрасно отформатирована в виде вашей карты Ceph CRUSH. Если вы сопровождаете большой кластер, этот формат даст вам преимущества определения местоположения OSD и его сервера хоста в длинном перечне.

Статистика OSD

Чтобы проверить статистику OSD, примените # ceph osd stat; эта команда поможет вам получить эпоху карты, общее число OSD и их состояния IN и UP.

Для получения подробной информации о кластере Ceph и OSD выполните следующую команду:

# ceph osd dump
	   

Это очень полезная команда, которая выведет эпоху карты ваших OSD, подробности пула, включающие его идентификатор, имя пула, тип пула, т.е. реплицируемый или затираемый (erasure, кодируемый), набор правил CRUSH и PG. Эта команда также отобразит информацию по каждому OSD, такую как идентификатор OSD, его состояние, вес, эпоху интервала последней очистки и тому подобное. Вся эта информация очень полезна для мониторинга кластера и обнаружения ошибок.

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

Для отображения клиентов в чёрном списке выполните следующую команду:

# ceph osd blacklist ls
	   

Проверка вашей карты CRUSH

Вы можете запрашивать свою карту CRUSH непосредственно из команд # ceph osd. Утилита командной строки карты CRUSH может сохранить много времени системного администратора, по сравнению с обычным способом просмотра и её редактирования после декомпиляции вашей карты CRUSH:

  • Для просмотра карты CRUSH выполните следующую команду:

    # ceph osd crush dump
    	   
  • Для просмотра правил карты CRUSH выполните следующую команду:

    # ceph osd crush rule list
    	   
  • Для просмотра подробностей правил карты CRUSH выполните следующую команду:

    # ceph osd crush rule dump <crush_rule_name>
    	   

Следующий рисунок отображает вывод нашего запроса карты CRUSH:

	[root@ceph-node1 ~]# ceph osd crush rule list 
	[
	  "replicated_rulesee] 
	[root@ceph-node1 ~]# 
	[root@ceph-node1 ~]# ceph osd crush rule dump replicated_ruleset 
	{ "rule_id": 0, 
	  "rule_name": "replicated_ruleset", 
	  "ruleset": 0, 
	  "type": 1, 
	  "min_size": 1, 
	  "maxsize": 10, 
	  "steps": [ 
	        { "op": "take", 
	          "item": -1, 
	          "item_name": "default"}, 
	        { "op": "chooseleaf_firstn", 
	          "num": 0, 
	          "type": "host"}, 
	        { "op": "emit"}]} 
	[root@ceph-node1 ~]# 
	   

Если вы управляете большим кластером с несколькими сотнями OSD, иногда бывает трудно найти местоположение определённого OSD в карте CRUSH. Это также трудно сделать, если ваша карта CRUSH содержит множественную иерархию сегментов (bucket). Вы можете воспользоваться ceph osd find для поиска некоего OSD и определении его местоположения в карте CRUSH:

# ceph osd find <Numeric_OSD_ID>

	[root@ceph-node1 ~]# ceph osd find 4 
	{ "osd": 4, 
	  "ip": "192.168.1.102:6811\/3897", 
	  "crush_location": { "host": "ceph-node2", 
	      "root": "default}}
	[root@ceph-node1 ~]# 
	[root@ceph-node1 ~]#
	   

Мониторинг PG

OSD хранят PG, причём каждая PG содержит объекты. Общая жизнеспособность кластера в основном зависит от PG. Кластер будет оставаться в состоянии HEALTH_OK только если все PG находятся в состоянии active + clean. Если ваш кластер Ceph испытывает проблемы с жизнеспособностью, то существует вероятность, что ваши группы размещения не active + clean. Группы размещения могут существовать в различных состояниях, и даже в комбинации состояний. Вот некоторые состояния, в которых могут находиться PG:

  • Creating: PG создана.

  • Peering: Процесс приведения в действие всех ваших OSD которые хранят PG в соответствие между состоянием всех объектов включая их метаданные в этой PG {Прим. пер.: одноранговый обмен}.

  • Active: когда операция однорангового обмена завершится, Ceph отображает все PG как активные. В активном состоянии данные в вашей PG доступны в первичной PG и её реплике для операций вводо/ вывода.

  • Clean: Состояние очищено означает, что первичный и вторичный OSD успешно выполнили одноранговый обмен и никакие PG не перемещаются из своего правильного местоположения. Оно также показывает, что PG реплицированы необходимое число раз.

  • Down: Это означает, что реплика со своими необходимыми данными отключена, поэтому PG выключена.

  • Degraded: Когда OSD переходит в DOWN, Ceph изменяет состояние всех своих PG, которые назначены на этот OSD на DEGRADED. После того как OSD становится UP, оно должно выполнить одноранговый обмен вновь чтобы очистить деграировашие PG. Если OSD остаётся DOWN и OUT более чем 300 секунд, Ceph выполняет восстановление всех своих деградировавших PG из PG их реплик для поддержания необходимого количества реплик. Клиенты могут выполнять ввод/ вывод даже после того как PG находятся в деградировавшем состоянии.

  • Recovering: Когда OSD переходит в DOWN, содержимое этих PG такого OSD берётся из содержимого PG реплик в других OSD. Когда OSD возвращается в UP, Ceph инициирует операцию восстановления этой PG чтобы поддержать её актуальность с PG реплики и прочих OSD.

  • Backfilling: Когда новое OSD добавлен в ваш кластер, Ceph пытается выполнить балансировку данных перемещая некоторые PG с других OSD на этот новое OSD; этот процесс называется заплонением (backfilling). Когда заполнение выполнится для данной PG, ваше OSD может принимать участие в вводе/ выводе клиента.

  • Remapped: Всякий раз когда существуют изменения в вашем действующем наборе (acting set) PG, происходит миграция данных со старого действующего набора OSD на новый действующий набор OSD. Эта операция может занять некоторое время в зависимости от размера данных которое подлежит миграции на новый OSD. В течение этого времени старый первичный OSD старого действующего набора обслуживает запросы клиентов. Как только операция миграции завершится, Ceph воспользуется новым первичным OSD из этой действующем наборе.

    [Замечание]Замечание

    Под действующим набором (acting set) понимается группа OSD отвечающая за PG. Первичный OSD называется первым OSD из действующего набора и он отвечает за ваши операции одорангового обмена для каждой PG с их вторичными/ третичными OSD. Он также принимает операции записи от клиентов. Ваш OSD, будучи включённым UP, остаётся в активном наборе. Как только первичный OSD становится DOWN, вначале он удаляется из набора включённых (UP); ваш вторичный OSD переводится в состояние первичного OSD.

  • Stale: OSD Ceph выдают сообщение о своей статистике монитору Ceph каждые 0.5 секунд; если их первичные OSD действующего набора OSD возможно отказывают в предоставлении сообщений своей статистики мониторам, или прочие OSD сообщили что первичный OSD перешёл в DOWN, монитор рассматривает эту PG как утратившую силу (stale).

Вы можете пронаблюдать за PG применив следующие команды:

  • Чтобы получить состояние PG, выполните # ceph pg stat:

    	[root@ceph-node1 ~]# ceph pg stat 
    	v20780: 1628 pgs: 1628 active+clean; 2422 MB data, 7440 MB used, 127 GB / 134 GB avail 
    	[root@ceph-node1 ~]# 
    	   

    Вывод команды pg stat отобразит много информации в специфическом формате: vNNNN: X pgs: Y active+clean; R MB data, U MB used, F GB / T GB avail.

    Где переменные определены следующим образом:

    • vNNNN: Это номер версии карты вашей PG

    • X: Общее число PG

    • Y: Число PG, которые имеют состояние active+clean

    • R: сохранённые сырые данные

    • U: реально сохранённые после репликаций данные

    • F: оставшаяся свободная ёмкость

    • T: Общая ёмкость

  • Для получения списка PG, выполните следующее:

    # ceph pg dump -f json-pretty
    	   

    Эта команда сгенерирует много существенной информации по отношению к PG, например версию карты PG, идентификатор PG, состояние PG, действующий набор, первичный действующий набор и тому подобное. Вывод этой команды может быть гигантским в зависимости от числа PG в вашем кластере.

  • Чтобы запросить подробную информацию для определённой PG выполните следующую команду, имеющую такой синтаксис ceph pg <PG_ID> query:

    # ceph pg 2.7d query
    	   
  • Чтобы выдать перечень застрявших (stuck) PG выполните следующую команду, имеющую такой синтаксис ceph pg dump_stuck < unclean | Inactive | stale > query:

    # ceph pg dump_stuck unclean
    	   

 Мониторинг MDS Ceph

Серверы метаданных используются исключительно для CephFS, которая пока не готова к промышленному применению на настоящий момент. Сервер метаданных имеет различные состояния, такие как, UP, DOWN, ACTIVE и INACTIVE. При выполнении мониторинга MDS вам следует проверять что состояние MDS UP и ACTIVE. Следующие команды помогут вам получит информацию связанную с MDS Ceph.

  Как это сделать...

Мы сосредоточимся сейчас на командах для наблюдения за OSD. Шаги будут раскрываться в последующих поясняющих темах:

  1. Проверьте перечень файловых систем CephFS:

    # ceph fs ls
    	   
  2. Проверьте состояние MDS:

    # ceph mds stat
    	   
  3. Отобразите подробности вашего сервера метаданных:

    # ceph mds dump
    
    	[root@ceph-node1 ~]# ceph fs ls 
    	name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ] 
    	[root@ceph-node1 ~]# 
    	[root@ceph-node1 ~]# ceph mds stat 
    	e73: 1/1/1 up {O=ceph-node2=up:active} 
    	[root@ceph-node1 ~]# 
    	[root@ceph-node1 ~]# ceph mds dump 
    	dumped mdsmap epoch 73 epoch 73 
    	flags 0 
    	created 2015-05-19 00:18:45.398790 
    	modified        2015-06-06 20:15:21.386153 
    	tableserver     0 
    	root    0 
    	session_timeout 60 
    	session_autoclose       300 
    	max_file_size   1099511627776 
    	last failure    0 
    	last_failure_osd_epoch  1822 
    	compat compat={},rocompat=11,incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table} 
    	max_mds 1 
    	in      0 
    	up      {0=47181} 
    	failed 
    	stopped 
    	data_pools     43 
    	metadata_pool  44 
    	inline_data    disabled 
    	47181: 192.168.1.102:6800/7314 'ceph-node2' mds 0.15 up:active seq 6 
    	[root@ceph-node1 ~]#
    	   

 Введение в Ceph Calamari

Calamari является платформой управления для Ceph; привлекательной инструментальной панелью для мониторинга и управления вашим кластером Ceph. Она была изначально разработана компанией Inktank как проприетарное программное обеспечение, и была продуктом Inktank Ceph Enterprise, который предлагался их пользователям. Сразу после приобретения Inktank компанией Red Hat, она стала открытым исходным кодом Red Hat, 30 мая 2014. Calamari имеет различные великолепные наборы функциональности, а их последующая дорожная карта весьма впечатляет. Calamari имеет две части, причём каждая часть имеет свои собственные репозитории:

  • Frontend: Это основанный на браузере графический интерфейс пользователя, который в основном реализован на JavaScript. Часть внешнего интерфейса (Frontend) применяет Calamari REST API и строится на модульной основе, поэтому каждый компонент внешнего интерфейса может обновляться независимо. Внешний интерфейс Calamari стал открытым исходным кодом с лицензией MIT; вы можете найти его в репозитории https://github.com/ceph/calamari-clients.

  • Backend: Серверная часть (Backend) Calamari является ядром платформы, которое написано на Python. Она также применяет прочие компоненты, такие как SaltStack, ZeroRPC, graphite, Django-rest-framework, Django, gevent и тому подобные, а также предоставляет новый REST API для интеграции с Ceph и другими системами. Calamari был переделан в своей новой версии, в которой он использует REST API для взаимодействия сосвоим кластером Ceph. Предыдущая редакция Calamari применяла Ceph REST API, который является слегка ограничительным для этих целей. Серверная часть Calamari является открытым исходным кодом с лицензией LGPL2+; вы можете найти её репозиторий по адресу; https://github.com/ceph/calamari.

Calamari имеет хорошую документацию доступную на http://calamari.readthedocs.org; являетесь ли вы оператором или разработчиком, работающим над Calamari или разработчиком, применяющим Calamati REST API, эта документация является хорошим источником информации для начала вашей работы с Calamari. Как и Ceph, Calamari разрабатывается как восходящий продукт; вы можете включиться в Calamari на IRC по адресу irc://irc.oftc.net/ceph, зарегистрироваться в почтовой рассылке на ceph-calamari@ceph.com, или послав запрос на учётную запись Calamari GitHub на https://github.com/ceph/calamari и https://github.com/ceph/calamariclients.

В настоящее время Calamari не предоставляет готовых к установке пакетов, поэтому вам придётся построить их для своей среды. В этом рецепте мы изучим построение пакетов сервера Calamari Ceph из исходных кодов. Построение таких пакетов иногда является серъёзным вызовом, поскольку вы можете не выполнить его одним ударом. Поэтому, чтобы уменьшить сложность, я построил такие пакеты для вас и вы можете их загрузить с https://github.com/ksingh7/cephcalamari-packages, поэтому можете пропустить следующие два рецепта, напрямую перескочив на необходимые условия для установки. Для тех, кому интересно построение пакетов из исходных кодов, давайте приступим. {Прим. пер.: также см. Глава 15. Инструменты разработки в нашем переводе "Как работает Linux" Брайана Варда}.

 Построение пакетов Calamari сервер

Calamari предоставляет готовую к применению конфигурацию Vagrant для некоторых типов ОС. Определите тип вашего работающего хоста Calamari, для которого вы хотите построить пакеты; в нашем случае это CentOS7.

  Как это сделать...

  1. Клонируйте репозиторий сервера Calamari с применением следующей команды:

    $ git clone https://github.com/ceph/calamari.git
    	   
  2. Diamond является демоном Python, который собирает метрики системы и публикует их в Graphite. Он способен собирать метрики ЦПУ, оперативной памяти, сетевой среды, ввода/ вывода, нагрузок и дисков. Для дополнительной информации по Diamond обратитесь к http://diamond.readthedocs.org/. В настоящее время Calamari производит своё собственное ответвление Diamond. Для получения Diamond клонируйте следующий репозиторий:

    $ cd calamari/vagrant/centos-build
    	   
  3. В репоитории calamari вы найдёте каталог vagrant, который предоставляет среду разработки для различных типов операционных систем. Переместитесь в следующий путь для CentOS:

    	teeri:git ksinghS git clone https://github.com/ceph/calamari.git 
    	Cloning into 'calamari'... 
    	remote: Counting objects: 11265, done. 
    	remote: Total 11265 (delta 0), reused 0 (delta 0), pack-reused 11265 
    	Receiving objects: 100% (11265/11265), 20.83 MiB 1 1.62 MiB/s, done. 
    	Resolving deltas: 100% (6064/6064), done. 
    	Checking connectivity... done. 
    	teeri:git ksinghS 
    	teeri:git ksinghS git clone https://github.com/ceph/Diamond.git --branch.calamari 
    	Cloning into 'Diamond'... 
    	remote: Counting objects: 18182, done. 
    	remote: Total 18182 (delta 0), reused 0 (delta 0), pack-reused 18182 
    	Receiving objects: 100% (18182/18182), 4.15 MiB 1 2.28 MiB/s, done. 
    	Resolving deltas: 100% (7151/7151), done. 
    	Checking connectivity... done. 
    	teeri:git ksinghS 
    	teeri:git ksinghS cd calamari/vagrant/centos-build 
    	teeri:centos-build ksinghS 
    	teeri:centos-build ksinghS ls -l 
    	total 8 
    	-rw-r--r--  1 ksingh  staff  1114 Jun  7 21:05 Vagrantfile 
    	drwxr-xr-x  4 ksingh  staff   136 Jun  7 21:05 salt 
    	teeri:centos-build ksinghS 
    	   
  4. На момент написания этой главы Vagrant не предоставлял скомпонованной настройки для CentOS7. {Прим. пер.: На момент перевода calamari/vagrant/centos7-build присутствует, так что следующие два шага можно пропустить}. Итак, мы модифицируем среду CentOS6 Vagrant, установив config.vm.box как config.vm.box = "boxcutter/centos71".

  5. Поднимем блок Vagrant воспользовавшись следующей командой:

    $ vagrant up
    
    	=> default: Running provisioner: salt... 
    	Copying salt minion config to vm. 
    	Checking if salt-minion ls installed 
    	salt-minion was not found. 
    	Checking if salt-call is installed 
    	salt-call was not found. 
    	Bootstrapping Salt... (this, may take a while) 
    	
    	Salt successfully configured and installed! 
    	run_overstate set to false. Not running state.oyerstate. 
    	run_highstate set to false. Not running state.highstate. 
    	   
  6. На данный момент наша среда разработки CentOS7 готова; мы должны зарегистрироваться на этой машине и выполнить salt-call для начала построения пакетов:

    $ vagrant ssh
    $ sudo salt-call state.highstate
    
    	[vagrant@local host ~] $ 
    	[vagrant@local host ~] $ sudo salt-call state .highstate 
    	[INFO ] Loading fresh modules for state activity 
    	[INFO ] Fetching file from saltenv 'base', ** done ** 'top.sls' 
    	   
  7. Процесс построения займёт некоторое время; наконец, вы должны получить вывод похожий на следующее:

    	Summary
    	------------
    	Succeeded: 9 (changed=6)
    	Failed:    0
    	------------
    	Total states run:      9
    	[vagrant@local host ~]$
    	   
  8. На данный момент у вас имеется окончательно скомпонованные пакеты для сервера Calamari и Diamond. Вы можете найти установочные файлы RPM на один каталог выше вашего клонированного репозитория calamari.

 Построение пакетов Calamari клиент

В этом рецепте мы изучим построение пакетов клиента Calamari. Большинство шагов аналогичны тому, что мы делали в предыдущем разделе, то есть при построении пакета сервера.

  Как это сделать...

  1. Клонируйте репозиторий клиента Calamari:

    $ git clone https://github.com/ceph/calamari-clients.git
    	   
  2. Измените рабочий каталог на тот, который предоставляет среду Diamond Centos:

    $ cd calamari-clients/vagrant/centos-package
    	   
  3. Измените среду Vagrantfile и установите config.vm.box следующим образом: config.vm.box = "boxcutter/centos71". {Прим. пер.: На момент перевода calamari/vagrant/centos7-build присутствует, так что это шаг можно пропустить}.

  4. Далее поднимем нашу машину:

    $ vagrant up
    	   
  5. На данный момент наша среда разработки CentOS7 готова; мы должны зарегистрироваться на этой машине и выполнить salt-call для начала построения пакетов:

    $ vagrant ssh
    $ sudo salt-call state.highstate
    	   
  6. Процесс построения займёт некоторое время; наконец, вы должны получить вывод похожий на следующее:

    	-----------
    	           ID: copyout_build_product
    	     Function: cmd.run
    	       Result: True
    	      Comment: Command "cp calamari-clients*tar.gz /git/" run
    	      Changes: 
    	               ----------
    	               pid:
    	                   25090
    	               retcode:
    	                   0
    	               stderr:
    	               stdщге:
    	Summary
    	-------------
    	Succeeded: 13
    	Failed:     0
    	-------------
    	Total:      13
    	[vagrant@local host ~]$
    	   
  7. На данный момент у вас имеется окончательно скомпонованные пакеты для клиента Calamari и вы можете найти установочные файлы RPM на один каталог выше вашего клонированного репозитория calamari.

 Наладка главного сервера Calamari

В последних рецептах мы скомпилировали необходимые для Calamari пакеты, которые включают в себя calamari-server, calamari-client и diamond. Если вы не компилировали эти пакеты, вы можете загрузить их из моего репозитория GitHub: https://github.com/ksingh7/ceph-calamari-packages/tree/master/CentOS-el7:

  Как это сделать...

В данной демонстрации мы настроим ceph-node1 в качестве главного (master) сервера, а также как узел salt-minion, а ceph-node2 и ceph-node3 только как подчинённые (minion) узлы salt-minion. На момент написания этого рецепта Calamari не поддерживал salt версии 2015, поэтому я умышленно применил версию salt 2014.

Давайте начнём установку сервера Calamari:

  1. На ceph-node1 установите зависимости пакетов требующиеся salt и серверу Calamari:

    yum install -y python-crypto PyYAML systemd-python yum-utils m2crypto pciutils python-msgpack systemd-python python-zmq
    	   
  2. ceph-node1 сервера Calamari:

    $ git clone https://github.com/ceph/calamari-clients.git
    	   
  3. По умолчанию, CentOS7 установит самую последнюю версию salt, поэтому, чтобы установить версию salt 2014, настройте salt repo:

    # wget https://copr.fedoraproject.org/coprs/saltstack/salt/repo/epel-7/saltstack-salt-epel-7.repo -O /etc/yum.repos.d/saltstacksalt-epel-7.repo
    	   
  4. Установите salt master и salt minion версии 2014.7.5:

    # yum --disablerepo="*" --enablerepo="salt*" install -y saltmaster-2014.7.5-1.el7.centos
    	   
  5. Поскольку данная установка выполняется исключительно для тестовых целей, мы остановим и запретим межсетевой экран:

    # systemctl stop firewalld
    # systemctl disable firewalld
    	   
  6. Далее установим пакет сервера Calamari. Убедимся что это не обновит версию salt до 2015:

    # yum install https://github.com/ksingh7/ceph-calamari-packages/raw/master/CentOS-el7/calamari-server-1.3.0.1-49_g828960a.el7.centos.x86_64.rpm
    	   
  7. Далее установим пакет сервера Calamari, который устанавливает компоненты инструментальной панели Calamari:

    # yum install -y https://github.com/ksingh7/ceph-calamaripackages/raw/master/CentOS-el7/calamari-clients-1.2.2-32_g931ee58.el7.centos.x86_64.rpm
    	   
  8. Сделаем доступной и запустим службу salt-master:

    # systemctl enable salt-master
    # systemctl restart salt-master
    	   
  9. На данный момент сервер Calamari установлен и мы должны настроить его выполнив следующую команду:

    # calamari-ctl initialize
    
    	[root@ceph-node1 ~]# calamari-ctl initialize  
    	[INFO] Loading configuration.. 
    	[INFO] Starting/enabling salt... 
    	[INFO] Starting/enabling postgres... 
    	[INFO] Initializing database... 
    	[INFO] You will now be prompted for login detai1s for the administrative user account. 
    	This is the account you will use to log into the web interface once setup is complete. 
    	username (1eave blank to use 'root') : root 
    	Email address: karan_singhl@live.com 
    	Password: 
    	Password (again): 
    	Superuser created successfully. 
    	[INFO] Initializing web interface... 
    	[INFO] Starting/enabling services... 
    	[INFO] Restarting services... 
    	[INFO] Complete. 
    	[root@ceph-node1 ~]# 
    	   
  10. На момент написания этого раздела Calamari имел известный баг (обновление подключённого подчинённого), который завершался с ошибкой в процессе шага инициализации Calamari. Вы можете пропустить этот шаг если ваша команда инициализации calamari-ctl прошла успешно. Для коррекции этого бага измените файл /opt/calamari/venv/lib/python2.7/site-packages/calamari_cthulhu-0.1-py2.7.egg/cthulhu/calamari_ctl.py update_connected_minions(), закомментировав строку 255, которая выдаёт сообщение сервера Calamari:

    	[root@ceph-node1 cthulhu]# cat calamari_ctl.py | grep "update_connectedminions()" | grep -v def # update_connected_minions() 
    	[root@ceph-node1 cthulhul# 
    	   
  11. Далее переместитесь в инструментальную панель Calamari набрав в своём браузере http://192.168.1.101/dashboard/ и предоставив имя пользователя root и пароль, который вы установили на последнем шаге.

     

    Рисунок 5.1.



  12. Когда вы зарегистрируетесь в инструментальной панели Calamari, вы увидите экран аналогичный приводимому ниже; на данный момент это новая установка Calamari, нам необходимо добавить в неё узлы Ceph, и это будет описано в следующем разделе.

     

    Рисунок 5.2.



 Добавление узлов Ceph в Calamari

На данный момент у нас есть работающий главный сервер Calamari. Чтобы наблюдать за вашим кластером Ceph при помощи Calamari, нам нужно добавить узлы Ceph в Calamari. Давайте начнём это.

[Замечание]Замечание

Так как ceph-node1 играет двойную роль и главного сервера Calamari и узла Calamari Ceph, мы уже выполнили первые два шага на узле ceph-node1. Выполняйте первые два шага на узлах ceph-node2 и ceph-node3, пока не будет предписано иного:

  Как это сделать...

  1. На ceph-node2 и ceph-node3 сделайте доступными репозитории salt 2014 yum:

    # wget https://copr.fedoraproject.org/coprs/saltstack/salt/repo/epel-7/saltstack-salt-epel-7.repo -O /etc/yum.repos.d/saltstack-salt-epel-7.repo
    	   
  2. Установите зависимости пакетов вручную:

    # yum install -y python-crypto PyYAML systemd-python yum-utils m2crypto pciutils python-msgpack systemd-python python-zmq
    	   

Теперь выполняем эти шаги на ceph-node1, ceph-node2, а также как и на ceph-node3:

  1. Установите пакет salt-minion-2014:

    # yum --disablerepo="*" --enablerepo="salt*" install -y saltminion-2014.7.5-1.el7.centos
    	   
  2. Установите пакет Diamond:

    # yum install -y https://github.com/ksingh7/ceph-calamaripackages/raw/master/CentOS-el7/diamond-3.4.582-0.noarch.rpm
    	   

    Сделайте доступной и запустите службу Diamond:

    # systemctl enable diamond
    # systemctl restart diamond
    	   
  3. Далее настройте подчинённые salt на применение ceph-node1 в качестве главного узла Calamari:

    # echo "master: ceph-node1" > /etc/salt/minion.d/calamari.conf
    	   
  4. Сделайте доступной и запустите службу salt-minion:

    ctl enable salt-minion
    # systemctl restart salt-minion
    	   

    Теперь salt-minion, т.е. узлы Calamari Ceph настроены для применения главным сервером Calamari. Далее нам необходимо зарегистрироваться на главном сервере Calamari, т.е. на ceph-node1 чтобы перечислить и принять ключи salt от подчинённых.

  5. На ceph-node1 выведем следующим образом список salt-key:

    # salt-key -L
    	   
  6. Далее примем salt-key подчинённых:

    # salt-key -A
    	   
  7. Проверим приём ключей подчинённых:

    # salt-key -L
    
    	[root@ceph-node1 etc]# salt-key -L
    	Accepted Keys:
    	ceph-node1
    	ceph-node2
    	ceph-node3
    	Unaccepted Keys:
    	Rejected Keys:
    	   
  8. Наконец, откроем свой браузер и посетим инструментальную панель Calamari для проверки вашего кластера:

    [Предостережение]Предостережение

    Иногда случается, что Calamari не может найти кластер Ceph сразу после приёма ключей подчинённых salt. В этом случае дайте некоторое время Calamari и salt изучить кластер Ceph.

 Мониторинг кластера Ceph в инструментальной панели Calamari

Наблюдение за кластером Ceph из инструментальной панели Calamari достаточно непосредственное. Давайте посмотрим как:

  Как это сделать...

  1. Инструментальная панель отображает массу полезной информации:

     

    Рисунок 5.3. Инструментальная панель



  2. OSD могут наблюдаться с помощью параметра рабочего места OSD:

     

    Рисунок 5.4. Рабочее место OSD



  3. Calamari даёт некоторые прекрасные возможности наблюдения использования ресурсов хоста в форме графиков. Следующий график представляет сводку ЦПУ для ceph-node1:

     

    Рисунок 5.5. Использование ЦПУ ceph-node1



  4. Этот график представляет среднюю загруженность ceph-node1; для лучшего понимания изучите условные обозначения (legend):

     

    Рисунок 5.6. Средняя загруженность ceph-node1



  5. Наконец, далее представлен график использования оперативной памяти на ceph-node2. Вы также можете смотреть на использование памяти во временном представлении выравнивая параметр Time Axis в правой стороне панели:

     

    Рисунок 5.7. Использование оперативной памяти ceph-node2



 Обнаружение ошибок Calamari

Нахождение ошибок Calamari порой очень хитроумно. В этом рецепте я привожу некую коллекцию руководств, которые помогут вам находить ошибки вашего окружения Calamari.

  Как это сделать...

  1. Проверьте, доступны ли для сервера Calamari, т.е. salt-master, его подчинённые, т.е salt-minor:

    '*' test.ping
    	   
  2. Убедитесь что salt-master может опрашbвать ваш кластер Ceph и получать от кластера информацию:

    # salt '*' ceph.get_heartbeats output
    	   
  3. Проверьте, что salt-minor узел (узел кластера Ceph) может связаться с salt-minor:

    # salt-minion -l debug
    	   
  4. Если salt-minor выдаёт ошибку The Salt Master server's public key did not authenticate! в файл журнала salt-minor, т.е. /var/log/salt:

    	2015-06-26 09:57:27,531 [salt.crypt][CRITICAL] The Salt Master server's public key did not authenticate! 
    	The master may need to be updated if it is a version of Salt lower than 2014.7.5, or 
    	If you are confident that you are connecting to a valid Salt Master, then remove the 
    	master public key and restart the Salt Minion. 
    	The master public key can be found at: 
    	/etc/salt/pki/minion/minion_master.pub 
    	   
  5. Чтобы решить эту проблему, нам нужно удалить salt-key minion а также общедоступный ключ главного сервера и посторно созать их оба с применением следующих команд:

    # rm -rf /etc/salt/pki/minion/minion_master.pub
    # systemctl stop salt-minion
    	   

    Теперь выполним следующий набор шагов:

    1. На salt-master удалим ключ подчинённого:

      # salt-key -L
      # slat-key -D <minion name>
      	     
    2. Запустим службу salt-minion:

      # systemctl start salt-minion
      	     
    3. На salt-master примем новый ключ подчинённого:

      # salt-key -L
      # salt-key -A
      	     
    4. Наконец, на salt-minion применим # salt-minion -l и убедимся, что не получаем ошибку вновь.

  6. Выполнение команды calamari-ctl initialize распространяет ошибку could not connect to server: Connection refused следующим образом:

    	[root@ceph—node1]# calamari—ctl initialize 
    	[INFO] Loading configuration.. 
    	[INFO] Starting/enabling salt... 
    	[INFO] Starting/enabling postgres... 
    	[ERROR] (OperationalError) could not connect to server: Connection refused 
    	  Is the server running on host "localhost" (::1) and accepting 
    	  TCP/IP connections on port 5432? 
    	сould not connect to server: Connection refused 
    	  Is the server running on host "localhost" (127.0.0.1) and accepting 
    	  TCP/IP connections on port 5432? 
    	 None None 
    	[ERROR] We are sorry, an unexpected error occurred. Debugging information has 
    	been written to a file at '/tmp/2015-06-24_1919.txti', please include this when seeking technical support. 
    	[root@ceph—node1]# 
    	   

    Тогда выполним приводимый ниже набор шагов:

    1. Вначале проверим, что служба postgres выполняется:

      # systemctl status postgres
      	     
    2. Зарегистрируемся на postgres и проверим существует ли база данных Calamari или нет:

      # sudo -u postgres psql
      List postgres databases # \l
      
      	[root@ceph-node1]# sudo -u postgres psql 
      	psql (9.2.10) 
      	Type "help" for help. 
      	postgres=# 
      	postgres=# \l
      	                                  List of databases 
      	   Name    |  Owner   | Encoding |   Collate   |     Ctype   |   Access privileges  
      	-----------+----------+----------+-------------+-------------+-----------------------
      	postgres   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
      	template@  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          + 
      	           |          |          |             |             | postgres=CTc/postgres 
      	templatel  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          + 
      	           |          |          |             |             | postgres=CTc/postgres 
      	(3 rows) 
      	postgres=# 
      	     
    3. Вы можете увидеть что не существует базы данных с именем calamari; тогда вам необходимо выполнить salt для создания пользователя и базы данных calamari в postgres:

      # salt-call --local state.template /opt/calamari/salt-local/postgres.sls
      	     
    4. Наконец, повторно выполним # calamari-ctl initialize; теперь это должно работать.

  7. Командная строка calamari-ctl initialize не отрабатывается и распространяет ошибку Updating already connected nodes. failed with rc=2 как показано ниже на снимке экрана:

    	[root@ceph-node1 ~]# calamari-ctl initialize 
    	[INFO] Loading configuration.. 
    	[INFO] Starting/enabling salt... 
    	[INFO] Starting/enabling postgres... 
    	[INFO] Initializing database... 
    	[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: karan_singhl@live.com 
    	Password: 
    	Password (again): 
    	Superuser created successfully. 
    	[INFO] Initializing web interface... 
    	[INFO] Starting/enabling services... 
    	[INFO] Updating already connected nodes. 
    	[ERROR] Updating already connected nodes. failed with rc=2 
    	[ERROR] We are sorry, an unexpected error occurred. Debugging information has 
    	been written to a file at 'tmp/2015-06-22_1855.txt', please include this when seeking technical support. 
    	   
  8. Чтобы исправить эту ошибку, измените файл /opt/calamari/venv/lib/python2.7/sitepackages/calamari_cthulhu-0.1-py2.7.egg/cthulhu/calamari_ctl.py и уберите комментарий в строке 255, который выводит ceph-node3 сделайте доступными репозитории salt 2014 update_connected_minions():

    	[root@ceph-node1 cthulhu]# cat calamari_ctl.py | grep "update_connected_minions()" | grep -v def 
    	   # update_connected_minions() 
    	[root@ceph-node1 cthulhul#