Openstack - Запуск сценария после создания / удаления виртуальной машины

Есть ли способ заставить Openstack запускать сценарий сразу после создания или удаления виртуальной машины (как для Windows, так и для Linux)? Этот сценарий должен запускаться на самом хосте, а не на виртуальной машине или гостевой системе, которую он только что создал.

Цель этого состоит в том, чтобы автоматически добавить / удалить хост с нашего сервера Nagios. Прямо сейчас мы добавляем / удаляем хосты на Nagios вручную, но это не идеально, поскольку мы создаем / удаляем виртуальные машины несколько раз в день.

Мы можем легко добавить хост на Nagios, используя следующий вызов API: но не видели абсолютно никакого движения. Вот ситуация:

Я установил блок EC2 бесплатного уровня в качестве промежуточной машины на Ubuntu 14.04 с LEMP, в частности, Nginx и PHP7 с WordPress. Мы создали сайт, все работает нормально. Его TTFB составляет 505 миллисекунд.

Я установил блок облачных вычислений бесплатного уровня в качестве производственной машины с той же конфигурацией, но TTFB составляет 14 секунд. Знайте, что спецификации на коробке Google немного лучше, чем на EC2. g1-small (1 виртуальный ЦП, 1,7 ГБ памяти) по сравнению с t2-micro (1 виртуальный ЦП, 1 ГБ памяти). SSD с обеих сторон.

Я пробовал много вещей, включая многие методы диагностики проблем TTFB, описанные в этом ответе https://serverfault.com/a/350422 . Я также пробовал увеличить объем памяти для PHP и WordPress. Я' Я пробовал устанавливать пакеты и плагины, которые люди предлагали для оптимизации производительности. Я особенно борюсь с тем, что моему промежуточному экземпляру ничего из этого не нужно. Прежде чем вы спросите: «Почему бы вам просто не сделать все это на AWS», знайте, что использование Google Cloud Compute для производства является обязательным требованием для этого проекта.

В моих обсуждениях с людьми кто-то сказал, что Google Cloud не имеет сброса вывода для обслуживания содержимого до завершения ответа. Может ли кто-нибудь подтвердить?

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


ИЗМЕНИТЬ ОДИН: Отвечая на вопросы ниже. Большое спасибо за предложение помощи.

Находятся ли два сервера в одном географическом местоположении? Насколько велика разница?

Экземпляр EC2 находится на востоке США или в Вирджинии. Экземпляр GCE находится в US-West1a, который, как я полагаю, находится в Орегоне. Я нахожусь в Нью-Йорке, поэтому географической разницы недостаточно, чтобы оправдать 14-секундный TTFB. Кроме того, инструменты, которые я использовал, имеют географическое положение, такое как Даллас (разумная середина между двумя городами), и также сообщают о TTFB за 14 секунд.

Первое, что нужно выяснить, это где задержка. Измените свой вопрос, включив> изгиб веб-сайта Google, соответствующую запись журнала доступа Nginx, любую> соответствующую запись журнала ошибок Nginx и журналы доступа / ошибок PHP. Необходимо включить доступ к PHP> журналам. Также посмотрите «сверху», пока происходит завиток, и сделайте> типичный снимок экрана. Наконец, поделитесь тестами webpagetest.org для> обеих сред, чтобы продемонстрировать проблему, запутанные, если ваши доменные имена> являются секретными - поисковые роботы все равно находят все домены. - Тим 3 часа назад

  • cURL

    time_namelookup: 0. time_connect: 0,078n
    time_appconnect: 0,000n
    time_pretransfer: 0,078n
    time_redirect: 0,000n
    time_starttransfer: 13.469n
    time_total: 13.469n

У меня недостаточно очков репутации, чтобы разместить изображение или ссылку на другое изображение, но когда я запускаю его, появляется всплывающее окно php-fpm7.0 и mysqld.

PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + КОМАНДА 24625 www-data 20 0 374680 43352 30376 S 0,7 2,5 0: 00,90 php-fpm7.0 21244 mysql 20 0 870388 71088 11012 S 0.3 4.1 0: 10.57 mysqld

  • Запись в журнале доступа Nginx

    [07 / May / 2017: 06: 01: 58 +0000] "GET / HTTP / 1.1" 200 58528 "-" "curl / 7.35.0"

  • Запись в журнале ошибок Nginx

Здесь ничего нового с этим запросом

  • Запись в журнале доступа к PHP

Ничего в журналах PHP-FPM.

  • Запись в журнале ошибок PHP

Ничего из этого запроса, но я сделал запрос браузера до этого, и вот что в медленном журнале (я выставил окно на 5 секунд):

[07-May-2017 06:01:48]  [pool www] pid 24625
script_filename = /var/www/html/wordpress/index.php
[0x00007fad55e12810] mysqli_real_connect() /var/www/html/wordpress/wp-
includes/wp-db.php:1540
[0x00007fad55e126f0] db_connect() /var/www/html/wordpress/wp-includes/wp-db.php:658
[0x00007fad55e12620] __construct() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products.php:7
[0x00007fad55e12590] edb_db_init() /var/www/html/wordpress/wp-content/themes/xxxx/inc/db/items.php:258
[0x00007fad55e124d0] edb_get_product_link() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products.php:23
[0x00007fad55e123c0] edb_display_frontpage_items() /var/www/html/wordpress/wp-content/themes/xxxx/page-templates/home.php:95
[0x00007fad55e121e0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-includes/template-loader.php:74
[0x00007fad55e12140] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-blog-header.php:19
[0x00007fad55e120a0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/index.php:17
  • EC2 Timeline

https://www.screencast.com/t/vxHTCcyf

  • GCE Timeline

https: //www.screencast .com / t / 22OXgA7T

Самым очевидным вариантом, который можно попробовать, было бы написать barebones-скрипт hello world php> и измерить его ttfb, если вы еще этого не сделали. Если это где-то около 14, то> у вас проблема, не имеющая ничего общего с wordpress или базой данных. > "Google Cloud не делает" применяется к ответам HTTP> Google App Engine, которые возвращаются блоком, поэтому это не применимо к> экземплярам вычислений.

Да, я сделал это. Hello World и другие статические файлы отвечают быстро. PHPInfo также быстро реагирует. Если я правильно помню, все простые и статические файлы были около 700 мс TTFB. Благодарим за пояснение, касающееся промывки выходных данных только для App Engine. По крайней мере, я знаю, что есть простое решение, которое мне просто не хватает.

Единственное, что я видел, что дает мне что-то, с чем можно работать, - это медленное ведение журнала PHP.

[07-May-2017 00:56:39]  [pool www] pid 24793
script_filename = /var/www/html/wordpress/index.php
[0x00007fad55e14810] mysqli_real_connect() /var/www/html/wordpress/wp-includes/wp-db.php:1540
[0x00007fad55e146f0] db_connect() /var/www/html/wordpress/wp-includes/wp-db.php:658
[0x00007fad55e14620] __construct() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products.php:7
[0x00007fad55e14590] edb_db_init() /var/www/html/wordpress/wp-content/themes/xxxx/inc/db/items.php:258
[0x00007fad55e144d0] edb_get_product_link() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products$
[0x00007fad55e143c0] edb_display_frontpage_items() /var/www/html/wordpress/wp-content/themes/xxxx/page-templat$
[0x00007fad55e141e0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-includes/template-loader.php:74
[0x00007fad55e14140] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-blog-header.php:19
[0x00007fad55e140a0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/index.php:1

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

1
задан 7 May 2017 в 09:29
1 ответ

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

Почти все аспекты производительности в GCP связаны с количеством процессоров - например, 2 ГБ сети на ядро ​​процессора. Кроме того, в Google Cloud g1-micro является машиной с общим ядром . Из ссылки:

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

На AWS

1159110] t2.micro классифицируется как burstable - что на первый взгляд похоже на модель общего ядра Google, но несколько отличается:

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

Чтобы выполнить истинное сопоставимое сравнение, я настоятельно рекомендую использовать более высокопроизводительные типы экземпляров с обеих сторон, чтобы гарантировать доступность ресурсов для Например, Amazon m3.medium и Google n1-standard-1 - оба предоставляют 1 ЦП и 3,75 ГБ ОЗУ.

Чтобы удалить географию из вашего возможного списка виновных, я также разместит ваш экземпляр AWS на западе сша-2, который также находится в Орегоне - он может быть дальше от вашего местоположения, но, по крайней мере, вы будете тестировать два экземпляра, которые находятся на таком же расстоянии, а не один рядом и один далеко.

Я бы также попытался повторно создать экземпляры несколько раз, чтобы защититься от «шумных соседей» и аппаратных причуд - если вы используете управление конфигурацией (и если вы работаете в облаке, вам следует использовать) это должно быть пустяком.

0
ответ дан 4 December 2019 в 04:56

Теги

Похожие вопросы