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

в 9:33, , рубрики: administration, Microsoft SQL Server, mssql, powershell, storage, VMware, Администрирование баз данных, виртуализация, Серверное администрирование

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

diskpart <d:doresizeX.in >d:doresize.out

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

rescan
select volume X
extend
exit

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

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

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

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

Автор: Tzimie

Источник

* - обязательные к заполнению поля