Возможно ли на базе MDaemon-а создать массив почтовых серверов?
Т.е. чтобы в случае выхода из строя одного, работал другой и юзеры этого не замечали.
Бегло просмотрел документацию, ничего похожего не нашел.
Если такое возможно, то где в доках почитать про это?
Спасибо!
Тебе не мешало бы пробежаться в доках по кластеризации серверов в Windoвозе.
Полистай Network Load Balansing
Там возможно настроить так чтобы несколько машин отвечали на 1 IP
У меня тоже это в задачах стоит ...... но наверное начну через месяца 3
Если найдешь что-то путное ....... поделись !!!
Цитата |
Тебе не мешало бы пробежаться в доках по кластеризации серверов в Windoвозе |
Цитата |
Если найдешь что-то путное ....... поделись !!! |
Цитата |
Сейчас не совсем понятно, как мне обеспечить на обоих серверах актуальную информацию. Чтобы все что в почту на один сервак упало (или забралось из оной) зеркализовалось на другой |
Цитата |
Сейчас нужно немного другое, чтобы на одно имя отвечало несколько компов из разных подсетей |
Разница есть,
то один виртуальный адрес, в конкретной подсетке(имена в данном случае по барабану),
а то одно имя, а адреса 2 в разных подсетях.
Если связь двух подсетей разрывается, что будет в первом и во втором случае?
Если я правильно понял, то NLB средствами Microsoft не позволяет объединить в кластер компы из разных подсетей. Они рекомендуют ставить 2 кластера в разных подсетях и пользоваться Round Robin.
Да но по идее если связь между подсетками разорвется ...... и выйдет из строя мейлсервер одной подсетки .... то клиенты данной подсетки лишатся почты ..........
это уже не столь важно, зато остальные 20 подсетей будут нормально работать .
Цитата |
Если связь двух подсетей разрывается, что будет |
Смысла нету. Корпоративная сеть, куча филиалов по Москве. Дохнет центральный офис - дохнет инет, почта и т.п. во всех филиалах. Мне нужен дублер именно в другой подсети, чтобы не было строгой завязки на центральный офис.
Цитата |
По моему тут Round Robin уже сдохнет |
Ну с Outgoing SMTP сервером у тебя проблем быть не должно .....
Где хочешь ставь ....... письма будут выходить ......
Ну а с входящими ..... может поставишь у себя в сетках DNS серверы и прошишешь зону присвоишь имена
к примеру mail.corporation.ru ... у всех в настройках будет стоять это ..... при переносе компа в другой филиал .... все равно mail.corporation.ru будет работать .........
А тепер на счет синхронизации писем ........ что бы во всех ящиках была актуальная информация я думаю может тебе использовать пакеты синхронизации ......... то биш репликации ... ??
К примеру
http://www.peersoftware.com/peersync.html не плохая штука .... я тоже раздумываю над этим купить или не купить ...... позволяет реплицировать каталоги как по расписанию ..... так и в режиме реального времени .......... как в одном направлении .. так и в обоих напралениях (bi-directional) ... если в одном мейлсервере входит письмо то оно автоматически или по расписанию будет реплицировано на остальных мейлсерверах ......
Если пользователь скачал свои письма то данные письма удалятся на всех мейлсерверах .......
А если в головном офисе нет инета .... то в DNS сервере (где прописана ваша зона в интернете) допиши несколько MX записей для вашей зоны с IP адрессами других филиалов ......... тогда письма будут идти на другие серваки вашей фирмы ... и соответственно реплицироваться на други серверы .......
Звучит грандиозно но в тоже время хрупко ... но как это на практике ... боюсь даже представить .... ;-)
Ну пробный вариант вроде функциклир.
С MX не подходит вариант, мы получаем почту с сервера провайдера, доступ к нашему серваку из инета закрыт.
Сделал в общем-то так как и говорил, Round Robin + синхронизация каталогов с почтовыми сообщениями (юзеров пока не синхронизирую, это в процессе разборок).
В тестовом режиме все вполне приемлемо работает.
Опрос серверов происходит по очереди (один забор почты, первый сервер, другой опрос почты - второй). В случае отказа одного из серверов почта будет забираться через раз, что нас вполне устраивает.
Поставлю в промышленное использование посмотрим какие "ослиные уши" вылезут. Пока вижу явную проблему с 9х клиентами, которые не знают что такое DNS.
PS. отдельное thnx за ссылочку. Прога действительно дельная, минус её только в том что в bi-directional режиме файлы удаленные в target директории не отреплицируются. Поэтому я на каждом сервере поставил однонаправленную репликацию на другой сервер.
Цитата |
Пока вижу явную проблему с 9х клиентами, которые не знают что такое DNS. |
Если я не ошибаюсь , то 9х не используют DNS для разрешения имен. В этом собсна и вижу проблему.
Неделю не мог попасть в тему . Проблема http://forum.wincity.ru/index.php?act=ST&f=9&t=10286&st=0entry54374 в действии.
Jeremiah, не ошибаешься Для 9x подобных систем используется WINS
А для чего тогда вкладка DNS в 98 ???
И что бывает если я делаю ping yandex.ru .... ???
Фуф! Вроде завершил ковыряния с дублером почтового сервера.
В общем решено было сделать так:
1. В работе всегда только один сервер.
2. Если он отказывает, запускается его дублер с пустой базой писем.
3. После восстановления связи дублер отключается, письма перемещаются на основной сервер.
После долгих поисков и мытарств, понял что проще самому скрипт накатать.
Собственно скрипт пингует сервер и проверяет статус сервиса MDaemon.
Если сервис не доступен или остановлен, изменяется соответствующая запись в DNS и стартует локальный сервис MDaemon. Дальше буду смотреть достаточно ли этих 2-х проверок.
Скрипт могу выложить, если кому интересно.
Цитата |
Скрипт могу выложить, если кому интересно. |
vDate = Time
strRComputer = "АдресОсновногоMDaemon"
Rezult = 0
LastRezult = 0
set oShell = CreateObject ("wscript.shell")
Do
if vDate < "22:00:00" or vDate > "09:45:00" then
' Проверка ping-ом Компьютера с MDaemon
Call IsOnline(Rezult,strRComputer)
'Перепроверяю связь в еще 5 раз, если с первого раза соединение не прошло
' ----------------------------------------------------------------------------------------------------------------------
if Rezult = 1 then
iRecheck = 1
Do until iRecheck >= 5
WScript.Sleep 10000
Call IsOnline(Rezult, strRComputer)
if Rezult = 0 then
exit do
end if
iRecheck = IRecheck + 1
loop
if LastRezult = 0 and Rezult = 1 then
oShell.LogEvent 2, "Ping не прошел."
end if
end if
' ----------------------------------------------------------------------------------------------------------------------
' Если Ping прошел успешно, то проверяем работу сервиса.
' ----------------------------------------------------------------------------------------------------------------------
if Rezult = 0 then
' вызов подпрограммы проверки сервиса
Call CheckMdaemon(Rezult, strRComputer)
If Rezult = 1 and LastRezult = 0 then
oShell.LogEvent 2, "MDaemon остановлен или отсутствует"
end if
End if
' ----------------------------------------------------------------------------------------------------------------------
' Подведение итогов запись логов, изменение адреса в DNS, запуск копии MDaemon
' ----------------------------------------------------------------------------------------------------------------------
If Rezult = 1 then
' если почтовый сервис не доступен,а последний раз он был доступен
if LastRezult = 0 then
oShell.LogEvent 1, "Основной почтовый сервис не доступен"
Call ChangeCMailRecord(Rezult)
end if
' если почтовый сервис доступен, а последний раз он был не доступен
else
if LastRezult = 1 then
oShell.LogEvent 4, "Восстановлен доступ к основному почтовому сервису."
Call ChangeCMailRecord(Rezult)
end if
end if
LastRezult= Rezult
End if
WScript.Sleep 30000
Loop
' ==================================================================
' Процедура Ping
' ==================================================================
Sub IsOnline(Answer, strRComputer)
dim wshShell, fso, tfolder, tname, TempFile, results, retString, ts
Const ForReading = 1, TemporaryFolder = 2
reachable = false
set wshShell=wscript.createobject("wscript.shell")
set fso = CreateObject("Scripting.FileSystemObject")
Set tfolder = fso.GetSpecialFolder(TemporaryFolder)
tname = fso.GetTempName
TempFile = tfolder & tname
wshShell.run "cmd /c ping -n 3 " & strRComputer & ">" & TempFile,0,true
set results = fso.GetFile(TempFile)
set ts = results.OpenAsTextStream(ForReading)
do while ts.AtEndOfStream <> True
retString = ts.ReadLine
if instr(retString, "Reply")>0 then
answer = 0
exit do
else
answer = 1
end if
loop
ts.Close
results.delete
end Sub
' ==================================================================
' Процедура проверки сервиса MDaemon
' ==================================================================
Sub CheckMdaemon(Answer, strRComputer)
on error resume next
MDaemonState = "UnKnown"
Set objRWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=Impersonate}!\\" & strRComputer & "\root\cimv2")
Select Case Err.Number
Case 0
Set colStoppedServices = objRWMIService.ExecQuery _
("SELECT DisplayName,State FROM Win32_Service WHERE DisplayName = 'MDaemon'")
For Each objService in colStoppedServices
MDaemonState = objService.State
Next
If MDaemonState <> "Running" then
Answer = 1
else
Answer = 0
end if
Case Else
Answer = 1
End Select
end Sub
' ==================================================================
' Процедура смены DNS записи CMail.domain.ru
' Требуется WMI DNS Provider. Можно взять на
' ftp://ftp.microsoft.com/reskit/win2000/dnsprov.zip
' ==================================================================
Sub ChangeCMailRecord(Answer)
set oShell = CreateObject ("wscript.shell")
' Проверяем доступность основного DNS
Call IsOnline(DNSRezult, "АдресПервогоDNS")
If Answer = 1 then ' если сигнал отказа сервиса
' Меняем на резервном DNS запись CMail
strDNSComputer = "ИмяРезервногоDNS"
Set objWMIService = GetObject("winmgmts:\\" & strDNSComputer & "\root\MicrosoftDNS")
Set colItems = objWMIService.ExecQuery("Select * from MicrosoftDNS_AType where OwnerName = 'CMail.domain.ru'")
For Each objItem in colItems
ErrRezult = objItem.Modify(,"АдресРезервногоMDaemon",RR)
Next
oShell.LogEvent 4, "Запись CMail на резервном DNS изменена"
if DNSRezilt = 0 then ' Если основной DNS доступен
' Меняем на основном DNS запись CMail
strDNSComputer = "ИмяОсновногоDNS"
Set objWMIService = GetObject("winmgmts:\\" & strDNSComputer & "\root\MicrosoftDNS")
Set colItems = objWMIService.ExecQuery("Select * from MicrosoftDNS_AType where OwnerName = 'CMail.domain.ru'")
For Each objItem in colItems
ErrRezult = objItem.Modify(,"АдресРезервногоMDaemon",RR)
Next
oShell.LogEvent 4, "Запись CMail на основном DNS изменена"
end if
Call MDaemonStartStop(Answer)
else ' если сигнал, доступности основного сервера
' Меняем на резервном DNS запись CMail
strDNSComputer = "ИмяРезервногоDNS"
Set objWMIService = GetObject("winmgmts:\\" & strDNSComputer & "\root\MicrosoftDNS")
Set colItems = objWMIService.ExecQuery("Select * from MicrosoftDNS_AType where OwnerName = 'CMail.domain.ru'")
For Each objItem in colItems
ErrRezult = objItem.Modify(,"АдресОсновногоMDaemon",RR)
Next
oShell.LogEvent 4, "Запись CMail на резервном DNS изменена"
if DNSRezilt = 0 then ' Если основной DNS доступен
' Меняем на основном DNS запись CMail
strDNSComputer = "ИмяОсновногоDNS"
Set objWMIService = GetObject("winmgmts:\\" & strDNSComputer & "\root\MicrosoftDNS")
Set colItems = objWMIService.ExecQuery("Select * from MicrosoftDNS_AType where OwnerName = 'CMail.domain.ru'")
For Each objItem in colItems
ErrRezult = objItem.Modify(,"АдресОсновногоMDaemon",RR)
Next
oShell.LogEvent 4, "Запись CMail на основном DNS изменена"
end if
Call MDaemonStartStop(Answer)
end if
end sub
' ================================================================================
=====
' Запуск/остановка сервиса MDaemon
' ================================================================================
=====
Sub MDaemonStartStop(Answer)
strMDaemonComp = "АдресРезервногоMDaemon"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strMDaemonComp & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='MDaemon'")
if Answer = 1 then
For each objService in colServiceList
errReturn = objService.StartService()
Next
else
For each objService in colServiceList
errReturn = objService.StopService()
Next
end if
end sub
Скрипт конечно нечёсанный и кое-чего так до конца и не понял (многое честно содрал с Microsoft-овского скрипт-центра), так что непрогневайтесь гуру программирования
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)