В рамках нашего EPAM Private Cloud для автоконфигурации виртуальных машин мы изначально использовали Chef Server 10.
Список поддерживаемых ролей перешагнул отметку 60 и включал в себя как простые, так и довольно сложные кластерные решения.
И вот когда количество клиентов сервера выросло до 750, мы заметили значительное снижение производительности.
Увеличивать мощность виртуальной машины, на которой установлен Chef Server 10, было не целесообразно, она и так была не малой( 2x Intel® Xeon® CPU L5640 @ 2.27GHz и 8Gb оперативной памяти).
Манипуляции с тюнингом chef-solr и chef-expander также не дали желаемого прироста производительности.
Вот тогда и решено было мигрировать с Chef 10 на Chef 11.
На сайте opscode.com говорится, что он быстрее, легче масштабируется и проще в настройке и управлении.
Когда сервер установлен и запущен, нужно создать пользователя с правами администратора.
Создадим директорию .chef в домашней папке пользователя и скопируем необходимые ключи.
Запускаем настройку файла конфигурации для knife.
Сперва необходимо установить knife-essentials для расширения функционала утилиты knife
Создадим директорию, которую будем использовать как транзитную точку. И в ней создадим папку для файлов конфигурации knife.
Создадим отдельные файлы конфигурации knife для Chef 10 и Chef 11
Осталось скопировать webui.pem c Chef Server 10 в /home/chefuser/transfer/.chef/chef-webui.pem и
/home/chefuser/.chef/chefuser.pem в /home/chefuser/transfer/.chef/admin.pem.
Когда это готово, можно пробовать скачивать информацию о нодах, клиетах, ролях и т.д.
Таким же образом можно скачать информацию об отдельной ноде или клиенте.
Например:
Перед тем, как начать закачку данных на Chef Server 11, рекомендую проверить чтобы у вас не было одинаковых названий клиентов или нод на обеих серверах. Иначе информация о них может затереться.
Данные закачиваем следующим образом
Закачивать также можно по одной ноде, клиенту и т.д.
Это, пожалуй, самый интересный этап в миграции.
Если в качестве chef_server_url вы использовали ДНС-имя, то проблем нет. Нужно просто переназначить его на новый сервер.
Но если использовалось, как в нашем случае, имя виртуальной машины, которое уникально и назначить его другой машине нельзя, то придётся подумать.
Я этот вопрос решил созданием простого кукбука, целью которого было поменять значение chef_server_url на нужное и сделать рестарт chef-client.
Если кому-нибудь интересна такая реализация — кукбук будет выложен в GitHub.
Итоги: После миграции на Chef 11 мы получили прирост производительности в разы. Прежний сервер постоянно был «на грани свопа» и мог обрабатывать простой запрос на список ролей до 2 минут. На текущем сервере с тем же количеством клиентов свободно 3Гб оперативной памяти и запросы обрабатываются в течении нескольких секунд.
Если у кого-нибудь остались вопросы — пишите в комментарии, охотно отвечу.
Список поддерживаемых ролей перешагнул отметку 60 и включал в себя как простые, так и довольно сложные кластерные решения.
И вот когда количество клиентов сервера выросло до 750, мы заметили значительное снижение производительности.
Увеличивать мощность виртуальной машины, на которой установлен Chef Server 10, было не целесообразно, она и так была не малой( 2x Intel® Xeon® CPU L5640 @ 2.27GHz и 8Gb оперативной памяти).
Манипуляции с тюнингом chef-solr и chef-expander также не дали желаемого прироста производительности.
Вот тогда и решено было мигрировать с Chef 10 на Chef 11.
На сайте opscode.com говорится, что он быстрее, легче масштабируется и проще в настройке и управлении.
Итак, сперва краткая инструкция по установке Chef Server 11 для Ubuntu12.04.
#Скачиваем и устанавливаем пакет
wget -O chef-server-11.deb https://opscode-omnitruck-release.s3.amazonaws.com/ubuntu/12.04/x86_64/chef-server_11.0.6-1.ubuntu.12.04_amd64.deb
sudo dpkg -i chef-server-11.deb
#Конфигурируем и запускаем
sudo chef-server-ctl reconfigure
#Проверяем, что установка прошла успешно
sudo chef-server-ctl test
Когда сервер установлен и запущен, нужно создать пользователя с правами администратора.
Создадим директорию .chef в домашней папке пользователя и скопируем необходимые ключи.
mkdir ~/.chef
cp /etc/chef-server/admin.pem ~/.chef
cp /etc/chef-server/chef-validator.pem ~/.chef
Запускаем настройку файла конфигурации для knife.
knife configure -i
#В итоге получаем что-то типа
cat ~/.chef/khife.rb
log_level :info
log_location STDOUT
node_name 'chefuser'
client_key '/home/chefuser/.chef/chefuser.pem'
validation_client_name 'chef-validator'
validation_key '/home/chefuser/.chef/chef-validator.pem'
chef_server_url 'https://192.168.0.1'
syntax_check_cache_path '/home/chefuser/.chef/syntax_check_cache'
Перенос данных с Chef 10.
Сперва необходимо установить knife-essentials для расширения функционала утилиты knife
/opt/chef-server/embedded/bin/gem install knife-essentials
Создадим директорию, которую будем использовать как транзитную точку. И в ней создадим папку для файлов конфигурации knife.
mkdir -p ~/transfer/.chef
Создадим отдельные файлы конфигурации knife для Chef 10 и Chef 11
/home/chefuser/transfer/.chef/knife-chef10.rb
transfer_repo = File.expand_path('..', File.dirname(__FILE__))
chef_server_url «chef-10.example.com:4000»
node_name 'chef-webui'
client_key "#{transfer_repo}/.chef/chef-webui.pem"
repo_mode 'everything'
versioned_cookbooks true
chef_repo_path transfer_repo
cookbook_path nil
chef_server_url «chef-10.example.com:4000»
node_name 'chef-webui'
client_key "#{transfer_repo}/.chef/chef-webui.pem"
repo_mode 'everything'
versioned_cookbooks true
chef_repo_path transfer_repo
cookbook_path nil
/home/chefuser/transfer/.chef/knife-chef11.rb
transfer_repo = File.expand_path('..', File.dirname(__FILE__))
chef_server_url «chef-11.example.com»
node_name 'admin'
client_key "#{transfer_repo}/.chef/admin.pem"
repo_mode 'everything'
versioned_cookbooks true
chef_repo_path transfer_repo
cookbook_path nil
chef_server_url «chef-11.example.com»
node_name 'admin'
client_key "#{transfer_repo}/.chef/admin.pem"
repo_mode 'everything'
versioned_cookbooks true
chef_repo_path transfer_repo
cookbook_path nil
Осталось скопировать webui.pem c Chef Server 10 в /home/chefuser/transfer/.chef/chef-webui.pem и
/home/chefuser/.chef/chefuser.pem в /home/chefuser/transfer/.chef/admin.pem.
Когда это готово, можно пробовать скачивать информацию о нодах, клиетах, ролях и т.д.
/opt/chef-server/embedded/bin/knife download -c .chef/knife-chef10.rb /
#Результатом будет создание папок /nodes /clients /roles /cookbooks и т.д. с соответствующим содержимым.
ls transfer/
clients cookbooks data_bags environments nodes roles users
Таким же образом можно скачать информацию об отдельной ноде или клиенте.
Например:
/opt/chef-server/embedded/bin/knife download -c .chef/knife-chef10.rb /nodes/server1.json
Перед тем, как начать закачку данных на Chef Server 11, рекомендую проверить чтобы у вас не было одинаковых названий клиентов или нод на обеих серверах. Иначе информация о них может затереться.
Данные закачиваем следующим образом
/opt/chef-server/embedded/bin/knife upload -c .chef/knife-chef11.rb /
Закачивать также можно по одной ноде, клиенту и т.д.
Переключение клиентов с Chef 10 на Chef 11.
Это, пожалуй, самый интересный этап в миграции.
Если в качестве chef_server_url вы использовали ДНС-имя, то проблем нет. Нужно просто переназначить его на новый сервер.
Но если использовалось, как в нашем случае, имя виртуальной машины, которое уникально и назначить его другой машине нельзя, то придётся подумать.
Я этот вопрос решил созданием простого кукбука, целью которого было поменять значение chef_server_url на нужное и сделать рестарт chef-client.
Если кому-нибудь интересна такая реализация — кукбук будет выложен в GitHub.
Итоги: После миграции на Chef 11 мы получили прирост производительности в разы. Прежний сервер постоянно был «на грани свопа» и мог обрабатывать простой запрос на список ролей до 2 минут. На текущем сервере с тем же количеством клиентов свободно 3Гб оперативной памяти и запросы обрабатываются в течении нескольких секунд.
Если у кого-нибудь остались вопросы — пишите в комментарии, охотно отвечу.