Глава 11. Обслуживание, сбои и отладка

Простои, вне зависимости от того являются ли они внезапными или запланированными, являются данностью при работе облака. Целью данной главы является предоставление полезной информации для активной или противодействующей обработки таких событий.

 Отказы и техническое обслуживание контроллера облака и прокси системы хранения

Контроллер облака и прокси системы хранения очень похожи друг на друга при возникновении ожидаемых и незапланированных простоев. Обычно в облаке работает по одному серверу каждого типа, что делает их очень заметными при их простоях.

Хорошей новостью для контроллера облака является то, что если ваше облако использует сетевой режим высокой доступности с многими хостами(multihost HA) FlatDHCP, то существующие экземпляры и тома продолжают работать при уходе контроллера облака в оф-лайн. Однако для прокси системы хранения невозможны никакие потоки хранимой информации до тех пор, пока он не вернется к работе.

 Планирование технического обслуживания

Один из способов запланировать обслуживание контроллера облака или прокси системы хранения заключается в том, чтобы просто выполнить это во внерабочее время, например, в час или два ночи. Такая стратегия окажет воздействие на меньшее число пользователей. Если ваш контроллер облака или прокси системы хранения слишком важен и не может быть недоступным в любой момент времени, вы должны рассмотреть вариант высокой доступности.

 Перезагрузка контроллера облака или прокси системы хранения

В общем, просто выполните команду "reboot". Операционная система аккуратно закрывает службы и затем автоматически перезагружается. Если вы хотите быть очень аккуратным, выполните свои задания резервного копирования непосредственно перед перезагрузкой.

 После перезагрузки контроллера облака или прокси системы хранения

После того, как контроллер облака перезагрузился, проверьте что успешно стартовали все необходимые службы. Следующие команды используют ps и grep для определения того, что nova, glance и keystone в настоящее время выполняются:

# ps aux | grep nova-
# ps aux | grep glance-
# ps aux | grep keystone
# ps aux | grep cinder

Также проверьте, что все службы функционируют. Следующий набор команд устанавливают происхождение файла openrc, затем выполняют некоторые основные команды glance, nova и keystone. Если команды выполняются надлежащим образом, вы можете быть уверены, что эти службы работают надлежащим образом:

# source openrc
# glance index
# nova list
# keystone tenant-list

Для прокси системы хранения убедитесь, что возобновилась служба системы хранения объектов (Object Storage):

# ps aux | grep swift

Также проверьте, что она работает:

# swift stat

 Полный отказ контроллера облака

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

Чтобы избежать подобной ситуации, создайте кластер контроллера облака высокой доступности. Это выходит за рамки данного документа, но вы можете прочитать дополнительные сведения в проекте Руководства высокой доступности OpenStack.

Другой хороший способ заключается в использовании инструмента управления конфигурацией, например, Puppet, для автоматического создания контроллера облака. Это не должно занять более 15 минут, если у вас имеется запасной сервер. После восстановления контроллера восстановите все сделанные резервные копии (см. Главу 14, Резервное копирование и восстановление).

Кроме того, на практике, службы nova-compute на вычислительных узлах иногда не аккуратно подключаются к размещенной на контроллере rabbitmq в случае, когда он возвращается после совместной перезагрузки и требуется перезагрузка служб nova на вычислительных узлах.

 Отказы вычислительных узлов и их обслуживание

Иногда вычислительный узел либо неожиданно испытывает сбой, либо требует перезагрузки по причинам технического характера.

 Планирование технического обслуживания

Если вам необходимо перезагрузить вычислительный узел в связи с плановым техническим обслуживанием (например, обновление программного обеспечения или аппаратных компонент), то вначале убедитесь, что все размещенные на нем экземпляры были перемещены с данного узла. Если облако использует общую систему хранения, то используйте команду nova live-migration. Вначале получите список экземпляров, требующих перемещения:

# nova list --host c01.example.com --all-tenants

Затем переместите их один за другим:

# nova live-migration <uuid> c02.example.com

Если вы не используете совместную систему хранения, вы можете воспользоваться параметром --block-migrate:

# nova live-migration --block-migrate <uuid> c02.example.com

После переноса всех экземпляров убедитесь, что службы nova-compute были остановлены:

# stop nova-compute

Если вы используете систему управления настройками, такую как Puppet, которая обеспечивает постоянную работу служб nova-compute, вы можете временно перенести файлы инициализации (init):

# mkdir /root/tmp
# mv /etc/init/nova-compute.conf /root/tmp
# mv /etc/init.d/nova-compute /root/tmp

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

# mv /root/tmp/nova-compute.conf /etc/init
# mv /root/tmp/nova-compute /etc/init.d/

Затем запустите службу nova-compute:

# start nova-compute

Теперь вы можете по желанию вернуть назад экземпляры на их первоначальные вычислительные узлы.

 Экземпляры

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

# nova list --host c01.example.com --all-tenants

После получения списка,вы можете использовать команду nova для запуска каждого экземпляра:

# nova reboot <uuid>
[Замечание]Замечание

После каждого неожиданного останова экземпляра могут возникать проблемы при загрузке. Например, экземпляр может потребовать выполнение fsck в корневом разделе. Если подобное произойдет, пользователь может использовать консоль VNC инструментальной панели (Dashboard) для исправления подобных проблем.

Если экземпляр не загружается, что означает, что virsh list никогда не показывает экземпляр даже предпринимающим попытку загрузки, выполните следующее на вычислительном узле:

# tail -f /var/log/nova/nova-compute.log

Попробуйте еще раз выполнение команды nova reboot снова. Вы должны будете увидеть сообщение об ошибке, объясняющее почему экземпляр был не в состоянии загрузиться.

В большинстве случаев ошибка обусловлена чем-то в файле libvirt XML (/etc/libvirt/qemu/instance-xxxxxxxx.xml), который больше не существует. Вы можете применить восстановление файла XML, а также перезагрузку экземпляра, выполнив следующую команду:

# nova reboot --hard <uuid>

 Проверка и восстановление данных отказавшего экземпляра

При некотором развитии событий экземпляры работают, однако не доступны через SSH и не отвечают ни на какие команды. Консоль VNC может отобразить ошибки загрузки или панические ошибки ядра (kernel panic error messages). Это может быть признаком разрушения файловой системы на самой виртуальной машине. Если вам необходимо восстановить файлы или проверить содержимое экземпляра, для монтирования диска может использоваться qemu-nbd.

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

Если вы осуществляете доступ или просматриваете содержимое и данные пользователя, вначале получите его разрешение!

Для доступа к диску экземпляра (/var/lib/nova/instances/instance-xxxxxx/disk) необходимо следовать следующим этапам:

  1. Временно остановите экземпляр с помощью команды virsh.

  2. Подключите к диску устройство qemu-nbd.

  3. Смонтируйте устройство qemu-nbd.

  4. Размонтируйте устройство после осмотра.

  5. Отсоедините устройство qemu-nbd.

  6. Возобновите экземпляр.

Если вы не выполните шаги с 4 по 6, вычислительная среда OpenStack больше не сможет управлять экземпляром. Он не будет отвечать ни на какие выполняемые вычислительной средой OpenStack команды и помечается остановленным.

После того, как вы смонтируете дисковый файл, вы должны иметь возможность доступа к нему и рассматривать его как обычный каталог с файлами и структурами каталогов. Тем не менее, мы не рекомендуем вам редактировать или брать любые файлы, поскольку это может изменить список управления доступом (ACL) и сделать экземпляр незагружаемым, если этого еще не произошло.

  1. Приостановите экземпляр с помощью команды virsh, принимая во внимание внутренний идентификатор (ID):

    # virsh list
    Id Name                 State
    ----------------------------------
    1 instance-00000981    running
    2 instance-000009f5    running
    30 instance-0000274a    running
    
    # virsh suspend 30
    Domain 30 suspended
  2. Присоедините к диску устройство qemu-nbd:

    # cd /var/lib/nova/instances/instance-0000274a
    # ls -lh
    total 33M
    -rw-rw---- 1 libvirt-qemu kvm  6.3K Oct 15 11:31 console.log
    -rw-r--r-- 1 libvirt-qemu kvm   33M Oct 15 22:06 disk
    -rw-r--r-- 1 libvirt-qemu kvm  384K Oct 15 22:06 disk.local
    -rw-rw-r-- 1 nova         nova 1.7K Oct 15 11:30 libvirt.xml
    # qemu-nbd -c /dev/nbd0 `pwd`/disk
  3. Смонтируте устройство qemu-nbd.

    Устройство qemu-nbd попытается экспортировать различные разделы диска экземпляра как отдельные устройства Например, если vda диск, а vda1 корневой раздел, qemu-nbd экспортирует устройства как /dev/nbd0 и /dev/nbd0p1 соответственно:

    # mount /dev/nbd0p1 /mnt/

    Теперь вы можете осуществлять доступ к содержимому /mnt, которое относится к первому разделу диска экземпляра.

    Для просмотра второго или эфемерного диска используйте альтернативную точку монтирования, если вы хотите иметь в одно и то же время смонтированными и первичный, и вторичный диски:

    # umount /mnt
    # qemu-nbd -c /dev/nbd1 `pwd`/disk.local
    # mount /dev/nbd1 /mnt/
    # ls -lh /mnt/
    total 76K
    lrwxrwxrwx.  1 root root    7 Oct 15 00:44 bin -> usr/bin
    dr-xr-xr-x.  4 root root 4.0K Oct 15 01:07 boot
    drwxr-xr-x.  2 root root 4.0K Oct 15 00:42 dev
    drwxr-xr-x. 70 root root 4.0K Oct 15 11:31 etc
    drwxr-xr-x.  3 root root 4.0K Oct 15 01:07 home
    lrwxrwxrwx.  1 root root    7 Oct 15 00:44 lib -> usr/lib
    lrwxrwxrwx.  1 root root    9 Oct 15 00:44 lib64 -> usr/lib64
    drwx------.  2 root root  16K Oct 15 00:42 lost+found
    drwxr-xr-x.  2 root root 4.0K Feb  3  2012 media
    drwxr-xr-x.  2 root root 4.0K Feb  3  2012 mnt
    drwxr-xr-x.  2 root root 4.0K Feb  3  2012 opt
    drwxr-xr-x.  2 root root 4.0K Oct 15 00:42 proc
    dr-xr-x---.  3 root root 4.0K Oct 15 21:56 root
    drwxr-xr-x. 14 root root 4.0K Oct 15 01:07 run
    lrwxrwxrwx.  1 root root    8 Oct 15 00:44 sbin -> usr/sbin
    drwxr-xr-x.  2 root root 4.0K Feb  3  2012 srv
    drwxr-xr-x.  2 root root 4.0K Oct 15 00:42 sys
    drwxrwxrwt.  9 root root 4.0K Oct 15 16:29 tmp
    drwxr-xr-x. 13 root root 4.0K Oct 15 00:44 usr
    drwxr-xr-x. 17 root root 4.0K Oct 15 00:44 var
  4. После того, как вы завершили просмотр, размонтируйте точку монтирования и освободите устройство qemu-nbd:

    # umount /mnt
    # qemu-nbd -d /dev/nbd0
    /dev/nbd0 disconnected
  5. Возобновите экземпляр с помощью virsh:

    # virsh list
    Id Name                 State
    ----------------------------------
    1 instance-00000981    running
    2 instance-000009f5    running
    30 instance-0000274a    paused
    
    # virsh resume 30
    Domain 30 resumed

 Тома

Если поврежденные экземляры также имели присоединенные тома, сначала создайте список UUID экземпляров и томов:

mysql> select nova.instances.uuid as instance_uuid,
cinder.volumes.id as volume_uuid, cinder.volumes.status,
cinder.volumes.attach_status, cinder.volumes.mountpoint,
cinder.volumes.display_name from cinder.volumes
inner join nova.instances on cinder.volumes.instance_uuid=nova.instances.uuid
 where nova.instances.host = 'c01.example.com';

Вы должны увидеть результат, подобный приводимому ниже:

+--------------+------------+-------+--------------+-----------+--------------+
|instance_uuid |volume_uuid |status |attach_status |mountpoint | display_name |
+--------------+------------+-------+--------------+-----------+--------------+
|9b969a05      |1f0fbf36    |in-use |attached      |/dev/vdc   | test         |
+--------------+------------+-------+--------------+-----------+--------------+
1 row in set (0.00 sec)

Далее вручную отключите и повторно подключите тома где X - это соответствующая точка монтирования:

# nova volume-detach <instance_uuid> <volume_uuid>
# nova volume-attach <instance_uuid> <volume_uuid> /dev/vdX

Перед выполнением приведенных выше действий убедитесь, что экземпляр успешно загрузился и находится на окне регистрации (login screen).

 Полный отказ вычислительного узла

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

Если вычислительный узел отказал и не может быть восстановлен в течение нескольких часов или более, вы можете возобновить все размещенные на отказавшем узле экземпляры, если вы используете совместно используемую систему хранения для /var/lib/nova/instances.

Чтобы сделать это, создайте список UUID размещенных на отказавшем узле экземпляров, выполнив следующий запрос к базе данных nova:

mysql> select uuid from instances where host = \
       'c01.example.com' and deleted = 0;

Далее сообщите nova, что все экземпляры, которые раньше были размещены на c01.example.com, теперь размещаются на c02.example.com:

mysql> update instances set host = 'c02.example.com' where host = \
       'c01.example.com' and deleted = 0;

После этого, используйте команду nova для перезагрузки всех экземпляров, которые были запущены на на c01.example.com, одновременно повторно генерируя их XML файлы:

# nova reboot --hard <uuid>

Наконец, вновь присоедините тома, используя метод, аналогичный описанному в разделе Тома.

 /var/lib/nova/instances

Стоит отметить, этот каталог в контексте отказавших вычислительных узлов. Этот каталог содержит образы дисков libvirt KVM на файловой основе для экземпляров, размещенных на этом вычислительном узле. Если вы не работаете со своим облаком в среде совместно используемой системы хранения, этот каталог является уникальным во всех вычислительных узлах.

/var/lib/nova/instances содержит два типа каталогов.

Первый является каталогом _base. Он содержит все кэшированные основные образы из glance для каждого уникального образа, который был запущен на вычислительном узле. Файлы, завершающиеся _20 (или другим номером), являются эфемерными базовыми образами.

Остальные каталоги имеют заглавие instance-xxxxxxxx. Эти каталоги соответствуют экземплярам, запущенным на данном вычислительном узле. Файлы внутри связаны с одним из файлов в каталоге _base. Они по-существу являются файлами на основе изменений, содержащими только изменения, выполненные в начальном каталоге _base.

Все файлы и каталоги в каталоге /var/lib/nova/instances имеют уникальные имена. Файлы в _base уникально озаглавлены для образов glance, на которых они основаны, и имена каталогов instance-xxxxxxxx дают уникальные заголовки для такого определенного экземпляра. Например, если вы копируете все данные из /var/lib/nova/instances с одного вычислительного узла на другой, вы не перепишите никакой файл или не вызовите никакого разрушения в образе, который имеет то же уникальное имя, поскольку они по-существу один и тот же файл.

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

 Отказы узлов хранения и их обслуживание

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

 Перезагрузка узлов хранения

Если узлу хранения требуется перезагрузка- просто перезагрузите его. Запросы к размещенным на нем данным будут перенаправлены на другие копии до окончания процесса перезагрузки сервера.

 Выключение узлов хранения

Если вам нужно выключить узел хранения на длительный период времени (от одних суток и более), рассмотрите возможность удаления узла из кольца системы хранения. Например:

# swift-ring-builder account.builder remove <ip address of storage node>
# swift-ring-builder container.builder remove <ip address of storage node>
# swift-ring-builder object.builder remove <ip address of storage node>
# swift-ring-builder account.builder rebalance
# swift-ring-builder container.builder rebalance
# swift-ring-builder object.builder rebalance

Далее, перераспределите файлы кольца на другие узлы:

# for i in s01.example.com s02.example.com s03.example.com
> do
> scp *.ring.gz $i:/etc/swift
> done

Данные действия эффективно изымают узел хранения из кластера хранения.

Когда узел способен присоединиться к кластеру, просто опять добавьте его в кольцо. Точный синтаксис добавления узла в ваш кластер swift с использованием swift-ring-builder сильно зависит от исходных параметров, использовавшихся при первоначальном построении вашего кластера. Обратитесь, пожалуйста, к тем командам.

 Замена диска Swift

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

В данном примере предполагается, что отказал /dev/sdb.

Во- первых размонтируйте диск:

# umount /dev/sdb

Далее, физически удалить диск из сервера и замените его на работающий диск.

Убедитесь, что операционная система распознала новый диск:

# dmesg | tail

Вы должны увидеть сообщение о /dev/sdb.

Поскольку рекомендуется не использовать разделы на диске swift, просто отформатируйте диск целиком:

# mkfs.xfs /dev/sdb

В конце концов, смонтируйте диск:

# mount -a

Swift должен увидеть новый диск и убедиться, что не существует никаких данных. Затем он начинает репликацию данных на диск с других существующих копий.

 Обработка полного отказа

Обычный способ справиться с восстановлением при полном отказе системы, например, при при отключении электропитания в центре обработки данных, заключается в присвоении каждой службе приоритета с последующим восстановлением по порядку. Таблица 11.1., “Пример списка восстановления приоритетов” демонстрирует пример.

Таблица 11.1. Пример списка восстановления приоритетов
Приоритет Службы

1

Внутрисетевое подключение

2

Службы резервирования систем хранения

3

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

4

Хосты nova-compute, nova-network, cinder

5

Виртуальные машины пользователей

10

Службы очередей сообщений и базы данных

15

Службы Keystone

20

Планировщикcinder-scheduler

21

Службы каталога образов и доставки

22

Службы планировщика nova-scheduler

98

cinder-api

99

Службы nova-api services

100

Узел инструментальной панелиы

Используйте приведенный пример списка приоритетов, чтобы быть уверенным, что связанные с пользователем службы будут восстановлены как можно быстрее, но не раньше, чем вернется на место стабильная среда. Конечно, несмотря на то, что каждый шаг перечислен как одна строка, он требует значительной работы. Например, сразу после запуска базы данных, вы должны проверить ее целостность, или, после запуска служб nova вы должны убедиться, что гипервизор совпал с базой данных и исправлены все несоответствия.

 Управление настройкой

Обслуживание облака OpenStack требует чтобы вы управляли множеством физических серверов и их число может расти со временем. Поскольку управление узлами вручную является способствующим появлению ошибок, мы настоятельно рекомендуем вам использовать средства управления конфигурацией. Эти инструменты автоматизируют процесс обеспечения того, чтобы все узлы были настроены правильно и содействуют вам в поддержке информации о конфигурации (такой, как параметры пакетов и конфигурации) в контролируемом версиями хранилище (repository).

[Совет]Совет

Доступны различные инструменты управления конфигурацией и данное руководство не рекомендует какой- то один определенный. Двумя наиболее популярными в сообществе OpenStack являются Puppet, с доступными OpenStack Puppet modules; а также Chef, с доступными OpenStack Chef recipes. Другие, более новые средства настройки включают Juju, Ansible и Salt; а более зрелые инструменты управления конфигурацией включают CFEngine и Bcfg2.

 Работа с аппаратными средствами

Аналогично с начальным развертыванием, вы должны убедиться, что все оборудование надлежащим образом включено перед его добавлением в работу. Запустите используемое аппаратными средствами программное обеспечение на свои ограничения - используйте до предела возможности ОЗУ, ЦПУ, диска и сети. Доступно много опций, причем обычно они дублируются в виде программного обеспечения замера производительности, следовательно вы получаете хорошее представление о производительности вашей системы.

 Добавление вычислительного узла

Если вы обнаружите, что вы уже достигли или приближаетесь к пределу пропускной способности ваших вычислительных ресурсов, вы должны планировать добавление дополнительных вычислительных узлов. Выполнить добавление дополнительных узлов довольно просто. Процесс добавления узлов аналогичен размещению первых вычислительных узлов в вашем облаке: используйте автоматизированную систему развертывания для самозагрузки сервера для работы на аппаратном уровне с операционной системой, а затем воспользуйтесь системой управления конфигурацией для установки и настройки службы вычислительных ресурсов OpenStack. Как только служба вычислительных ресурсов установлена и настроена аналогично другим вычислительным узлам, она автоматически привязывается к облаку. Контроллер облака замечает новый узел/ узлы и начинает планирование для запуска там экземпляров.

Если узлы блочного хранилища OpenStack размещаются раздельно с вычислительными узлами, та же процедура применяется к одним и тем же очередям и системам опроса используемым в обеих службах.

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

 Добавление узла хранилища объектов

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

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

Если ваш новый узел хранения объектов имеет количество дисков отличное от значения для имевшихся в начале узлов, команда добавления нового узла отличается от первоначальных команд. Эти параметры меняются от среды к среде.

 Замена компонентов

В крупномасштабных реализациях, подобных облачным инфраструктурам, отказы оборудования обычны. Продумайте свои процессы и сбалансируйте сохранение времени и доступность. Например, кластер хранения объектов легко может жить с отказавшими дисками в течение некоторого промежутка времени, если он имеет достаточную емкость. Или же, если система вычислительных узлов не заполнена вы можете рассмотреть миграцию экземпляров в реальном времени с хоста, имеющего сбои ОЗУ, пока у вас есть время на решение данной проблемы.

 Базы данных

Почти все компоненты OpenStack имеют в своей основе для хранения постоянной информации базу данных. Обычно MySQL является такой базой данных. К этим базам данных применимо стандартное администрирование MySQL. OpenStack не настраивает базы данных экстраординарным способом. Основное администрирование включает в себя улучшение производительности, высокую доступность, резервное копирование, восстановление и исправление. Для получения дополнительной информации ознакомьтесь со стандартным руководством администрирования MySQL.

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

 Связь с базой данных

Просмотрите файл конфигурации компонентов, чтобы увидеть, как каждый компонент OpenStack получает доступ к соответствующей базе данных. Ищите sql_connection или просто connection sql_connection or simply connection. Следующая команда использует grep для отображения строк соединений SQL для nova, glance, cinder и keystone:

# grep -hE "connection ?=" /etc/nova/nova.conf /etc/glance/glance-*.conf
/etc/cinder/cinder.conf /etc/keystone/keystone.conf
sql_connection = mysql://nova:nova@cloud.alberta.sandbox.cybera.ca/nova
sql_connection = mysql://glance:password@cloud.example.com/glance
sql_connection = mysql://glance:password@cloud.example.com/glance
sql_connection = mysql://cinder:password@cloud.example.com/cinder
    connection = mysql://keystone_admin:password@cloud.example.com/keystone

Строки подключения имеют следующий формат:

mysql:// <username> : <password> @ <hostname> / <database name>

 Производительность и оптимизация

По мере роста облака MySQL используется все больше и больше. Если вы подозреваете, что MySQL может стать узким местом, вы должны начать изучение оптимизации MySQL. Руководство MySQL имеет целый раздел, посвященный этой теме: Обзор оптимизации.

 HDWMY

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

 Каждый час

  • Проверяйте вашу систему мониторинга на наличие предупреждений и реагируйте на них.

  • Проверяйте очередь билетов на доступ к объектам на предмет новых билетов.

 Ежедневно

  • Проверьте наличие экземпляров в состоянии отказа или в странном состоянии и выясните причину.

  • Проверьте появление исправлений безопасности (security patches) и примените их в случае необходимости.

 Еженедельно

  • Проверьте использование облака:

    • Квоты пользователя

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

    • Использование образов

    • Большие экземпляры

    • Использование сети (пропускная способность и использование IP).

  • Убедитесь, что ваши механизмы предупреждения все еще работают.

 Ежемесячно

  • Проверьте использование и тренды за прошедший месяц.

  • Проверьте наличие пользовательских учетных записей, подлежащих удалению.

  • Проверьте наличие учетных записей операторов, подлежащих удалению.

 Ежеквартально

  • Проведите анализ использования и трендов за последний квартал.

  • Подготовьте все квартальные отчеты об использовании и статистике.

  • Проведите анализ и планирование необходимых добавлений в облако.

  • Проведите анализ и планирование главных обновлений OpenStack.

 Каждые полгода

  • Обновляйте OpenStack.

  • Проведите очистку после обновления OpenStack (вы должны быть в курсе о наличии всех неиспользуемых или новых служб?).

 Выявление неисправных компонентов

Сбор OpenStack-ом сведений о том как взаимодействуют между собой различные компоненты обязателен. Например, загрузка образов требует взаимодействия от nova-api, glance-api, glance-registry, keystone и, потенциально, swift-proxy. В результате, иногда бывает трудно определить точно источник проблемы. Цель данного раздела заключается в помощи в этом.

 Хвосты журналов

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

Terminal 1:

# tail -f /var/log/nova/nova-api.log

Terminal 2:

# nova list

Ознакомьтесь со всеми ошибками и трассировкой в файле журнала. Для получения дополнительной информации ознакомьтесь с Гылавой 13, Ведение журналов и мониторинг.

Если ошибка индицирует, что проблема с другим компонентом, переключитесь на анализ хвоста файла журнала этой компоненты. Например, если nova не может получить доступ к glance, просмотрите журнал glance-api:

Terminal 1:

# tail -f /var/log/glance/api.log

Terminal 2:

# nova list

Промывайте, полощите и повторяйте пока не найдете основную причину проблемы.

 Запуск демонов с использованием интерфейса командной строки

К сожалению, иногда ошибка не очевидна из файлов журналов. В этом случае измените тактику и используйте различные команды, возможно, запустите службу непосредственно в командной строке. Например, если служба glance-api отказывается стартовать и остается работающей, попробуйте запустить демон из командной строки:

# sudo -u glance -H glance-api

Это может вывести ошибку и причину проблемы.

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

При работе демона с sudo необходим флаг -H, так как некоторые демоны будут записывать файлы относительно домашнего каталога пользователя и данная запись может окончиться неудачей при опускании -H.