четверг, 20 января 2011 г.

Замедление при копировани больших файлов - есть решения

Либо файл копируется очень медленно, либо прерывается копирование с ошибкой, после некоторого продолжительного времени копирования.

При копировании больших файлов в среде WINDOWS (число файлов мало <15, а их суммарный объем в разы превышает объем оперативной памяти хоста куда происходит копирование) вот уже несколько лет наблюдаю следующую картину:

Например, копируем с того хоста куда идет копирование один 90Гб-й файл, т.е. диск куда сохраняются файлы при копировании расположен на той же машине - которая выполняет операции копирование файлов с удаленного хосте по сети. Сетевые интерфейсы при этом подняты со скоростью по 1Gb/s и ещё объединены в Teaming по 2 в основном по LACP в режиме Round Robin.

Машина куда сохраняются файлы некоторое время с большой скоростью принимает их, примерно до того момента, как создается ощущение, что пока не заполниться кэш оперативной памяти под дисковое копирование, а после этого начинается резкое замедление - поскольку этот самый "кэш" начинает сбрасывать данные на диск и резко замедляет скорость забора данных с сетевого источника, о чем свидетельствует наблюдение за сетевой нагрузкой (Windows Task Manager->Networking).


На рисунке приведено поведение при использовании eseutil.exe

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

Иногда есть возможность отключить кэширование записи на диск, делается это в "Диспетчере устройств"(devmgmt.msc)->"Дисковые устройства"->свойства диска->вкладка "Политика":



но у некоторых подключенных дисковых устройств (у самого нужного сервера) такой возможности нету, например СХД EMC CLARiiON CX4-120:



а у некоторых есть, например HP EVA4000:




Есть альтернативные методы копирования - в частности средством eseutil.exe, которая обычно входит в состав Exchange и служит для дефрагментации почтовых баз. Взять дистрибутив можно здесь.

Фактически нужно только два файла eseutil.exe и ese.dll

синтаксис команды:

eseutil.exe /y {source-file} /d {destination-file}


В моем случае упирались в производительность дисковой подсистемы



, а средствами винды вообще не могли нормально скопировать только теряли время - несколько часов, были ошибки вида:

на Win2003:
"Cannot copy Insufficient system resources exist to complete the requested service."


на Win2008:
"An unexpected error is keeping you from copying the file. If you continue to receive this error, you can use the error code to search for help with this problem. Error 0x8007046A:Not enough server storage is available to proceed this command"


После использования eseutil, смогли начать копирование. Индикация процесса копирования происходит так же, как при дефрагментации баз:



Ощющение что с ней происходит всё быстрее и надежнее не покидало. Скорее всего это происходит из-за того что eseutil принудительно сбрасывает "кэш" копирования на диск по каким-то условиям.

Но и в этом случае eseutil не помогла...
Иногда никак не получается скопировать, так eseutil где-то на 95-98% копирования может выдать ошибку вида:

FAILURE: GetOverlappedResult (read): Not enough server storage is available to process this command.

где-нибудь в конце 90Гбайтного файла.

Тогда есть вариант поделить файл (WinRAR, 7zip, GNU SPLIT) и копировать по частям, а потом эти части собрать (copy, 7zip).

Когда ничего не помогает - как было в моем случае - заливаем бэкап на другой диск и форматим сбойный.

Есть ещё варианты с поднятием ftp-сервера на источнике и докачкой на приемнике. в общем случае - это через другие - протоколы - не SMB: fpt, p2p(torrent например)

либо пользоваться утилитами, позволяющими прерывать копирование по сети (SMB) и продолжать с места остановки, например "CopyFile 2", KillCopy, Real Total Copy и т.п.

В нашем случае смогли скопировать файл только после перезагрузки обоих серверов и на другой диск средствами обычного виндового копирования.

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

ссылки по теме:

http://blogs.technet.com/b/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx

http://support.microsoft.com/kb/198386/

http://support.microsoft.com/kb/106167

http://support.microsoft.com/kb/332023/ru

четверг, 13 января 2011 г.

Exchange 2007 PowerShell скрипт для выгрузки данных по пользователям в csv(табличный формат)

выводит все поля в CSV - аналог команды:

###################
Get-MailboxStatistics -server | fl
###################


скрипт:


###################
$CSV_File_Name = "c:\CSV_Get-MailboxStatistics.csv"

get-date -format u

#Статистика по всем ящикам

Get-MailboxStatistics -server | Select-Object DisplayName, TotalItemSize, LastLogoffTime, AssociatedItemCount, DeletedItemCount, DisconnectDate, ItemCount, LastLoggedOnUserAccount, LastLogonTime, LegacyDN, MailboxGuid, ObjectClass, StorageLimitStatus, TotalDeletedItemSize, Database, ServerName, StorageGroupName, DatabaseName, Identity, IsValid, OriginatingServer | sort-object -property displayname | Export-Csv $CSV_File_Name -encoding "unicode"

notepad $CSV_File_Name
###################


после выгрузки что бы открыть файл в Excel 2007, например, нужно в Excel 2007 создать пустую книгу и далее через меню "Данные"->"Получить внешние данные"->"Из текста" далее выбрав разделитель табуляции запятую и соответствующий шрифт быть счастливым.

Примечательно что OpenOffice Calc откроет его без вопросов.

среда, 12 января 2011 г.

настройка рассцылки почтовых уведомлений Directum на Windows 2008 R2 кластере

Не доверяйте неоптыным внедренцам Directum, пытайтесь сами разобраться в причинах неотправки почтовых уведомлений, вобщем то первая строка в поиске google решиа проблему.

http://club.directum.ru/blog/post/Rukovodstvo-po-nastrojjke-scenarija-171Agent-rassylki-vkhodjashhikh-zadanijj187.aspx

среда:
службы Directum c шарами крутятся на одном кластере "Directum" (сервера Windows 2008 R2)
база Directum крутиться на другом кластере "SQLCluster-01" (сервера Windows 2008 не R2)
почтовый сервер - Exchange 2007

как настроили:

А.Настройки почтовой системы:
Анонимный коннектор(создается через PowerShell -щас уже точно не помню как - давно это было)(располагаются все receive connectors в "Exchange Management Console" -> "Server Confiruration" -> "Hub Transport" -> "Receive Connectors"), работающий на 8025 порту, в нем прописываем IP-адреса наших узлов кластера Directum, делается это на вкладке "Network", на вкладке "Authentication" все галки сняты, на вкладке "Permission Groups" галки выставлены только для "Anonymous users" и "Exchange users"

также создал пользователя типа Directum_mail@mydomain.ru для которого включили почтовый ящик на Exchange 2007

Б.Настройки на нодах - подробнее смотри ссылку из начала поста.
И выполнили настройки на нодах кластера Directum в secpol.msc->Local Settings разрешили указанному пользователю "Log on as batch job" и "Log on as service"

В.Системные настройки Directum - через клиента из-под администратора:
Компоненты -> Утилиты администратора -> Установки системы и администрирование БД -> Константы -> находим имя константы:"MailOutgoingSettings" в качестве "Значения":
ServerType=SMTP;Server=mail.mydomain.ru;Port=8025;AuthenticationType=None;User=;Password=
-здесь всё как есть, т.е. пользователь и пароль не указаны, только домен свой подставляем.

Г.Планировщик заданий на обоих нодах кластера
(Start->All Programs->Accessories->System Tools->Task Scheduler)
1вариант:
создали bat-файл с указанием в нем одной строки:



"C:\Program Files (x86)\DIRECTUM Company\DIRECTUM 4.7\SBLauncher.exe" -S="SQLCluster-01" -D="DABASENAME" -CT="Script" -F="Agent_emailing_inbound_tasks" -N="USERNAMEAdministrator" -W="PASSWORDAdministrator"



Надо сказать, что пока не поменяли имя скрипта в системе Directum с русского на английское(Компоненты -> Утилиты администратора -> Установки системы и администрирование БД -> Сценарии -> ) - находим сценарий с Заголовком "Агент рассылки входящих заданий", открываем его и изменяем имя, например на следующее - "Agent_emailing_inbound_tasks", без этого батник вообще не работал, поскольку ругался на русские буквы, хотя при этом в "ControlPanel" -> "Region and Language" выставлено [Format:(Russian(Russia));Location:(Russia);Administrative:(Current language for non-Unicode programs:Russian(Russia))]


2вариант:

При создании задания прямо в его свойствах указали параметры запуска файла
Action:Start a program

Settings:

Program/script:

"C:\Program Files (x86)\DIRECTUM Company\DIRECTUM 4.7\SBLauncher.exe"


Add arguments (optional):


-S="SQLCluster-01" -D="DIRECTUM47" -CT="Script" -F="Agent_emailing_inbound_tasks" -N="Administrator" -W="Directum47"


Запуск заданий подготовили от имени пользователя Directum_mail

вторник, 11 января 2011 г.

Как поменять сервер держатель OAB Exchange 2007 для CCR cluster

Слышал, но не ожидал что всё так просто:

http://technet.microsoft.com/en-us/library/dd285503%28EXCHG.80%29.aspx

Погенерировав книгу после изменений в реестре, заметил что на узле кластера, на которую изменил настройку появилась шара с OAB. При этом проверил что новые контакты появляются и удаляются в адресной книге, получаемой Outlook 2007-м

С узла кластера, который был до изменений держателем адресной книги (Offline Address book) удалил шару.

Exchange 2007 PowerShell скрипт для перезаливки всех баз на пассивную ноду в CCR Cluster-е


####################################
#скрипт выполняет перезаливку ВСЕХ баз группы хранения с активной на пассивную ноду
####################################
$Array_SGs = Get-StorageGroup | select-object server, name, replicated | Sort-Object -Property name
"Count of Storage Groups=" + ([string] $Array_SGs.Length)
for($i=0;$i -le $Array_SGs.Length-1;$i++)
{
$SG_NAME = ([string] $Array_SGs[$i].server)+"\"+([string] $Array_SGs[$i].Name)
If ( ([string] $Array_SGs[$i].replicated) -eq "Clustered")
{
"[" + ($i+1) + "]" + "Storage Group name <<" + $SG_NAME + ">> is Clustered"
"reseed processing..."
#body of processing
"Suspend-StorageGroupCopy <<" + $SG_NAME + ">>"
Suspend-StorageGroupCopy -Identity $SG_NAME -SuspendComment "Suspending CCR to reseed." -Confirm:$false
Start-sleep -s 6
"Update-StorageGroupCopy <<" + $SG_NAME + ">>"
Update-StorageGroupCopy -Identity $SG_NAME -DeleteExistingFiles -force
Start-sleep -s 6
"Resume-StorageGroupCopy <<" + $SG_NAME + ">>"
Resume-StorageGroupCopy -Identity $SG_NAME
}
else
{
"[" + ($i+1) + "]" + "Storage Group name" + $SG_NAME + " is NOT Clustered nothing to do."
}
}


ещё полезный скрипт:


Get-MailboxDatabase | foreach-object {add-member -inputobject $_ -membertype noteproperty -name mailboxdbsizeinGB -value ([math]::Round(([int64](get-wmiobject cim_datafile -computername $_.server -filter ('name=''' + $_.edbfilepath.pathname.replace("\","\\") + '''')).filesize / 1GB),2)) -passthru} | Sort-Object mailboxdbsizeinGB -Descending | format-table identity,mailboxdbsizeinGB

Для получения размеров всех баз данных
взят здесь:
http://system-administrators.info/?p=5376

Другие вкусности PowerShell для Echange 2007
http://mcp.su/active-directory/powershell-exchange-2007-ad/