Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Bon apremidi, Habr!

Objektif Travay la

Òganizasyon mwen an sèvi ak yon sèvè lapòs sou platfòm Kerio Connect; sèvè lapòs yo enstale nan diferan vil pou sèvi itilizatè yo. Okòmansman pa te gen okenn estrikti distribiye, depi domèn yo diferan nan twazyèm nivo a, ki endike vil la nan sit la. Tout bagay te mache e tout moun te kontan. Yon bon jou, jesyon an mete yon travay, yon kalandriye komen nan aktivite ant tout sit!

pre-istwa

Okòmansman, lide a se te ogmante Kerio Distributed Mail Domain epi li ta fè tout bagay poukont li. Pa pi bonè di pase fè, yo te kreye yon domèn distribye, men sa pa t 'ka a, sèvè a te pare yo senkronize kalandriye, dosye, kontak - ant domèn ki sitiye sou sèvè a menm, men li pa t 'nan tout pral senkronize done ant plizyè. sèvè yo.

Mwen, nan kou, pa t 'atann yon trape konsa ak pou yon tan long pa t' kapab kwè ke fonksyonalite a mwen te bezwen te manke. Apre sa, mwen jwenn prèv dokimantè sou reyalite sa a. Mwen te trè sezi ak wont pa sa a.

Travay la fèt san pwoblèm tounen yon pwoblèm.

Ki opsyon yo te genyen?

  • Kreye de kliyan sou serveurs diferan ki fè echanj done ki nesesè yo ak kèk lojisyèl twazyèm pati. Li te nesesè yo jwenn lojisyèl twazyèm pati sa a ki ta aplike fonksyonalite sa a - mwen pa renmen rato sa a, men li te sanble ke sa a te sèlman solisyon an rapid.
  • Ekri pwòp script ou pou senkronizasyon done ant serveurs. Reyalite a se ke Kerio estoke chak objè kòm yon dosye separe, kidonk li te nesesè yo devlope yon script pou travay ak dosye, men nan gade nan kantite ase nan sous, travay la te sanble yon ti jan konplike, espesyalman depi li te nesesè yo fè plizyè. tcheke pou done yo kòrèk, nan ka yon moun kreye travay nan menm peryòd tan an, elatriye, elatriye.

Gade pi devan, mwen pral di ke byenke Kerio estoke yon objè kòm yon dosye apa, li pa tèlman estipid ke yo mande ki jan sistèm nan dosye ap fè chak fwa ou jwenn aksè nan yon objè.

Lè m te pase anpil tan ap reflechi, m te fè yon pakèt papye ki gen plan pou "sezi teritwa enmi," a 6 è mwen te pran de bon desizyon:

  • Premye desizyon an se fè pwòp bagay ou epi pa gade pou anyen soti deyò.
  • Dezyèm solisyon an se ale nan dòmi.

Deja nan maten an mwen leve ak yon sèl panse vre, ki te redwi a kèk lèt ​​- DFS

desizyon

Solisyon an tèt li te sanble ak sa a

  • pote tout serveurs ki pral patisipe nan senkronizasyon OS Windows. (Pati nan li te sou Linux. Migrasyon nan done lapòs nan yon lòt OS yo te obligatwa)
  • Detèmine estrikti an nan repèrtwar yo ki pral patisipe nan senkronizasyon - yo dwe idantik.
  • Defini tout sèvè lapòs anba yon sèl domèn ak yon sèl espas DFS.
  • Kreye domèn distribye Kerio mansyone pi wo a, paske nan ka mwen an gen senkronizasyon done obligatwa, pa sèlman ant sèvè, men tou ant domèn; dezyèm lan ka okipe pa sèvè Kerio poukont li. (kontrèman ak premye a)
  • Mete anyè senkronize nan espas DFS.
  • Vini ak yon kalite beki (apre tout, ou pa ka viv san yon beki)

Aplikasyon

Egzanp sou de sèvè lapòs (petèt plis)

1. Kerio Domèn distribye

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Mèt la pa patisipe nan senkronizasyon, men sa a se pa yon avantou.

Mwen pa pral dekri kijan pou ogmante yon domèn distribye Kerio, pa gen anyen konplike sou li, ou ka etidye ofisyèl la. manul

Alafen, ou ta dwe wè imaj sa a nan konsole administrasyon an:

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Apre sa, mwen te enterese nan dosye pataje; sou sèvè Mèt la ou ka presize opsyon sa yo:

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Espesifik pou chak domèn - sèvè a pa pral senkronize dosye piblik ant domèn

Komen nan tout domèn - tout sèvè yo pral abandone dosye piblik ki egziste deja nan chak domèn epi kreye nouvo dosye sèl pou tout domèn sou chak sèvè lapòs.

Attention! Malgre ke opsyon sa a chanje règleman an konfigirasyon sou tout sèvè, li senkronize separeman de chak sèvè (ki vle di, san yo pa yon sèl espas komen)

Administratè a ap toujou gen kapasite pou distribye aksè ant itilizatè yo.
nan ka mwen an, yo tout se pou mwen epi mwen bezwen senkronizasyon konplè (Nan ka ou a, solisyon an ka diferan) sou chak sèvè ou bezwen kreye seri ki idantik nan domèn ki bezwen senkronize.

2. Anyè done Kerio

Koulye a, ou bezwen kreye anyè pataje ki idantik ki bezwen senkronize sou chak nan serveurs yo. Dosye, Kalandriye, Kontak.

Konsèy - kreye anyè nan lang angle, si ou kreye yo nan Latin, anyè a pral gen yon non nan kèk kodaj enkonpreyansib, sa a se omwen konvenyan.

Koulye a, ou bezwen jwenn chemen fizik yo nan dosye yo lapòs sou chak sèvè.

Komen nan tout domèn ~DataMailmail#publicСинхронизируемый каталог#msgs
Espesifik pou chak domèn ~DataMailmail**Domain**#publicСинхронизируемый каталог#msgs

Tanpri sonje ke nou pa pral senkronize anyè a tout antye, men sèlman veso a ak done yo #msj — objè yo tèt yo yo estoke isit la, tout lòt done yo dwe separe pou chak sèvè.

3.DFS

Mwen pa pral tou dekri an detay ki jan yo konfigirasyon DFS, gen ase enfòmasyon sou pwoblèm sa a.

DFS se yon sèvis wòl nan Windows Server ki bay kapasite pou konbine dosye pataje ki sitiye sou sèvè diferan
Lien ak dokiman MS DFS

Anvan ou mete DFS, ou dwe sispann tout sèvè lapòs ki pral patisipe nan senkronizasyon done yo.

Lè yo fin konfigirasyon an, ou ta dwe resevwa imaj sa a pou chak dosye senkronize yo

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Natirèlman, nou pa bezwen pibliye dosye replike.

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Apre replikasyon rive (e pa gen anyen espesyal pou repwodui la - dosye yo vid), serveurs lapòs yo ka kòmanse.

Apre sa, ou ka ranpli youn nan sèvè lapòs yo ak done epi tcheke si done yo repwodui kòrèkteman.

4. beki

Deskripsyon refleksyon

Kòm ou ka wè apre done yo kòmanse senkronize (DFS), si ou swa kreye yon bagay sou premye sèvè a, yon jan kanmenm pa gen anyen parèt sou dezyèm sèvè a, oswa li parèt men yon jan kanmenm pa toujou.

Pa dezespwa; nan kou, li pral parèt la pi bonè oswa pita, men pi bon pi bonè pase pita. Paske li twò ta nan 6 - 12 èdtan.

Bagay la se ke le pli vit ke ou te kreye yon bagay sou sèvè a premye, sou sèvè dezyèm ak apre yo dosye a pral nan kou imedyatman parèt gras a sistèm nan DFS, men nan evènman an ke anyè lapòs sa a te deja li pa yon moun anvan. epi li mande ankò, sèvè a pa pral re-li folder #msgs la men li pral krache done ki soti nan endèks pwòp li yo, ki ka pa koresponn ak reyalite nou an ankò.

Kerio gen yon mekanis pou re-li endèks la, men li ka travay nan apeprè sis èdtan, epi pandan 6 èdtan sa yo enpòtans travay la nan kalandriye a ka yon ti jan pèdi.
Pou w teste senkronizasyon an kounye a, ou ka efase fichye a nan index.fld anyè senkronize ki koresponn lan, apre w fin re-aksede katab la sou sèvè lapòs la epi si dosye sa a manke, Kerio pral re-li anyè a ak done yo. ap parèt. Li ta sanble ke sa a se solisyon an, efase dosye a lè done yo chanje, men sa a pa travay chak fwa, men sèlman premye fwa a, Lè sa a, Kerio pou kèk rezon pèdi tout enterè nan index.fld
Li kòmanse tou krache soti mesaj ki enkonpreyansib itilizatè a - sou kèk kalite endèks e ke li deja fè yon bagay la.

Gen yon lòt opsyon, yo kreye yon bagay - nan moman sa a nan kreye yon nouvo objè, sèvè a toudenkou reyalize ke non an fichye ke li te vle bay yo deja pran, men li snowballs ak sa a se yon opsyon ki pa mouri.

Ki jan yo dwe?

Si nou peye atansyon yon lòt fwa ankò nan foto a ki deja abitye pou nou.

Senkronizasyon konplè nan dosye pataje, kontak, kalandriye ant distribiye sèvè Kerio Connect

Men, sou yon lòt avyon, ou ka wè yon bouton trè enteresan ke nou bezwen kounye a - Reindex dosye yo

Ak tout bon. Si nou klike sou bouton sa a sou yon sèvè lapòs ki pa konnen yon bagay te deja chanje nan #msgs yo senkronize, n ap jwenn yon rezilta ki estab, rapid. Tout bagay kache ap vin klè.

Nan jounal la ou ka wè konbyen tan pwosesis sa a pran; nan ka mwen an ak plizyè mil (15 mil) dosye li pran apeprè 3-4 minit.

Tout sa nou dwe fè se konnen ki jan yo aktyèlman peze bouton sa a lè nou bezwen li.

Li sanble Kerio gen pwòp pa yo API

Deskripsyon
Dokimantasyon

Fonksyon ki fè travay nou an sanble sa a:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

Soti nan tout sa ki anwo yo, nou bezwen ekri yon script ki ta kontwole eta a nan dosye ki enterese yo epi, si yon bagay te chanje, fè fonksyon an nou bezwen.

Mwen vle di ke mwen te ekri plizyè vèsyon diferan nan scripts ki fè chèk diferan, ak rezoud sou youn nan ki trase tout konklizyon ki baze sou kantite a nan dosye.

Script aplikasyon

Egzanp script CMD ak deskripsyon

Re-index.bat

@echo off
set dir=%~dp0
%dir:~0,2%
CD "%~dp0"
md "%CD%LOG"
md "%CD%Setup"

ECHO -Start- >> "%CD%LOG%Computername%.log"
ECHO Start -> %Computername% %Date% %Time% >> "%CD%LOG%Computername%.log"

SetLocal EnableDelayedExpansion
for /f "UseBackQ Delims=" %%A IN ("%CD%Setup%Computername%.List") do (
  set /a c+=1
  set "m!c!=%%A"
)

set d=%c%
Echo Folder = %c%
ECHO Folder = %c% >> "%CD%LOG%Computername%.log"
ECHO.
ECHO. >> "%CD%LOG%Computername%.log"

:start
cls
if %c% LSS 1 exit
set /a id=1
set R=0

:Find
REM PF-Start
if "%id%" gtr "%c%" if %R% == 1 Goto Reindex 
if "%id%" gtr "%c%" timeout 60 && Goto start

For /F "tokens=1-3" %%a IN ('Dir "!m%id%!#msgs" /-C/S/A:-D') Do Set 2DirSize!id!=!DS!& Set DS=%%c
if "2DirSize!id!" == "" set 1DirSize!id!=!2DirSize%id%!

echo %id%
ECHO !m%id%!
echo Count        [ !1DirSize%id%! -- !2DirSize%id%! ]

if "!1DirSize%id%!" == "!2DirSize%id%!" ECHO Synk

REM DEL index.fld
if "!1DirSize%id%!" NEQ "!2DirSize%id%!" del /f /q !m%id%!index.fld && del /f /q !m%id%!indexlog.fld && del /f /q !m%id%!search.fld && set R=1 && ECHO RE-index Count && ECHO RE-index Count %Date% %Time% - Delete !m%id%! >> "%CD%LOG%Computername%.log"

set 1DirSize!id!=!2DirSize%id%!

ECHO.
ECHO.

set /a id+=1
goto Find

:Reindex
ECHO. >> "%CD%LOG%Computername%.log"
ECHO --- RE-INDEX - Start - %Date% %Time% --- >> "%CD%LOG%Computername%.log"
ECHO. >> ----------------------------------- >> "%CD%LOG%Computername%.log"
call PublicFolders.py
timeout 60
goto start

exit

Yon kopi script la kouri sou chak sèvè lapòs (yo ka itilize kòm yon sèvis, dwa Adm pa obligatwa)

Script la li dosye a Setup%Computername%.List

Ki kote %Computernaname% se non sèvè aktyèl la (Anyè a kapab genyen lis tout sèvè an menm tan.)

Fichye %Computername%.Lis la – gen tout chemen yo nan repèrtwar yo senkronize, chak chemen ekri sou yon nouvo liy, epi yo pa ta dwe gen liy vid.

Apre premye lansman an, script la fè pwosedi Indexing la, kèlkeswa si li nesesè oswa ou pa, ak script la tou kreye yon endèks sou kantite dosye nan chak anyè senkronize.

Objektif script la se konte tout fichye yo nan anyè espesifye a.

Nan fen konte chak anyè, si nan omwen yon anyè valè aktyèl la nan fichye yo pa matche ak anvan an, script la efase fichye nan anyè rasin nan anyè lapòs senkronize a: index.fld, indexlog.fld, search.fld epi kòmanse pwosesis Indexing nan dosye lapòs pataje.

Enfòmasyon sou ekzekisyon travay yo jete nan anyè LOG la.

Pwosesis Indexing
Pwosesis Indexing la vini nan egzekite yon fonksyon API Kerio
Sesyon = callMethod ("Domains.checkPublicFoldersIntegrity",{}, siy)

Yo bay yon egzanp aplikasyon nan - python
PublicFolders.py

import json
import urllib.request
import http.cookiejar
""" Cookie storage is necessary for session handling """
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
urllib.request.install_opener(opener)
""" Hostname or ip address of your Kerio Control instance with protocol, port and credentials """

server = "http://127.0.0.1:4040"
username = "user"
password = "password"

def callMethod(method, params, token = None):
    """
    Remotely calls given method with given params.
    :param: method string with fully qualified method name
    :param: params dict with parameters of remotely called method
    :param: token CSRF token is always required except login method. Use method "Session.login" to obtain this token.
    """
    data =  {"method": method ,"id":1, "jsonrpc":"2.0", "params": params}

    req = urllib.request.Request(url = server + '/admin/api/jsonrpc/')
    req.add_header('Content-Type', 'application/json')
    if (token is not None):
        req.add_header('X-Token', token)    

    httpResponse = urllib.request.urlopen(req, json.dumps(data).encode())

    if (httpResponse.status == 200):
        body = httpResponse.read().decode()
        return json.loads(body)

session = callMethod("Session.login", {"userName":username, "password":password, "application":{"vendor":"Kerio", "name":"Control Api-Local", "version":"Python"}})
token = session["result"]["token"]
print (session)

session = callMethod("Domains.checkPublicFoldersIntegrity",{"domainId": "test2.local"}, token)
print (session)

callMethod("Session.logout",{}, token)

http://127.0.0.1:4040 ou ka kite li jan li ye, men si ou bezwen HTTPS, python dwe fè konfyans sètifika Kerio a.

Epitou nan dosye a ou dwe presize yon kont ki gen dwa fè fonksyon sa a (Adm - dosye piblik lapòs) nan sèvè a lapòs.

Mwen espere atik mwen an ap itil administratè Kerio Connect.

Sous: www.habr.com

Add nouvo kòmantè