[Репликация] MS SQL Express 2008 <-> MS SQL 2008 <-> MySQL (
От: Ortrix http://www.ortrix.com/
Дата: 12.08.09 11:25
Оценка:
Репликация MS SQL Express 2008 <-> MS SQL 2008 <-> MySQL
Рабочая обстановка, которая будет:
Клиенты(рабочая машина пользователя, приложение .NET) -> MS SQL Express 2008. (до 10 машин).
Сервер (оффис) -> MS SQL 2008
Удаленный Web-сервер -> MySQL (от 100-1000 удаленных MS SQL 2008 серверов, репликация разных однотипных БД)
Задача-Логика: У клиентов стоит приложения, в случае если вылетает основной сервер, клиентам нужно продолжить работу оффлайн с последним набором данных. Есть центральное хранилище данных MS SQL 2008 в качестве средств репликации выбран механизм распределённых транзакций.
Есть удаленный сервер, на котором стоит веб-морда PHP с СУБД MySQL – нужно опять же заставить это добро функционировать но только в том случае если есть доступ к MS SQL. В MySQL должна так же храниться актуальная версия данных.
Это добро так, же должно функционировать в режиме более или мене приближенном к реальному.
Возникли такие мысли и вопросы:
1. Если вылетает сеть или сервер (локалка), то те данные, которые были изменены на клиентах – при восстановление сети, серверов будут ли автоматически сброшены на Сервер и раскиданы по клиентам?
2. Как сделать (и можно ли), так что если упадет сервер, то ведущая машина становиться другая доступная, скажем в одном кабинете 10 машин падает сеть между ними и сервером: остается 3 машины, 2 машины + сервер, 5 машин – вот одна из тех 5ти машин становится на время сервером и 5 клиентов могут работать, остальные пока отдыхают?
3. Как реплицировать это дело с MySQL <-> а именно центрального хранилища, как предусмотреть в веб приложение ответ о том, что у нас упал доступ к серверу и в данный момент услуга не оказывается по техническим причинам?
4. Логика репликации – написание демона Linux (MySQL <-> MySQL). Который бедт опрашивать две БД. Но как быть с коллизиями? Т.е. первоначально нужно зарезервировать себе запись таблицы – если действие прошло… так?
5. Как сообщить центральной БД что в данный момент клиенты офлайн, т.е. сеть упала и мы не реплицируемся пока с MySql – как вариант сервисная таблица с пометкой 0/1 на MSSQL сервере – но как ему узнать что, пока с ним не работают, ведь если выключен один из клиентов то также репликации нет и это как сбой?
6. Как обойти коллизии? Может, как вариант при запросе проверять и резервировать таблицу – т.е. в каждой таблице поле 0/1 и назначением, первоначально мы делам Insert 0/1 и назначения – остальное Update –ом?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re: [Репликация] MS SQL Express 2008 <-> MS SQL 2008 <-> MyS
От: sunshine Россия https://angel.ru/?src=rsdn
Дата: 14.08.09 20:38
Оценка:
O>2. Как сделать (и можно ли), так что если упадет сервер, то ведущая машина становиться другая доступная, скажем в одном кабинете 10 машин падает сеть между ними и сервером: остается 3 машины, 2 машины + сервер, 5 машин – вот одна из тех 5ти машин становится на время сервером и 5 клиентов могут работать, остальные пока отдыхают?

Емнип, экземпляр сервера может быть либо подписчиком, либо публикатором некоторой базы данных. А так, чтобы он становился то подписчиком, то публикатором, это, если не ошибаюсь, невозможно, а самое главное, имхо, и не имеет смысла... Какая задача должна быть решена при помощи такой схемы? Имхо, заморочка...
Принимаю платежи в любой валюте
Re: [Репликация] MS SQL Express 2008 <-> MS SQL 2008 <-> MyS
От: denisio_mcp  
Дата: 16.08.09 11:06
Оценка:
Здравствуйте, Ortrix, Вы писали:

O>5. Как сообщить центральной БД что в данный момент клиенты офлайн, т.е. сеть упала и мы не реплицируемся пока с MySql – как вариант сервисная таблица с пометкой 0/1 на MSSQL сервере – но как ему узнать что, пока с ним не работают, ведь если выключен один из клиентов то также репликации нет и это как сбой?


Зависит от типа репликации, но для merge replication в режиме continuous я сделал примерно так:
select
    subscriber_server,
    subscriber_type,
    last_sync_date,
    State = (case when datediff(minute, last_sync_date, getdate())>5 then 'ОПАСНОСТЕ!!!111' else 'OK' end)
from sysmergesubscriptions
where subscriber_type=2


subscriber_server — имя инстанса подписчика
subscriber_type — тип
last_sync_date — время последней синхронизации.

За подробностями в books online. Ну и алерты ещо есть, можно на них подписаться например поставив threshold в те же 5 минут. Но мне надо было в моей софтине на ходу и сразу узнавать — жив ли сервер-подписчик или перебои с каналом.
... << RSDN@Home 1.2.0 alpha 4 rev. 1088>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.