cyberflow_gravatar

Cyberflow

I am linux system administrator.


Navigation
» Home
» Categories
» Code
» XML Feed

Erchef no_connect Error

28 May 2014 » chef

Предпосылки

Столкнулся с тем, что при большом количестве нод в chef-server версий 11.0.4 и 11.0.8 поставленных из omnibus пакетов для Ubuntu, он с большой периодичностью стал отдавать 500 Internal server error нодам при выполнении куска рецепта, который делает поиск по data_bag’ам. При изучении логов выяснилось следующее: В логах nginx’a видно, что запросы на поиск отправляются на бэкэнд erchef’а (ядро chef-server написанное на эрланге) и в ответ получаем 500:

192.168.1.111 - - [27/May/2014:11:45:28 +0000] "GET /search/databag1?q=id:node1&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=1000 HTTP/1.1" 500 "0.051" 36 "-" "Chef Client/11.6.0 (ruby-1.9.3-p429; ohai-6.18.0; x86_64-linux; +http://opscode.com)" "127.0.0.1:8000" "500" "0.046" "11.6.0" "algorithm=sha1;version=1.0;" "auth1" "2014-05-27T11:45:28Z" "2jmj7l5rSw0yVb/vlWAYkK/YBwk=" 1011

Смотрим далее в логи erchef:

=ERROR REPORT==== 27-May-2014::11:45:28 ===
webmachine error: path="/search/databag1"
{error,
    {error,function_clause,
        [{chef_wm_search,'-make_bulk_get_fun/5-lc$^1/1-2-',
             [{error,no_connections},
             <<"databag1">>],
             [{file,"src/chef_wm_search.erl"},{line,233}]},
         {chef_wm_search,fetch_result_rows,4,
             [{file,"src/chef_wm_search.erl"},{line,351}]},
         {chef_wm_search,make_search_results,5,
             [{file,"src/chef_wm_search.erl"},{line,324}]},
         {chef_wm_search,to_json,2,
             [{file,"src/chef_wm_search.erl"},{line,130}]},
         {webmachine_resource,resource_call,3,
             [{file,"src/webmachine_resource.erl"},{line,166}]},
         {webmachine_resource,do,3,
             [{file,"src/webmachine_resource.erl"},{line,125}]},
         {webmachine_decision_core,resource_call,1,
             [{file,"src/webmachine_decision_core.erl"},{line,48}]},
         {webmachine_decision_core,decision,1,
             [{file,"src/webmachine_decision_core.erl"},{line,532}]}]}}

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

Решение

Суть проблемы в том, что erchef открывает N соединений к базе postgresql (по умолчанию 20) и вываливается с выше указанной ошибкой, если этих 20-и соединений ему не хватает. Чтобы увеличить количество соединений нужно поправить конфиг erchef’a.

/var/opt/chef-server/erchef/etc/app.config

...
{pooler, [
           {pools, [[{name, "sqerl"},
                     {max_count, 60},
                     {init_count, 40},
                     {start_mfa, {sqerl_client, start_link, []}}]]},
           {metrics_module, folsom_metrics}
          ]},
...

Правим значения для max_count и init_count с 20 на большие. В моём случае пока хватает 60 и 40.