Шеф-повар 'уведомляет' сбои, чтобы перезапустить или перезагрузить сервисы

Посмотрите на, выройте:

# dig bestbuy.com

; <<>> DiG 9.5.0-P2.1 <<>> bestbuy.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 395
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;bestbuy.com.                   IN      A

;; ANSWER SECTION:
bestbuy.com.            20      IN      A       173.223.232.48
bestbuy.com.            20      IN      A       173.223.232.98

;; Query time: 52 msec
;; SERVER: 72.249.191.254#53(72.249.191.254)
;; WHEN: Sat Aug 14 14:26:35 2010
;; MSG SIZE  rcvd: 61

Как указано выше, они делают это для выравнивания нагрузки, заменяют и т.д... Но это - довольно небезопасный способ сделать его, потому что выравнивание нагрузки DNS работает близко к циклическому алгоритму: каждый раз Вы просите имя хоста, ответы сервера DNS с одним из пула (как Вы посмотрите случай в своем ping). К сожалению, это означает, что в случае одного из "серверов" понижается, половина запросов перестанет работать.

Лучше реализовать то использование истинной подсистемы балансировки нагрузки или VIP (виртуальный IP).

5
задан 18 July 2012 в 00:10
4 ответа

Кажется, это довольно распространенная проблема с ресурсами и уведомлениями в целом.

Я покопался в трекере билетов Opscode JIRA и обнаружил билет , обсудили большое количество изменений и исправлений в уведомлениях и поведении ресурсов, которые будут выпущены в версии 10.14.0

0
ответ дан 3 December 2019 в 01:58

Первое, что я бы проверил, что пользователь, запущенный chef-клиентом, имеет разрешения на запуск/перезапуск службы (обычно это не проблема).

Далее я бы проверил, что нет других запущенных рецептов, которые противоречат логике этого рецепта (иногда проблема, но не часто).

То, что я действительно думаю, что вызывает вашу проблему, это то, как шеф-повар обрабатывает очередь того, что ему нужно выполнить через оболочку. Многочисленные и несколько противоречивые обращения к одному и тому же сервису могут привести к неожиданному поведению (как вы уже видели). По умолчанию, все вызовы 'оболочки' обрабатываются как последняя часть фазы конвергенции в запуске chef-клиента. Более того, шеф-повар не гарантирует никакого определенного порядка выполнения, так что вещи могут часто происходить не в порядке и могут приводить к нежелательному поведению в зависимости от программного обеспечения сервиса, которым вы манипулируете. Обычно все, что вам нужно, - это избавиться от техники, описанной ниже

Быстрый и грязный ответ на ваш вопрос - добавить аргумент :таймер к вашим вызовам оповещения. DOC: http://docs.opscode.com/resource_common.html#notifications-timers

вот предлагаемое обновление кода вашего примера выше:

package "pgbouncer"

service "pgbouncer" do
    supports :start => true, :stop => true, :restart => true, :reload => true, :status => true
    action [:enable, :start]
end

cookbook_file "/etc/default/pgbouncer" do
    source "pgbouncer/pgbouncer"
    owner "root"
    group "root"
    mode 0644
end

cookbook_file "/etc/pgbouncer/userlist.txt" do
    source "pgbouncer/userlist.txt"
    owner "postgres"
    group "postgres"
    mode 0640
    notifies :restart, "service[pgbouncer]", :immediately
end

template "/etc/pgbouncer/pgbouncer.ini" do
    source "pgbouncer/pgbouncer.ini"
    owner "postgres"
    group "postgres"
    mode 0640
    variables :postgres_host => node[:postgres_host]
    notifies :restart, "service[pgbouncer]", :immediately
end

Это не самый эффективный способ, так как он может привести к тому, что ваш демон выполнит слишком много избыточных действий (до 3 вызовов "start like" за один запуск: start,restart,restart). Есть еще один, более дружественный к ООП способ сделать это в шеф-поваре, используя Определение (DOC: http://docs.opscode.com/essentials_cookbook_definitions.html). По сути, это будет пользовательская обёртка для сервисного ресурса pgbouncer, который вы определяете, чтобы уменьшить неэффективность выполнения избыточных вызовов, при этом гарантируя их эффективное выполнение, но я оставлю решение за вами.

.
2
ответ дан 3 December 2019 в 01:58

Я бы попытался изменить определение вашей службы на следующее

service "pgbouncer" do
    supports :start => true, :stop => true, :restart => true, :reload => true, :status => true
    action :enable
end

Я помню, как недавно испытал нечто подобное, и это было виновником. Сообщите мне, работает ли это для вас, но по какой-то причине я уже некоторое время определяю свои службы именно так, и с тех пор у меня не было никаких проблем.

0
ответ дан 3 December 2019 в 01:58

Не уверен, предоставляет ли pgbouncer Upstart или Init (отсюда выглядит как Init: http://packages.ubuntu.com/precise/amd64/pgbouncer/filelist ), но я бы попробовал это с вашим сервисным ресурсом, если у вас все еще есть проблемы :

service "pgbouncer" do
  provider Chef::Provider::Service::Init
  supports :start => true, :stop => true, :restart => true, :reload => true, :status => true
  action [:enable, :start]
end

Кроме того, я бы добавил : немедленно аргумент, который также предложил Грегори Патмор.

0
ответ дан 3 December 2019 в 01:58

Теги

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