Отслеживание сообщений в логах Exchange 2013 — быстро и легко!

К нам часто обращаются заказчики с просьбой выполнить перенос их текущих проектов на новый сервер. Если речь идёт о нескольких типовых сайтах, то в этом случае трудностей не возникает. Однако бывают запросы на перенос очень крупных и сложных архитектур. Мы расскажем, с чем пришлось столкнуться в процессе такого переноса и каких типовых ошибок стоит избегать.

Асинхронное API

Рассмотрим, наверное, самое базовое решение. Мы делаем какое-то HTTP API, которым будут пользоваться клиенты из вне. Вопросы формата запроса: какая-то модификация REST, XML-RPC, JSCON-RPC, gRPC, «чистый HTTP» – не суть. Главное то, что мы не всегда знаем, за какое время будет дан ответ, не порвётся ли соединение по timeout-у (к слову, возможно поэтому популярна заметка про увеличение timeout-а).

Создание запроса

А раз мы не знаем, когда ответим – лучше отдавать не сам ответ, а обещание ответить. Уж это то мы можем! Достаточно сам запрос положить к себе в локальное хранилище, сгенерировать id запроса, которое будет как раз обещанием. Id можно как случайное – тогда нужно будет хранить ещё и отображение id на запрос, так и генерировать его из самого запроса по ключевым параметрам, которые будут уникальны для каждого потенциального запроса.

Например, приходит запрос на получение статистики посещаемости сайта. А статистика у нас сложная, всякие воронки считаются, да и разные агрегирующие функции отрабатывают не мгновенно. Сам запрос мы кладём в какую-то очередь, к примеру, Redis, AMQP, или даже в таблицу БД. Предположим, запрос сложный – генерируем случайный id, например, через UUID или GUID. Тогда при сохранении запроса в базе/очереди/key-value хранилище добавляем ключевое поле «id» с нашим идентификатором. Сам этот идентификатор отдаём клиенту.

Считаем, что сохранение в очередь происходит крайне быстро, да и генерация id быстра – делаем это синхронно, по времени ответа почти незаметно для клиента.

Статус запроса

Что же наш клиент должен делать с полученным идентификатором? Ему то нужен ответ на запрос, а не идентификатор запроса. А клиент должен с некоторой периодичностью проверять статус запроса – для этого посылать на API уже другой запрос с полученным идентификатором.

Сначала, например, статус «в обработке», потом «готов». А может быть и статус ошибки, если с запросом что-то не так, либо же наш сервер где-то сломался. Вообще, статусов может быть великое множество, но базово – «в очереди» и «готов к получению».

Сам же запрос сидит в очереди, пока до него не доберётся уже отдельный обработчик запросов (worker), который уже без ограничений HTTP timeout-а займётся им. По завершении работы, он положит результат в какое-то хранилище, а статус запроса переведёт в «готово».

Получение результата

Когда же наш обработчик подготовил ответ, клиент на очередной запрос статуса получает ответ «готово», и делает уже 3-ий тип запроса – на получение результата.

Сам же результат может быть сохранён в БД, если это какой-то JSON / XML / etc ответ. Или же, как в примере с подготовкой отчёта статистики использования сайта – на файлохранилище в виде .xls / .pdf файла. И в зависимости от этого в «результате» будут либо данные, либо ссылка, либо ещё что-то.

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

Через phpMyAdmin

phpMyAdmin — это веб-приложение, которое помогает в графической форме управлять базами данных на сервере MySQL. Данное веб-приложение доступно из панели управления в разделе MySQL.

Откройте раздел MySQL в панели управления.

С правой стороны от названия вашей базы данных нажмите на значок

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

Экспорт

Если вам необходимо экспортировать базу данных, то перейдите во вкладку «Экспорт»:

Далее вам нужно выбрать один из методов экспорта:

  • Быстрый — если нужно экспортировать базу данных с минимальным количеством настроек.
  • Обычный — если нужно экспортировать базу данных с определенными настройками, такими как: сжатие, кодировка, операторы.

После выбора метода нажмите на кнопку «Вперед» для начала экспорта:

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

Импорт

Через phpMyAdmin

Если вам необходимо импортировать базу данных, то перейдите во вкладку «Импорт»:

Выберите необходимый файл для загрузки, он может быть сжат в архив (gzip, bzip2, zip) или находиться без сжатия, после нажмите на кнопку «Вперед» для начала импорта:

Частичный перенос 

При таком типе переноса копируются только те файлы, которые вы указали. И если вы хотите, чтобы техподдержка перенесла на новый сервер конкретные директории, файлы, конфиги, вам будет необходимо перечислить их в техническом задании (запросе на перенос). Учтите, что большое количество мелких файлов сильно замедляет переезд. 

При переносе файлов на новый сервер может понадобится его первоначальная настройка — это зависит от того, какие именно файлы вы собираетесь переносить, и есть ли уже какие-то файлы на новом сервере.  

Когда использовать

Подходит в случаях смены/обновления операционной системы на старом сервере или «сломанной» операционной системе. Также — при необходимости перенести только часть данных с сервера. Этот тип переноса используется и тогда, когда на новом сервере уже имеется важная информация, которую нельзя потерять. 

Перенос отдельных файлов осуществляется одним из двух способов:

  • Через панель управления ISPmanager.

  • Вручную.

Импорт данных с помощью панели управления ISPmanager

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

Если у вас установлена панель управления ISPmanager и вы планируете переносить файлы на другой сервер своими силами, рекомендуем выбрать именно этот тип переноса, так как это сильно облегчит вам задачу. 

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

Копирование данных происходит с помощью функционала панели «Импорт пользователя». 

Импорт данных с помощью ISPmanager возможен только тогда, когда панель установлена как на старом сервере, откуда будут забираться файлы, так и на новом, куда они будут копироваться. Если предоставить доступ root на оба сервера, время переноса сократится — права администратора позволяют переносить файлы не только одного, но и нескольких пользователей и сразу запускать копирование файлов. 

Если подключаться к серверу не из под root, а под обычным пользователем, перенос займет больше времени: сначала панель создаст резервную копию файлов, затем перенесет ее на новый сервер и только после этого распакует. 

Если вы используете версию панели ISPmanager Business, помните, что перенос данных возможен только с использованием резервной копии, созданной на исходном сервере, в отличие от ISPmanager Lite, где возможны оба варианта — копирование в реальном времени (с помощью rsync) и разворачивание (восстановление) из резервной копии.  

Во время переноса старый сервер продолжает работать, а риск потери данных минимален. 

Что нужно знать:

  1. Будут перенесены — настройки доменов, сделанные через панель, почта, задания cron и базы.

  2. Не будут перенесены -— глобальные настройки web-серверов, почты, mysql. Если это важно, сообщите техподдержке заранее, чтобы сотрудники могли скопировать файлы конфигурации со старого сервера вручную.

  3. Дополнительное программное обеспечение будет необходимо установить вручную либо через панель ISPmanager.

Перенос данных вручную

Такой тип переноса используется, когда на обоих серверах, старом и новом, нет панели ISPmanager, либо она установлена только на одном из них. 

Как правило, вручную переносят файлы сайта (или сайтов) и базы данных. Время переноса зависит от количества файлов, однородности структуры переносимых сайтов и расположения данных на сервере. Порой тому, кто проводит работы по переносу, приходится собирать файлы буквально по всему серверу и использовать для каждого сайта свой алгоритм работы. Поэтому такой тип переноса считается самым долгим. 

Если на новом сервере установлен ISPmanager, то в момент переноса можно распределить сайты по разным пользователям и привести структуру к единообразию, чтобы в будущем было легче работать. 

Что нужно знать:

  1. Переносим только нужные данные, весь мусор оставляем на старом сервере.

  2. Не будут перенесены, если не указано в техническом задании (запросе на перенос) — настройки web-серверов, почты, mysql, cron, почтовые ящики и планировщик (cron), а также дополнительное программное обеспечение, которое не требуется для запуска сайта. 

С чем мы столкнулись при анализе проекта

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

От использования панели управления сервером пришлось отказаться, так как она препятствовала правильному резервированию (то есть копированию данных с одного сервера на другой). К тому же, само техническое задание не предполагало, что мы предоставим специалистам заказчика функционал по администрированию программно-аппаратного комплекса.

Самым сложным оказалось составление списка подлежащих к переносу веб-проектов, баз данных и программного окружения. Сложность была обусловлена политикой безопасности компании-заказчика и закрытым доступом к текущей системе. Из-за этого специалисты не могли досконально проанализировать все настройки сервера и сразу понять, как перенести их и где могут возникнуть трудности.

После предварительного анализа и переговоров мы пришли к выводу, что требуется перенести порядка 20 баз данных, 20 веб-проектов, два сервиса поиска и более 1 ТБ файлов статической информации. В итоге мы разделили первичный перенос проекта на 5 этапов:

  1. Построение и тестирование архитектуры;
  2. Перенос с сервера на сервер статической информации;
  3. Перенос сервера базы данных SQL и настройка репликации между серверами;
  4. Перенос вспомогательных веб-проектов и настройка программного окружения;
  5. Перенос основного сайта компании.

Все данные переносились на выделенные серверы

Ручной перенос сайта на VPS

Перемещение состоит из трех этапов:

Скачать файлы можно по протоколу FTP. Обычно они располагаются в папке /public_html. Дамп базы данных проще всего получить через экспорт в phpMyAdmin.

Самый удобный вариант — если на предыдущем VPS была установлена панель управления. Посмотрим, как сделать полную копию сайта на примере ISPmanager.

  1. Откройте раздел «Домены» — «WWW-домены».

  2. Выберите домен, который нужно перенести. Нажмите на кнопку «Каталог».

  3. Выделите файлы, которые нужно сохранить, и нажмите на кнопку «Скачать». Все файлы будут собраны в архив.

  4. Перейдите в панель phpMyAdmin через раздел «Инструменты».

  5. Выберите нужную базу данных.

  6. Перейдите на вкладку «Экспорт».

  7. Выберите способ «Быстрый» и формат SQL.

  8. Сохраните файл на компьютере.

У вас есть архив с файлами и дамп базы данных. Теперь нужно перенести их на новый сервер. Но сначала необходимо его подготовить — настроить ту же конфигурацию, которая была на предыдущем VPS.

Допустим, у вас была ОС Ubuntu с LAMP. Создайте такую же конфигурацию на новом VDS. Посмотрим на примере Timeweb.

  1. Зайдите в панель управления VDS.

  2. Нажмите «Создать сервер».

  3. Придумайте имя и добавьте комментарий, если он нужен.

  4. Выберите ОС и ПО — Ubuntu и LAMP.

После создания VDS перенесите на него домен. Затем к нему вы привяжете загруженный веб-проект.

  1. Скачайте и запустите программу FileZilla — это удобный менеджер для управления FTP-подключением.

  2. Укажите IP-адрес VDS, логин и пароль. Порт — 22.

  3. Загрузите файлы в каталог /var/www/html.

Теперь нужно добавить базу данных из дампа. Можно сделать это через консоль, которая доступна в панели управления. Авторизуйтесь, используя логин и пароль для подключения к VPS.

Выполните команду:

mysql

Затем создайте БД:

CREATE DATABASE `названиеБД`;

Создайте пользователя и пароль:

CREATE USER 'пользователь'@'localhost' IDENTIFIED BY 'пароль';

Предоставьте привилегии:

GRANT ALL PRIVILEGES ON `названиеБД`.* TO 'пользователь'@'localhost';

Перезагрузите привилегии:

FLUSH PRIVILEGES;

Загрузите дамп базы данных через FTP — например, в директорию /var/www/. Затем импортируйте его в новую БД:

mysql -u"пользователь" названиеБД -p"пароль" < /var/www/

Если вы поставите на новый сервер phpMyAdmin, то можно будет импортировать базу данных через него.

Перенос через ISPmanager

Если вы используете на новом сервере ISPmanager, то перенос получится выполнить в графическом режиме.

  1. Авторизуйтесь в панели управления и создайте нового пользователя в разделе «Учетные записи» — «Пользователи».

  2. Выполните вход с помощью нового аккаунта.

  3. Подключите домен: в разделе «Домены» — «WWW-домены» создайте новую сущность. Укажите в настройках домен и адрес электронной почты администратора.

  4. Загрузите файлы: выберите новый домен и перейдите в «Каталог», удалите созданный по умолчанию файл index и нажмите на кнопку «Закачать».

  5. Импортируйте базу данных через phpMyAdmin. Она доступна в разделе «Инструменты».

Самая большая проблема при переносе — настроить ту же конфигурацию, которая была на предыдущем сервере. Поэтому если у вас нет опыта, то лучше воспользоваться автоматическим перемещением с помощью специалистов поддержки. Так вы точно избежите ошибок из-за несовместимости.

Импорт дампа базы данных PostgreSQL в pgAdmin 4

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

Заметка! Как создать базу данных в PostgreSQL с помощью pgAdmin 4.

Все действия по созданию базы данных и восстановлению данных этой базы из архивной копии мы будем делать все на том же компьютере с помощью того же pgAdmin 4, только для этого необходимо подключиться к нужному нам серверу (пункт контекстного меню «Создать сервер» и ввести настройки для подключения, подробнее, как это делается, я рассказывал в той же статье, которая посвящена установке PostgreSQL на Debian).

Импорт дампа базы данных PostgreSQL в pgAdmin 4

Импорт сжатого дампа базы данных

Чтобы импортировать базу данных, дамп который был создан в «специальном» формате, необходимо на целевом сервере выбрать базу данных, которую требуется восстановить из дампа (мы ее предварительно создали), в контекстном меню выбрать пункт «Восстановить», затем в пункте «Имя файла», используя кнопку с тремя точками, указать файл дампа, который мы создали чуть ранее с расширением backup.

Больше никаких настроек вводить не требуется, нужный формат выбран по умолчанию, мы можем сразу нажимать кнопку «Восстановить».

Когда появится сообщение «Успешно завершено», процесс будет завершен.

В результате все данные будут восстановлены из дампа, и таким образом мы перенесли базу данных PostgreSQL на новый сервер.

Заметка! Как создать таблицу в PostgreSQL с помощью pgAdmin 4.

Импорт дампа базы данных PostgreSQL в pgAdmin 4

Импорт дампа базы данных в формате SQL

В случае с простым форматом, т.е. с обычными SQL инструкциями, использовать отдельный функционал для восстановления не получится, поэтому мы можем просто выполнить SQL скрипт, который содержится в этом файле.

Для этого открываем Query Tool (запросник) в контексте нужной нам базы данных, затем используя кнопку «Открыть файл» выбираем наш дамп в формате SQL и нажимаем кнопку «Выполнить».

Если инструкция выполнится без ошибок, значит, все хорошо.

Примечание! Если Вы уже восстановили базу данных предыдущим способом, то, чтобы использовать этот способ, необходимо пересоздать базу данных, иначе возникнет конфликт и, соответственно, ошибка, так как все объекты в базе уже будут существовать.

В итоге мы перенесли базу данных PostgreSQL с одного сервера, который управляется операционной системой Windows, на другой, который управляется Linux, хотя это, как Вы понимаете, в нашем случае было не так принципиально.

Импорт дампа базы данных PostgreSQL в pgAdmin 4

Стоит отметить, что если требуется перенести базу данных, размер которой достаточно большой, например, несколько десятков или сотен гигабайт, то лучше напрямую использовать консольные утилиты pg_dump или pg_dumpall, т.е. без графического интерфейса pgAdmin 4.

Опрос. Какой операционной системой Вы пользуетесь?

Возможные значения поля source

Значение источника Описание

ADMIN

Источник события был введен пользователем. Например, администратор использовал средство просмотра, чтобы удалить сообщение, или отправил файлы сообщений с помощью каталога воспроизведения.

AGENT

Источником события был агент транспорта.

APPROVAL

Источником события была платформа утверждения, используемая для контролируемых получателей. Подробнее см. в разделе Управление утверждением сообщений.

BOOTLOADER

Источником события были необработанные сообщения, которые присутствовали на сервере на момент загрузки. Это относится к типу событий LOAD.

DNS

Источником события было DNS.

DSN

Источником события было уведомление о доставке (также называемое сообщением возврата или отчетом о недоставке).

GATEWAY

Источником события был внешний соединитель. Подробнее см. в разделе Внешние соединители.

MAILBOXRULE

Источником события было правило для папки «Входящие». Дополнительные сведения см. в статье Правила для папки «Входящие» в Outlook Web App.

MEETINGMESSAGEPROCESSOR

Источником события был обработчик сообщения о собрании, который обновляет календари в соответствии с обновлениями собрания.

ORAR

Источником события был альтернативный получатель, запрошенный отправителем (ORAR). Вы можете включить или отключить поддержку ORAR на получающих соединителях, используя параметр OrarEnabled в командлете New-ReceiveConnector или Set-ReceiveConnector.

PICKUP

Источником события был каталог раскладки. Подробнее см. в разделе Каталог раскладки и каталог преобразования.

POISONMESSAGE

Источником события был идентификатор сообщения о сбое. Дополнительные сведения о сообщениях о сбое и очереди сообщений о сбое см. в разделе Queues and messages in queues

PUBLICFOLDER

Источником события была общедоступная папка, поддерживающая почту.

QUEUE

Источником события была очередь.

REDUNDANCY

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

ROUTING

Источником события был компонент разрешения маршрутизации классификатора в службе транспорта.

SAFETYNET

Источником события была сеть безопасности. Подробнее см. в разделе Система безопасности.

SMTP

Сообщение было отправлено компонентом отправки или получения SMTP службы транспорта.

STOREDRIVER

Источником события была MAPI-отправка из почтового ящика на локальном сервере.

Переключение на новый сервер

Самый важный и ответственный этап переноса почтового сервера. Здесь нужно еще раз хорошенько все проверить, убедиться, что все работает нормально. Непосредственно перед переключением на новый сервер, можно еще раз накатить изменения почтовой базы без остановки старого. Это позволит максимально уменьшить время простоя. Когда все готово, останавливаем службы dovecot и postfix почтового сервера. После этого сразу же запускаем синхронизацию каталогов между старым и новым сервером. Мы накатываем все изменения почтовой базы, делая ее полностью актуальной в новом сервере. Для этого надо добавить ключ --delete к rsync.

# /usr/bin/rsync --delete -av root@:/data/mail /data

Важно не перепутать источник с приемником. Сначала идет старый сервер, потом новый. Перед запуском хорошенько проверяйте команды. Один раз я угробил новый сервер, ошибившись в команде и удалив с корня системы некоторые каталоги. Просто слешом ошибся на источнике, когда копировал в корень приемника. Это было не страшно, так как повредил новый сервер. Пришлось отложить перенос и восстановить его.

Ждёте окончания синхронизации. Она должна быть не долгой, так как перед остановкой почтового сервера вы и так накатили все изменения. Обычно несколько минут занимает процесс финального копирования. Когда он закончен, выключаете старый сервер, убираете его из автозагрузки гипервизора. На новом сервере меняете IP на адреса старого сервера и перезагружаете его. Можно и не перезагружать, но я для проверки всегда перезагружаю. Можно не менять IP адрес, если у вас все завязано на dns имена, отредактируйте dns запись. Но я обычно все же меняю ip, так надежнее. Обязательно найдется какое-нибудь старое оборудование, типа сканера, где адрес указан в виде ip адреса и т.д. Эти лишние проблемы потом не нужны. Лучше все сделать максимально незаметно и надежно.

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

Бывает, что не все идет гладко. У меня были ситуации, когда после перехода уже на новый сервер, начинались проблемы, которые предусмотреть заранее было нельзя. Новое хранилище начинало тормозить или возникали еще какие-то проблемы. Например, с блокировками на nfs. Вы это не проверили заранее. С работой dovecot на nfs есть свои нюансы. Если вы понимаете, что оставить в работе новый сервер нельзя и надо откатываться, то нужно опять синхронизировать почтовую базу, если для вас важна та корреспонденция, которая была доставлена в то время, как поработал новый сервер. Для этого останавливаете почтовые службы на новом сервере, меняете на нем ip, запускаете старый и выполняете синхронизацию в обратном порядке — с нового на старый. Не ошибитесь в параметрах rsync! После этого оставляете старый сервер в работе, а с новым спокойно разбираетесь и готовите его еще раз к переносу.

Вот, в принципе, и все по переносу почтового сервера из моей практики. Я их переносил штук 10 за все время админства. Можно сказать руку набил.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Понравилась статья? Поделиться с друзьями:
Adblock
detector