Форум » Руководства » Отказоустойчивый DHCP сервер » Ответить

Отказоустойчивый DHCP сервер

Zeeon: Отказоустойчивый DHCP сервер Хочу поделиться интересными скриптами Скрипты следят за DHCP сервером, и восстанавливают работоспособность в случае отказа основного сервера.Первый скрипт надо зашедулить на обоих DHCP на ежечасное исполнениеА второй можно запустить на любой машине, главное иметь права администратора.Я давно уже мучался вопросом, как сделать отказоустойчивый DHCP сервер и вот нашел выход. Dhcp_backup.vbs const HKLM = &H80000002 const REG_SZ = 1 const REG_EXPAND_SZ = 2 const REG_BINARY = 3 const REG_DWORD = 4 const REG_MULTI_SZ = 7 set shell = Createobject("Wscript.Shell") if Netdrivealreadymapped ("O:")=true then netdriveremove "O:" end if set net = Createobject("Wscript.Network") srvname = lcase(net.computername) set net = nothing db_path = readkey (srvname & ".psm.org", HKLM, "SYSTEM\CurrentControlSet\Services\DHCPServer\Parameters", "backupDatabasepath", 2) netdriveadd "O:", "\\server\backup" if srvname="dc1" then srv_backup_to ="dc2" if srvname="dc2" then srv_backup_to = "dc" delfiles "o:\dhcp_backup\" & srv_backup_to & "\*.*" copyfolder db_path , "o:\dhcp_backup\" & srv_backup_to netdriveremove "O:" sub print (what) wscript.echo what end sub sub NetDriveAdd (drive, share) set net = createobject("Wscript.Network") on error resume next net.mapnetworkdrive drive, share, false on error goto 0 set net = nothing end sub Sub NetDriveRemove (drive) set net = createobject("Wscript.Network") on error resume next net.removenetworkdrive drive, true on error goto 0 set net = nothing end sub Function NetDriveAlreadyMapped (drive) NetDriveAlreadyMapped = false ddrive=ltrim(rtrim(drive)) if len(ddrive)<2 then exit function if mid(ddrive, 2,1)<>":" then exit function set net = createobject("Wscript.Network") set oDrives = net.enumnetworkdrives for i=0 to oDrives.Count -1 if ucase(left(oDrives.item(i),2))=ucase(left(ddrive,2)) then NetDriveAlreadyMapped = true exit function end if next set net = nothing end function Sub DelFiles(where) set fso=createobject("Scripting.Filesystemobject") fso.DeleteFile where, true set fso = nothing end sub Sub CopyFiles(src, dest) set fso=createobject("Scripting.Filesystemobject") fso.CopyFile src, dest, true set fso=nothing end sub Sub CopyFolder(src, dest) set fso=createobject("Scripting.Filesystemobject") fso.CopyFolder src, dest, true set fso=nothing end sub Function ReadKey(fqdn, where, strKey, param, types) if fqdn="" then fqdn="." else fqdn="\\" & fqdn Set objReg = GetObject("winmgmts:" & fqdn & "\root\default:StdRegProv") If Types = 1 Then intRes = objReg.GetStringValue(where, strKey, Param, Val) Elseif Types = 2 Then intRes = objReg.GetExpandedStringValue(where, strKey, Param, Val) Elseif Types = 3 Then intRes = objReg.GetBinaryValue(where, strKey, Param, Val) Elseif Types = 4 Then intRes = objReg.GetDWORDValue(where, strKey, Param, Val) Elseif Types = 7 Then intRes = objReg.GetMultiStringValue(where, strKey, Param, Val) End If if intres=0 then readkey=val set objReg=nothing end function Dhcp.vbs const HKLM = &H80000002 const REG_SZ = 1 const REG_EXPAND_SZ = 2 const REG_BINARY = 3 const REG_DWORD = 4 const REG_MULTI_SZ = 7 domainname="domain.com" dhcp_mainserver="main" dhcp_backupserver="backup" dhcp_backup_folder="\\server\backup\dhcp_backup\" do mainserver_state=ServiceState(dhcp_mainserver & "." & domainname, "DHCPServer") backupserver_state=ServiceState(dhcp_backupserver & "." & domainname, "DHCPServer") If mainserver_state="Stopped" then StartIt (dhcp_backupserver) end if if mainserver_state="Running" and backupserver_state="Running" then servicestop dhcp_backupserver & "." & domainname, "DHCPServer" end if if backupserver_state="Running" and mainserver_state="Stopped" then StartIt(dhcp_mainserver) end if loop wscript.quit Sub StartIt(srv_to_start) ' Если остановился сервис DHCPServer srv_fqdn=srv_to_start & "." & domainname ' "Спросить" где лежат базы на резервном контроллере db_path= readkey (srv_to_start, HKLM, "SYSTEM\CurrentControlSet\Services\DHCPSErver\Parameters", "Databasepath", 2) db_backup_path= readkey (srv_to_start, HKLM, "SYSTEM\CurrentControlSet\Services\DHCPSErver\Parameters", "backupDatabasepath", 2) ' обработать полученные пути arr=split(db_path, "\") db_path="\\" & srv_to_start & "\C$\" for i=1 to ubound(arr) db_pathЫ_path & arr(i) & "\" next arr=split(db_backup_path, "\") db_backup_path="\\" & srv_to_start & "\C$\" for i=1 to ubound(arr) db_backup_pathЫ_backup_path & arr(i) & "\" next if right(db_path,2)="\\" then db_path=left(db_path, len(db_path)-1) if right(db_backup_path,2)="\\" then db_backup_path=left(db_backup_path, len(db_backup_path)-1) ' остановить сервис DHCPServer на резервном контроллере servicestop srv_fqdn, "DHCPServer" ' вычистить все файлы из нужных папок delfiles db_path & "*.*" delfiles db_backup_path & "*.*" ' скопировать файлы из backup copyfolder dhcp_backup_folder & srv_to_start & "\", db_backup_path ' установить флаг восстановления из backup на резервном контроллере writekey srv_fqdn, HKLM, "SYSTEM\CurrentControlSet\Services\DHCPServer\Parameters", "RestoreFlag", REG_DWORD, 1 ' стартануть DHCPServer на резервном контролере servicestart srv_fqdn, "DHCPServer" end sub Sub WriteKey (fqdn, where, strKey, param, types, val) if fqdn="" then fqdn1="." else fqdn1="\\" & fqdn Set objReg = GetObject("winmgmts:" & fqdn1 & "\root\default:StdRegProv") If Types = 1 Then intRes = objReg.SetStringValue(where, strKey, Param, Val) Elseif Types = 2 Then intRes = objReg.SetExpandedStringValue(where, strKey, Param, Val) Elseif Types = 3 Then intRes = objReg.SetBinaryValue(where, strKey, Param, Val) Elseif Types = 4 Then intRes = objReg.SetDWORDValue(where, strKey, Param, Val) Elseif Types = 7 Then intRes = objReg.SetMultiStringValue(where, strKey, Param, Val) End If set objReg=nothing end sub Function ReadKey(fqdn, where, strKey, param, types) if fqdn="" then fqdn1="." else fqdn1="\\" & fqdn Set objReg = GetObject("winmgmts:" & fqdn1 & "\root\default:StdRegProv") If Types = 1 Then intRes = objReg.GetStringValue(where, strKey, Param, Val) Elseif Types = 2 Then intRes = objReg.GetExpandedStringValue(where, strKey, Param, Val) Elseif Types = 3 Then intRes = objReg.GetBinaryValue(where, strKey, Param, Val) Elseif Types = 4 Then intRes = objReg.GetDWORDValue(where, strKey, Param, Val) Elseif Types = 7 Then intRes = objReg.GetMultiStringValue(where, strKey, Param, Val) End If if intres=0 then readkey=val set objReg=nothing end function sub print (what) wscript.echo what end sub Function ServiceState (fqdn, service) if fqdn<>"" and left(fqdn,2)<>"\\" then fqdn1="\\" & fqdn Set objWMIServicePSMDC = GetObject("winmgmts:" & fqdn1) Set colSoftwarePSMDC = objWMIServicePSMDC.ExecQuery ("Select * FROM Win32_Service WHERE Name ='" & service & "'" ) For Each objSoftware in colSoftwarePSMDC ServiceState=objSoftware.State Next set objSoftware=nothing set colSoftwarePSMDC = nothing set objWMIServicePSMDC = nothing end function Sub ServiceStart(fqdn, service) if fqdn<>"" and left(fqdn,2)<>"\\" then fqdn1="\\" & fqdn print "Trying to start " & service & " service at " & fqdn Set objWMIServicePSMDC = GetObject("winmgmts:" & fqdn1) Set colSoftwarePSMDC = objWMIServicePSMDC.ExecQuery ("Select * FROM Win32_Service WHERE Name ='" & service & "'" ) For Each objSoftware in colSoftwarePSMDC objSoftware.Startservice Next set objSoftware=nothing set colSoftwarePSMDC = nothing set objWMIServicePSMDC = nothing do while servicestate (fqdn1, "DHCPServer")<>"Running" loop end sub Sub ServiceStop(fqdn, service) if fqdn<>"" then fqdn1="\\" & fqdn print "Trying to stop " & service & " service at " & fqdn1 Set objWMIServicePSMDC = GetObject("winmgmts:" & fqdn1) Set colSoftwarePSMDC = objWMIServicePSMDC.ExecQuery ("Select * FROM Win32_Service WHERE Name ='" & service & "'" ) For Each objSoftware in colSoftwarePSMDC objSoftware.StopService Next set objSoftware=nothing set colSoftwarePSMDC = nothing set objWMIServicePSMDC = nothing do while servicestate (fqdn1, "DHCPServer")<>"Stopped" loop end sub Sub ServiceRestart (fqdn, service) servicestop fqdn, service wscript.sleep 2000 servicestart fqdn, service end sub Sub DriveAdd(drive, share) on error resume next set net = createobject("Wscript.network") net.mapnetworkdrive drive, share, false set net = nothing on error goto 0 end sub Sub DriveDel(drive) on error resume next set net = createobject("Wscript.network") net.removenetworkdrive drive, false set net = nothing on error goto 0 end sub Function IsDriveMapped(drive) IsDriveMapped·lse set net= createobject("wscript.network") set oDrives = net.enumnetworkdrives for i=0 to oDrives.Count -1 if ucase(left(oDrives.Item(i),2))=ucase(drive) then IsDriveMapped=true next set oDrives=nothing set net = nothing end function Sub DelFiles(where) set fso=createobject("Scripting.Filesystemobject") fso.DeleteFile where, true set fso = nothing end sub Sub CopyFiles(src, dest) set fso=createobject("Scripting.Filesystemobject") fso.CopyFile src, dest, true set fso=nothing end sub Sub CopyFolder(src, dest) set fso=createobject("Scripting.Filesystemobject") if right(src,1)="\" then src1=left(src,len(src)-1) else src1=src if right(dest,1)="\" then dest1=left(dest,len(dest)-1) else dest1Юst fso.CopyFolder src1, dest1, true set fso=nothing end sub Забрать все можно одним архивом: http://www.n-admin.com/download/dhcp.rar

Ответов - 0



полная версия страницы