0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

C# Как синхронизировать данные между экземплярами базы данных через Интернет

C# Как синхронизировать данные между экземплярами базы данных через Интернет

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

Мы используем .Net 3.5 с пакетом обновления 1. Нам нужно точно синхронизировать данные, включая IDENTITY столбца.

Мы предпочли бы использовать что-то вроде LINQ до SQL, что позволит нам сделать некоторые простые Select и INSERT/UPDATE вызывает против преобразованные объекты. Однако столбцы IDENTITY, по-видимому, являются проблемой с LINQ и аналогичными подходами.

Мы можем сделать все это с помощью встроенных операторов SQL и включать / выключать Identity INSERT по мере необходимости, но я бы предпочел более элегантное решение.

** Edit-нам DO нужно написать наше собственное решение, и для этого нам нужно использовать .Net 3.5 SP1. Я не буду тратить ваше время на объяснения всех причин, но, пожалуйста, ограничьте предложения вариантами в пределах игровой площадки .Net.

2 ответа

  • Как синхронизировать две базы данных SQL Server

У меня есть две базы данных SQL Server 2008 с одинаковой структурой. Один из них местный, а другой-онлайн. Данные вставляются в локальную базу данных, а затем я хочу синхронизировать их с онлайн-базой данных. Некоторые данные также будут обновляться в онлайн-базе данных с помощью приложения c#.

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

Microsoft Sync Framework может стать вашим решением. Это описание фреймворка от Microsoft:

Microsoft Sync Framework-это платформа синхронизации данных от Microsoft, которая может использоваться для синхронизации данных между несколькими хранилищами данных. Платформа синхронизации включает в себя архитектуру, не зависящую от транспорта, в которую могут быть подключены поставщики синхронизации для конкретных хранилищ данных, смоделированные на основе поставщика данных ADO.NET API.

Sync Framework-это комплексное решение для синхронизации данных, которое позволяет разработчикам создавать решения, поддерживающие синхронизацию любой базы данных по любому протоколу передачи данных в любой топологии сети. msdn.microsoft.com

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

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

Поскольку вы сказали, что не можете использовать службы репликации SQL Server или SSIS, возможно, можно написать процедуру резервного копирования/восстановления. Вы можете сделать запланированную резервную копию своей базы данных и сделать ее доступной для вызывающих приложений, которые затем могут скопировать резервную копию, восстановить ее в другой экземпляр на сервере клиентов, а затем извлечь все необходимые данные с помощью любого количества методов, и она будет существовать локально на серверах клиентов.

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

Похожие вопросы:

У меня есть база данных SQL на PC с Windows. Я должен создать приложение android, которое будет получать данные из этой базы данных через интернет. Я не знаю, как это сделать. Кто-нибудь может дать.

Я пишу приложение для android, которое будет синхронизировать базы данных, расположенные на устройстве android, с внешней базой данных. Короче говоря, Android генерирует некоторые данные и хранит их.

Предположим, у меня есть две базы данных sql server и одна и та же схема. Я хочу синхронизировать данные между двумя таблицами этих двух баз данных. Как я мог это сделать? Есть ли какая-нибудь.

У меня есть две базы данных SQL Server 2008 с одинаковой структурой. Один из них местный, а другой-онлайн. Данные вставляются в локальную базу данных, а затем я хочу синхронизировать их с.

У меня есть сайт Azure, работающий на нескольких экземплярах в базовом режиме вычислений. Я хочу синхронизировать локальные данные (всего несколько небольших чисел, таких как количество.

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

Если у меня есть 3 сервера, и запустить приложение Rails Каждый сервер имеет свою собственную базу данных. Я хочу, чтобы их база данных могла быть синхронизирована в согласованном режиме. Я.

Я хочу хранить свои данные в статических переменных java. как магазин autoCode на карте private static final PassiveExpiringMap<String, String> authCodeMap = new.

Мне нужна резервная копия данных elasticsearch в другом физическом месте. Сначала я попытался поместить все elasticsearch узлов в один кластер, но когда программа запросит или обновит elasticsearch.

Читайте так же:
Регулировка струн акустической гитары по высоте от грифа

Как создать связь базы данных между тремя экземплярами? Например, у меня есть база данных с именем orcl, orcl1, orcl2, как их связать? Спасибо

Принципы и пути синхронизации 1С с интернет-магазином

Онлайн-магазин использует системы учета и управления. Без этого вы проиграете конкурентную борьбу. На постсоветском пространстве лидер разработок — компания «1С-Битрикс». Ее выбирают многие, конечно их волнует синхронизация сайта с 1С.

Правильная настройка выжмет максимум преимуществ и убережет вас от лишних переделок и затрат. Рассмотрим особенности.

Важное замечание: синхронизация VS интеграция с 1С

Эти два понятия часто путают, считая их синонимами. Они касаются работы с данными, но:

интеграция — участие одной базы данных в работе двух систем (CMS сайта и учета склада предприятия), которые объединяются в одно целое.

синхронизация — существование двух отдельных баз данных, управляемых веб-сервером и CRM. Обновление любой из баз синхронизируется с другой.

Типы синхронизации

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

Автоматическая. Веб-сервер магазина распределяет данные, которые он забирает с файла-каталога, автоматически созданного системой 1С.

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

Два принципа обмена данных между интернет-магазином и 1С

Обмен данных между CMS интернет-магазина и 1С бывает двух групп:

На веб-сервер выгружаются:

информация о складских остатках;

данные об остатках и ценах без номенклатуры.

В систему 1С поступает информация о заказах.

В первом случае «1С: Предприятие» указывает сайту текущее положение товарной номенклатуры. Во втором — веб-сервер магазина сообщает о статусе заказов, сделанных посетителями сайта.

7 вариантов автоматической синхронизации

Синхронизация с помощью CommerceML

Этот «типовой» вариант идет в стандартном пакете 1С. Хороший уровень безопасности, хотя данные не зашифрованные. Приходится вручную запускать процесс, сам обмен данных снижает общую производительность.

Веб-расширение

Отдельная разработка для «1С: Предприятие». Применяются технологии Web Forms, ASP.NET, ADO.NET. Синхронизацию при этом методе настроить проще. На производительность влияет скорость доступа к базе 1C. Обратите внимание: онлайн-магазин может потерять данные из-за падения сервера на стороне 1С.

Веб-сервисы 1С

Легко настроить. Однако за удобство приходится платить безопасностью: к данным 1С отрытый доступ из Интернета.

1С v. 8.3.

Эта модификация «1С: Предприятие» содержит набор веб-сервисов, которых нет в прежних версиях. Здесь отлажена безопасная и эффективная синхронизация. Минус v. 8.3: возможно отсутствуют некоторые типовые конфигурации, необходимые для работы вашего онлайн-магазина.

Использование библиотеки DLL

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

COM-сервер

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

Комбинированный путь синхронизации: вместо выводов

Хотите максимально синхронизировать? Комбинируйте варианты! К примеру, для вашего онлайн-магазина оптимальным может оказаться доработанный формат CommerceML с использованием универсального XML-обмена. Хотя сам метод XML относится к ручной синхронизации.

Синхронизация информационных баз, опубликованных через 1С: Линк

Для прикладных решений, опубликованных в сервисе 1С: Линк, возможно выполнять их автоматическую синхронизацию. Синхронизация означает, что документы и записи справочников, введенные или измененные в одном из приложений, во время периодических сеансов обмена данными передаются в другое приложение.

Пример. При синхронизации приложений «1С:Бухгалтерия предприятия 8» и «1С:Зарплата и управление персоналом 8» из «1С:Зарплаты и управление персоналом 8» в «1С:Бухгалтерию предприятия 8» передаются сведения о начислениях заработной платы и страховых взносов, чтобы бухгалтеры могли формировать и сдавать финансовую отчетность. А из «1С:Бухгалтерии предприятия 8» в «1С:Зарплата и управление персоналом 8» передаются необходимые сведения о расчетах с работниками по выплате им заработной платы, по выданным им займам и т. п. Это устраняет необходимость ручного повторного ввода данных, обеспечивает согласованную работу бухгалтеров, расчетчиков заработной платы и специалистов по управлению персоналом.

Способы синхронизации

Для прикладных решений, опубликованных в сервисе, поддерживаются следующие способы синхронизации:

  • синхронизация данных между различными приложениями, опубликованными через 1С: Линк ;
  • синхронизация данных между приложением, опубликованным через 1С: Линк , и локальной информационной базой;
  • синхронизация данных между приложением, опубликованным через 1С: Линк , и приложением, опубликованном в облачном сервисе (например «1С:Предприятие 8 через Интернет» или «1С: Готовое рабочее место»);
  • синхронизация данных между приложением, опубликованным через 1С: Линк и мобильным клиентом этого приложения.

Общие рекомендации по настройке синхронизации

Синхронизацию данных между информационными базами, развернутыми в сервисе 1С: Линк следует настраивать с помощью универсального формата обмена.

Читайте так же:
Как отрегулировать уплотнитель пластикового окна

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

При выполнении синхронизации данных существует следующая особенность: при ручном запуске обмен всегда выполняется в синхронном режиме. В этом случае, если операция не завершается за отведенное время (5 мин), возникает ошибка «504 Gateway timeout».

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

Общая информация о синхронных и асинхронных методах доступна на сайте ИТС. Подробная информация о таймаутах доступна в статье «Таймауты при работе с внешними ресурсами».

Примеры настроек

Настройки синхронизации между различными ИБ, опубликованными через 1С: Линк

Настройка синхронизации данных между приложениями сервиса осуществляется в одном из приложений. Настройку должен выполнить пользователь, имеющий право на администрирование приложения. Для настройки синхронизации необходимо выполнить следующие действия.

1. Синхронизация между «Бухгалтерией предприятия» и «Управлением торговлей»:
  • откройте «Бухгалтерию предприятия»;
  • перейдите в пункт меню «Администрирование» — «Настройки синхронизации данных» — «Синхронизация данных»;
  • выберите пункт «Настроить синхронизацию данных» — «Через универсальный формат обмена» — «синхронизацию данных с УТ 11 (в сервисе)»;
  • в настройках синхронизации укажите путь к информационной базе УТ, развернутой через «1С: Линк:
    https://<имя туннеля 1С: Линк>.link.1c.ru/<путь веб-приложения УТ>
2. Синхронизация данных между «Бухгалтерией предприятия» и «ЗУП»:
  • откройте ИБ ЗУП;
  • перейдите в пункт меню «Администрирование» — «Настройки синхронизации данных» — «Синхронизация данных»;
  • выберите пункт «Настроить синхронизацию данных» — «Бухгалтерия предприятия, редакция 3.0»;
  • в меню «выберите способ настройки синхронизации данных» выберите пункт «Указать вручную» и нажмите Далее;
  • в открывшемся окне выберите пункт «Прямое подключение к программе через Интернет»;
  • В настройках синхронизации укажите путь к информационной базе БП, развернутой в «1С: Линк:
    https://<имя туннеля 1С: Линк>.link.1c.ru/<путь веб-приложения
    При необходимости, аналогичную настройку следует выполнить и в Бухгалтерии предприятия.

Настройка синхронизации данных между ИБ, опубликованной через 1С: Линк и локальной информационной базой

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

Настройка синхронизации выполняется в локальной информационной базе. Настройку должен выполнить пользователь, имеющий право на администрирование этой информационной базы. Для настройки синхронизации необходимо выполнить следующие действия.

Выбрать команду меню:

  • в большинстве приложений — команду АдминистрированиеНастройки синхронизации данных;
  • в приложении «1С:Управление небольшой фирмой» — команду КомпанияИнтеграция с др. программамиСинхронизация с программами 1С:Предприятие.

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

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

Настройка синхронизации данных между ИБ, опубликованной через 1С: Линк, и мобильным приложением

Перед началом работы на мобильном устройстве необходимо установить корневой сертификат сервиса «1С: Линк».

В настройках мобильного приложения необходимо указать путь к информационной базе, опубликованной через «1С: Линк». Особенностью работы с мобильными приложениями через «1С: Линк» является то, что подключение к веб-сервисам осуществляется по их именам, а не по псевдонимам (алиасам). В некоторых мобильных приложениях (например, «1С: ДО») строка подключения формируется автоматически и не требует указания имени веб-сервиса.

Подробный порядок настройки мобильных приложений описан в статье «Использование мобильных приложений 1С»

Синхронизация баз данных через интернет

Начиная с версии 1.30, в менеджере накопления информации MyTetra появилась возможность синхронизации данных через интернет. О том, как настроить синхронизацию, написано в этой статье.

Почему так сложно?

MyTetra — это проект с открытым исходным кодом. У автора MyTetra нет возможности оплачивать и обслуживать сервера синхронизации для пользователей программы. А так же нет временных ресурсов чтобы создать полноценную систему синхронизации с авторизацией, пользовательским интерфейсом, подсистемой разрешения конфликтов объединения данных и прочими сервисами.

Поэтому в MyTetra применяется другой подход: синхронизация происходит с помощью внешних программ/сервисов. База данных MyTetra — это просто набор файлов на диске. Поэтому надо просто синхронизировать каталог, где лежат файлы базы данных MyTetra. MyTetra способна сама вызывать команды, запускающие процесс синхронизации, а так же умеет на лету периодически проверять каталог с базой на предмет измененных данных.

Синхронизацию в MyTetra можно сделать с помощью следующих средств:

  • облачных систем хранения данных (Яндекс.Диск, Google Drive, DropBox и т. д.);
  • систем контроля версий (Git, Svn, Mercurial и т. д.).

Самое простой метод синхронизации — это разместить каталог с базой MyTetra в каталоге облачной системы хранения данных. Далее надо зайти в «Настройки» — «Синхронизация» и поставить флажок «Периодическая проверка дерева записей на изменение сторонними программами». По такому методу работают многие пользователи, и даже есть группы людей, которые одновременно совместно работают над одной базой данных. При использовании такого механизма синхронизации желательно наличие хорошего интернет-канала.

Читайте так же:
Стабилизированные блоки питания с регулировкой напряжения

Более сложный метод синхронизации — это синхронизация через систему контроля версий. Желательно, чтобы система онтроля версий поддерживала атомарность. Атомарность — это такое свойство системы, при котором все файлы обновляются на состояние, соответсвующее одному моменту времени. Свойством атомарности обладает система контроля версий Git, и я использую её для синхронизации. В качестве хостинга я использую GitHub.com.

GitHub.com предоставляет бесплатный тарифный план для хранения публичных репозитариев в открытом виде. На GitHub можно разместить и закрытые репозитарии, заплатив несколько долларов в месяц.

Так как MyTetra имеет встроенный механизм шифрования, то пользователь может разместить свои данные бесплатно и безопасно у всех на виду. В любом случае, на бесплатном аккаунте GitHub никто не сможет изменить данные пользователя — все создаваемые на GitHub репозитарии имеют режим только чтение (Read Only) для других пользователей. Пока не будут прописаны дополнительные пользователи, которые могут иметь доступ на запись в репозитарий, хранимым данным пользователя ничего не угрожает.

Что необходимо для синхронизации через Git

Для того, чтобы сделать синхронизацию через git, нужно иметь две вещи: установленный git и аккаунт на GitHub. Тех, кто никогда не работал с git и GitHub, я отправляю читать статью:

Создание репозитария с данными MyTetra

Перво-наперво нужно создать новый пустой репозитарий в системе GitHub. Далее будем считать, что для синхронизации вы создали репозитарий с именем mytetra . Создание репозитария производится в веб-интерфейсе GitHub.

Затем нужно выяснить, где находится на вашем компьютере директория с данными программы MyTetra.

Для версий до 1.44.154: Запускаем MyTetra, нажимаем «Инструменты» -> «Настройки» -> «Основные». В поле «Директория с данными» нажимаем кнопочку с тремя точками [. ] и смотрим, где расположена директория /data .

Для версий 1.44.154 и выше: В MyTetra появился менеджер баз данных. Запускаем MyTetra, нажимаем «Файл» — «Управление базами данных». Смотрим, где расположена директория /data выбранной базы данных.

Все дальнейшие действия из консоли следует выполнять внутри директории /data .

Итак, переходим в директорию /data и даем следующие команды:

git commit -a -m «first commit»

git remote add origin git@github.com:username/mytetra.git

git push -u origin master

Вместо username надо, естественно, написать свой GitHub-логин . В результате этих действий, в каталоге /data появится подкаталог .git — это системный каталог программы git. Если при выполнении команд не возникло ошибок, значит, начиная с этого момента, данные уже лежат на сервере GitHub. И их можно посмотреть через web-интерфейс системы GitHub.

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

Настройка синхронизации MyTetra с сервером репозитария

В MyTetra, нажимаем «Инструменты» -> «Настройки» -> «Синхронизация». Видим вот такие настройки:

В поле «Команда синхронизации» задаем следующую команду.

Для пользователей Linux:

cd %a ; git add . ; git commit -a -m MyTetraCommit ; git pull -s recursive ; git push

Для пользователей Windows:

cd & cd «%a» & git add . & git commit -a -m MyTetraCommit & git pull -s recursive & git push

Внимание! Если данные находятся на диске, отличным от C: , надо добавлять в команду смены каталога еще и смену диска. Например, вместо «cd » следует писать «cd D:» .

После чего добавляем в MyTetra пару записей, редактируем уже существующие, удаляем ненужные. Затем нажимаем на кнопку синхронизации, и, если всё в порядке, на сервере GitHub будут зафиксированы эти изменения.

Внимание! Вплоть до 27.12.2011 в этой статье были указаны не совсем корректные команды синхронизации (присутсвовала pull-опция -X theirs ). Из за этой опции возникали ситуации, когда при синхронизации сбрасывались последние изменения в редактируемых записях. Пожалуйста, проверьте свою команду синхронизации, и удалите данную опцию.

Вопрос: Что делать, если данные не уходят на сервер GitHub, а лог синхронизиции в окне синхронизации так быстро промелькивает, что ничего не успеваешь прочитать?

Ответ: В конец команды синхронизации добавьте команду, которая остановит вывод. Пользователи Linux могут добавить ; read . Пользователи Windows могут добавить & pause 0 . Внимательно прочитайте что написано в логе, возможно вы сразу поймете в чем причина неполадки.

Вопрос: Что делать, если на этапе синхронизации окно синхронизации не закрывается самостоятельно, а чего-то ждет?

Ответ: Такое может возникнуть, если git пытается что-то запросить от пользователя через консольный ввод. Причем, самого запроса в логе может быть не видно. В этом случае выключаем MyTetra, переходим в каталог /data (вы уже знаете, где он находится), и начинаем последовательно выполнять команды из строки с командой синхронизации. Вначале выполняем:

Читайте так же:
Как отрегулировать экран монитор самсунг

git commit -a -m MyTetraCommit

И так далее. На какой-то команде может возникнуть какая-то ошибка. Обычно эта ошибка возникает из-за неправильного конфигурирования git или ключей шифрования. Исправляем ошибку, так же по шагам проверяем работу, и дальше в MyTetra всё должно работать без подобных плясок.

Синхронизация данных MyTetra с другими компьютерами

Ранее мы рассмотрели, как сделать первичное наполнение данных в репозитарии, и как синхронизироваться с сервером. Но пока что мы получили только «резервное копирование данных» — ведь у нас настроено только одно место с синхронизируемыми данными.

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

Внимание! Здесь речь идет о сихронизации одного набора данных между несколькими копиями MyTetra. Если у вас на домашнем компьютере уже есть одна база данных, а на рабочем компьютере уже есть другая база данных, и вы хотите их объединить, то речь идет о слиянии баз. Процедуры слияния баз в MyTetra не предусмотрено. Возможно, кто-то захочет написать скрипт для слияния баз — пожалуйста сделайте его, если у вас есть возможности и желание.

Итак, на втором компьютере, где мы хотим сделать синхронизацию, инсталлируем MyTetra, выясняем месторасположение каталога /data (как это сделать, написано выше). Выходим из MyTetra, затем заходим в каталог /data , и всё в нём удаляем. Затем, находясь в каталоге /data , даем команду:

git clone git@github.com:username/mytetra.git .

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

Признаком того, что данные закачались правильно, будет наличие файла mytetra.xml , подкаталога /base и подкаталога /.git в каталоге /data . Так же возможно наличие других подкаталогов и файлов.

Далее запускаем MyTetra и видим, что она уже работает с полной копией данных, которые были получены с сервера GitHub. Далее в MyTetra, нажимаем «Инструменты» -> «Настройки» -> «Синхронизация», и устанавливаем точно такую же команду синхронизации, которая написана в предыдущем разделе.

Всё! Теперь мы имеем две программы MyTetra, которые могут синхронизироваться друг с другом через сервер GitHub.

Особенности алгоритма синхронизации MyTetra

Команды синхронизации, указанные выше, обеспечивают следующие принципы синхронизации.

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

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

Репликация данных

Репликация — одна из техник масштабирования баз данных. Состоит эта техника в том, что данные с одного сервера базы данных постоянно копируются (реплицируются) на один или несколько других (называемые репликами). Для приложения появляется возможность использовать не один сервер для обработки всех запросов, а несколько. Таким образом появляется возможность распределить нагрузку с одного сервера на несколько.

Репликация баз данных

Существует два основных подхода при работе с репликацией данных:

  • Репликация Master-Slave;
  • Репликация Master-Master.

Master-Slave репликация

В этом подходе выделяется один основной сервер базы данных, который называется Мастером. На нем происходят все изменения в данных (любые запросы MySQL INSERT/UPDATE/DELETE). Слейв сервер постоянно копирует все изменения с Мастера. С приложения на Слейв сервер отправляются запросы чтения данных (запросы SELECT). Таким образом Мастер сервер отвечает за изменения данных, а Слейв за чтение.

В приложении нужно использовать два соединения – одно для Мастера, второе — для Слейва:

Используем два соединения — для Мастера и Слейва — для записи и чтения соответственно

Несколько Слейвов

Преимущество этого типа репликации в том, что Вы можете использовать более одного Слейва. Обычно следует использовать не более 20 Слейв серверов при работе с одним Мастером.

Тогда из приложения Вы выбираете случайным образом один из Слейвов для обработки запросов:

Асинхронность репликации означает, что данные на Слейве могут появится с небольшой задержкой. Поэтому, в последовательных операциях необходимо использовать чтение с Мастера, чтобы получить актуальные данные:

При обращении к изменяемым данным, необходимо использовать Мастер-соединение

Выход из строя

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

Читайте так же:
Как синхронизировать два устройства самсунг

Если выходит из строя Мастер, нужно переключить все операции (и чтения и записи) на Слейв. Таким образом он станет новым Мастером. После восстановления старого Мастера, настроить на нем реплику, и он станет новым Слейвом.

Резервирование

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

Master-Master репликация

В этой схеме, любой из серверов может использоваться как для чтения так и для записи:

При использовании такого типа репликации достаточно выбирать случайное соединение из доступных Мастеров:

Выбор случайного Мастера для обработки соединений

Выход из строя

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

Используйте Master-Master репликацию только в крайнем случае. Вместо нее лучше пользоваться техникой “ручной” репликации, описанной ниже.

Асинхронность репликации

В MySQL репликация работает в асинхронном режиме. Это значит, что приложение не знает, как быстро данные появятся на Слейве.

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

Синхронный режим

Синхронный режим репликации позволит гарантировать копирование данных на Слейв.

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

“Ручная” репликация

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

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

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

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

Это позволит использовать преимущества репликации даже если сама технология ее не поддерживает.

Выход из строя

При поломке одного из серверов в такой схеме необходимо сделать следующее:

  • Исключить сервер из списка используемых.
  • Настроить репликацию Master-Slave на новом сервере, используя один из рабочих серверов в качестве Мастера.
  • Когда все данные репликации будут синхронизированы, включить сервер обратно в список используемых и остановить репликацию.

Самое важное

Репликация используется в большей мере для резервирования баз данных и в меньшей для масштабирования. Master-Slave репликация удобна для распределения запросов чтения по нескольким серверам. Подход ручной репликации позволит использовать преимущества репликации для технологий, которые ее не поддерживают. Зачастую репликация используется вместе с шардингом при решении вопросов масштабирования.

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

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

Что такое индексы в Mysql и как их использовать для оптимизации запросов

Как исправить ошибку доступа к базе 1045 Access denied for user

Примеры ad-hoc запросов и технологии для их исполнения

Основные понятия о шардинге и репликации

Настройка Master-Master репликации на MySQL за 6 шагов

Как создать и использовать составной индекс в Mysql

Анализ медленных запросов (профилирование) в MySQL с помощью Percona Toolkit

Check-unused-keys для определения неиспользуемых индексов в базе данных

Синтаксис и оптимизация Mysql LIMIT

Запрос для определения версии Mysql: SELECT version()

Настройка Master-Slave репликации на MySQL за 6 простых шагов

Правильная настройка Mysql под нагрузки и не только. Обновлено.

3 примера установки индексов в JOIN запросах

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

И как правильно работать с длительными соединениями в MySQL

Анализ медленных запросов с помощью EXPLAIN

Описание, рекомендации и значение параметра query_cache_size

Правила выбора типов данных для максимальной производительности в Mysql

Что значит и как это починить

Просмотр профиля запросов в Mysql

Использование партиций для ускорения сложных удалений

Включение и использование логов ошибок, запросов и медленных запросов, бинарного лога для проверки работы MySQL

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector