Утро админа: добавляем место на десятках серверов за кофе

Каждый день мне приходится добавлять место на одном, двух, трех, пяти, а бывает — и десяти database серверах. Почему? Потому что для них характерен естественный рост баз. Серверов сотни, все они виртуалки с дисками на thin provisioning. Если им заранее выдать много места, то будет обязательно какой нибудь «runaway», типа апгрейда с переливом таблиц, который пожрет все это место, а если не пожрет, то поднадкусает. Как вы знаете, thin provisioning — это путь в одну сторону, если место сожрано, но то его назад не вернуть.

В итоге большинство серверов болтаются где то у границы 90% space used — именно потому, что на границе 90% срабатывает алерт. Как только я даю немного, именно немного места — сервер отправляется в район 80%-85% used, и через месяц другой место надо добавлять снова. И, тем не менее, много сразу давать не буду — слишком много прецедентов с runaways.

Я так часто делал механическую работу по расширению места на дисках, что мне это надоело и я решил это автоматизировать с помощью Jenkins:

du4orw8chagsb_vdlmu6alouqjo.png
Прошу прощения за несколько занудное и детализированное описание ниже, но если это может быть полезно кому-то, то важны как раз мелкие детали — именно на них всегда тратишь больше всего времени. Если детали не важны, сразу прокрутите на последнюю картинку.

Разумеется, прежде чем добавлять место я смотрю историю роста space used %, автоматически приложенную к алерту моей тайной системой мониторинга. Чаще всего рост естественный:

irq4rirrevysr21dsyaxgn7ko44.png

А вот тут лучше вначале разобраться:

bgknnofg68vwbwhyn-6ytff4vy4.png

Вернемся к Jenkins, который есть лишь интерфейс к Powershell script. У нас много VMware Vcenters, так что специальная процедура на SQL по имени сервера определяет, где находится данный сервер и коннектится именно к нему:

no2ajc1a9tlxvs8bpvd92mqyuas.png

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

5dva2abwezp0vq2mfgxttu4sklc.png

Правда, я нагло пользуюсь тем, что все сервера у нас отлиты подобным образом, например, D: всегда Hard disk 2. Если у вас это не так, то придется помучиться.

Теперь диск расширен с точка зрения VMware, но не с точки зрения guest (Windows). Мы должны выделенное место использовать. Для этого надо выполнить внутри guestа команды DISKPART.

lpemy_1vfmax1lddrxzznp61nkq.png

Мы нагло запихиваем в корень D: файл BAT и IN, и с помощью WMIC заставляем машинку выполнить эти команды. Файл doresizeX.bat (X — название драйва) содержит лишь

diskpart d:\doresize.out


А doresizeX.in содержит:

rescan
select volume X
extend
exit


Теперь все готово, надо только чуть подождать (команда то асинхронная!) и прочитать результат, отфильтровав ненужное:

o7ukhh-xtgw_jwxsubwzycicut8.png

И ждем письма от Jenkins:

of05ddtxffy0vpxtapc0vo11x28.png

© Habrahabr.ru