Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Habari za mchana, Habr!

Kazi

Shirika langu hutumia seva ya barua kwenye jukwaa la Kerio Connect; seva za barua husakinishwa katika miji tofauti ili kuwahudumia watumiaji wao. Hapo awali hapakuwa na muundo uliosambazwa, kwani vikoa vinatofautiana katika kiwango cha tatu, kinachoonyesha jiji la tovuti. Kila kitu kilifanya kazi na kila mtu alikuwa na furaha. Siku moja nzuri, usimamizi uliweka kazi, kalenda ya kawaida ya shughuli kati ya tovuti zote!

kabla ya historia

Hapo awali, wazo lilikuwa kuinua Kikoa cha Barua Iliyosambazwa cha Kerio na ingefanya kila kitu yenyewe. Mara tu baada ya kusema, kikoa kilichosambazwa kiliundwa, lakini haikuwa hivyo, seva ilikuwa tayari kusawazisha kalenda, folda, anwani - kati ya vikoa vilivyo kwenye seva moja, lakini haikuenda kabisa kusawazisha data kati ya kadhaa. seva.

Mimi, kwa kweli, sikutarajia kukamata kama hiyo na kwa muda mrefu sikuweza kuamini kuwa utendaji niliohitaji haukuwepo. Baadaye nilipata ushahidi wa maandishi wa ukweli huu. Nilichanganyikiwa sana na kukatishwa tamaa na hili.

Kazi iligeuka vizuri kuwa shida.

Machaguo yalikuwa yapi?

  • Unda wateja wawili kwenye seva tofauti ambazo hubadilishana data muhimu na programu ya wahusika wengine. Ilihitajika kupata programu hii ya mtu wa tatu ambayo ingetekeleza utendakazi huu - siipendi reki kama hiyo, lakini ilionekana kuwa hii ndio suluhisho pekee la haraka.
  • Andika hati yako mwenyewe kwa ulandanishi wa data kati ya seva. Ukweli ni kwamba Kerio huhifadhi kila kitu kama faili tofauti, kwa hivyo ilikuwa ni lazima kuunda hati ya kufanya kazi na faili, lakini kwa kuzingatia idadi ya kutosha ya vyanzo, kazi hiyo ilionekana kuwa ngumu, haswa kwani ilikuwa muhimu kufanya nyingi. huangalia usahihi wa data, ikiwa mtu ataunda kazi katika kipindi sawa cha wakati, nk, nk.

Kuangalia mbele, nitasema kwamba ingawa Kerio huhifadhi kitu kama faili tofauti, sio ujinga sana kuuliza jinsi mfumo wa faili unavyofanya kila wakati unapopata kitu.

Baada ya kutumia muda mwingi kufikiria, kuchora rundo la karatasi na mipango ya "kunyakua eneo la adui," saa 6 nilifanya maamuzi mawili sahihi:

  • Uamuzi wa kwanza ni kufanya mambo yako mwenyewe na sio kutafuta chochote kutoka nje.
  • Suluhisho la pili ni kwenda kulala.

Tayari asubuhi niliamka na wazo moja na la kweli, ambalo lilipunguzwa hadi herufi chache - DFS.

uamuzi

Suluhisho lenyewe lilionekana kama hii

  • kuleta seva zote ambazo zitashiriki katika kusawazisha kwa OS Windows. (Sehemu yake ilikuwa kwenye Linux. Uhamishaji wa data ya barua hadi Mfumo mwingine wa Uendeshaji ulihitajika)
  • Amua muundo wa saraka ambazo zitashiriki katika maingiliano - lazima ziwe sawa.
  • Bainisha seva zote za barua chini ya kikoa kimoja na nafasi moja ya DFS.
  • Unda kikoa cha Kerio kilichotajwa hapo juu, kwa kuwa katika kesi yangu ulandanishi wa data unahitajika, sio tu kati ya seva lakini pia kati ya vikoa; ya pili inaweza kushughulikiwa na seva ya Kerio kwa kujitegemea. (tofauti na ile ya kwanza)
  • Weka saraka zilizosawazishwa kwa nafasi ya DFS.
  • Njoo na aina fulani ya mkongojo (baada ya yote, huwezi kuishi bila mkongojo)

Utekelezaji

Mfano kwenye seva mbili za barua (labda zaidi)

1. Kikoa Kinachosambazwa cha Kerio

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Mwalimu hashiriki katika ulandanishi, lakini hii sio sharti.

Sitaelezea jinsi ya kuongeza kikoa kilichosambazwa cha Kerio, hakuna chochote ngumu juu yake, unaweza kusoma rasmi. mtunzi

Hatimaye, unapaswa kuona picha ifuatayo katika console ya utawala:

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Ifuatayo nilipendezwa na folda zilizoshirikiwa; kwenye seva ya Mwalimu unaweza kutaja chaguzi zifuatazo:

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Mahususi kwa kila kikoa - seva haitasawazisha folda za umma kati ya vikoa

Kawaida kwa vikoa vyote - seva zote zitaacha folda zilizopo za umma katika kila kikoa na kuunda folda mpya kwa vikoa vyote kwenye kila seva ya barua.

Attention! Ingawa chaguo hili hubadilisha sera ya usanidi kwenye seva zote, husawazisha kando na kila seva (yaani, bila nafasi moja ya kawaida)

Msimamizi bado atakuwa na uwezo wa kusambaza ufikiaji kati ya watumiaji.
kwa upande wangu, zote ni zangu na ninahitaji maingiliano kamili (Kwa upande wako, suluhisho linaweza kuwa tofauti) kwenye kila seva unahitaji kuunda seti zinazofanana za vikoa ambavyo vinahitaji kusawazishwa.

2. Saraka za data za Kerio

Sasa unahitaji kuunda saraka zinazofanana zinazoshirikiwa ambazo zinahitaji kusawazishwa kwenye kila seva. Folda, Kalenda, Anwani.

Ushauri - unda saraka kwa Kiingereza, ikiwa utaziunda kwa Kilatini, saraka itakuwa na jina katika encoding isiyoeleweka, hii ni angalau haifai.

Sasa unahitaji kupata njia za kimwili za folda za barua kwenye kila seva.

Kawaida kwa vikoa vyote ~DataMailmail#publicΠ‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³#msgs
Mahususi kwa kila kikoa ~DataMailmail**Domain**#publicΠ‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³#msgs

Tafadhali kumbuka kuwa hatutasawazisha saraka nzima, lakini tu chombo kilicho na data #ujumbe - vitu vyenyewe vimehifadhiwa hapa, data zingine zote lazima ziwe tofauti kwa kila seva.

3.DFS

Sitaelezea kwa undani jinsi ya kusanidi DFS, kuna maelezo ya kutosha juu ya suala hili.

DFS ni huduma ya jukumu katika Seva ya Windows ambayo hutoa uwezo wa kuchanganya folda zilizoshirikiwa ziko kwenye seva tofauti
Unganisha kwa hati ya MS DFS

Kabla ya kusanidi DFS, lazima usimamishe seva zote za barua ambazo zitashiriki katika ulandanishi wa data.

Baada ya kukamilisha usanidi, unapaswa kupokea picha ifuatayo kwa kila folda iliyosawazishwa

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Kwa kawaida, hatuhitaji kuchapisha folda zilizorudiwa.

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Baada ya kurudiwa kutokea (na hakuna kitu maalum cha kuiga hapo - folda hazina tupu), seva za barua zinaweza kuanza.

Ifuatayo, unaweza kujaza moja ya seva za barua na data na uangalie ikiwa data inakiliwa kwa usahihi.

4. Mkongojo

Maelezo ya kutafakari

Kama unavyoona baada ya data kuanza kusawazisha (DFS), ikiwa umeunda kitu kwenye seva ya kwanza, kwa njia fulani hakuna kinachoonekana kwenye seva ya pili, au inaonekana lakini sio kila wakati.

Usikate tamaa; bila shaka, itaonekana huko mapema au baadaye, lakini bora mapema kuliko baadaye. Kwa sababu imechelewa sana katika masaa 6 - 12.

Jambo ni kwamba mara tu unapounda kitu kwenye seva ya kwanza, kwenye seva ya pili na inayofuata faili bila shaka itaonekana mara moja kwa shukrani kwa mfumo wa DFS, lakini katika tukio ambalo saraka hii ya barua tayari imesoma na mtu hapo awali. na ikiombwa tena, seva haitasoma tena folda ya #msgs lakini itatema data kutoka kwenye faharasa yake yenyewe, ambayo inaweza isilandani tena na uhalisia wetu.

Kerio ina utaratibu wa kusoma tena fahirisi, lakini inaweza kufanya kazi kwa takriban saa sita, na katika saa hizi 6 umuhimu wa kazi katika kalenda unaweza kupotea kwa kiasi fulani.
Ili kujaribu maingiliano hivi sasa, unaweza kufuta faili katika saraka inayolingana index.fld, baada ya kupata tena folda kwenye seva ya barua na ikiwa faili hii haipo, Kerio atasoma tena saraka na data. itaonekana. Inaweza kuonekana kuwa hii ndiyo suluhisho, futa faili wakati data inabadilika, lakini hii haifanyi kazi kila wakati, lakini mara ya kwanza tu, basi Kerio kwa sababu fulani hupoteza maslahi yote katika index.fld.
Pia huanza kutema ujumbe ambao haueleweki kwa mtumiaji - kuhusu aina fulani ya faharasa na kwamba tayari inafanya jambo hapo.

Kuna chaguo jingine, kuunda kitu - wakati wa kuunda kitu kipya, seva hugundua ghafla kuwa jina la faili ambalo ilitaka kugawa tayari limechukuliwa, lakini ni mipira ya theluji na hii ni chaguo la mwisho.

Jinsi ya kuwa?

Ikiwa tutazingatia tena picha ambayo tayari inajulikana kwetu.

Usawazishaji kamili wa folda zilizoshirikiwa, anwani, kalenda kati ya seva za Kerio Connect zilizosambazwa

Lakini kwenye ndege nyingine, unaweza kuona kifungo cha kuvutia sana ambacho tunahitaji sasa - Folda za reindex

Na kweli. Tukibofya kitufe hiki kwenye seva ya barua ambayo haijui kuwa kuna kitu tayari kimebadilika katika #msgs zilizosawazishwa, tutapata matokeo thabiti na ya haraka. Kila kitu kilichofichwa kitakuwa wazi.

Kwenye logi unaweza kuona mchakato huu unachukua muda gani; kwa upande wangu na rekodi elfu kadhaa (elfu 15) inachukua kama dakika 3-4.

Tunachotakiwa kufanya ni kujua jinsi ya kubonyeza kitufe hiki tunapokihitaji.

Inageuka kuwa Kerio kuwa na zao API

Description
Nyaraka

Kazi inayofanya kazi yetu inaonekana kama hii:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

Kutoka kwa yote hapo juu, tunahitaji kuandika script ambayo ingeweza kufuatilia hali ya folda za maslahi na, ikiwa kitu kimebadilika, fanya kazi tunayohitaji.

Ninataka kusema kwamba niliandika matoleo kadhaa tofauti ya maandishi ambayo hufanya ukaguzi tofauti, na kukaa kwenye ile inayofanya hitimisho zote kulingana na idadi ya faili.

Utekelezaji wa hati

Mfano wa hati ya CMD na maelezo

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

Nakala ya hati inaendeshwa kwenye kila seva ya barua (inaweza kutumika kama huduma, haki za Adm hazihitajiki)

Hati inasoma faili Setup%Computername%.List

Ambapo %Computername% ni jina la seva ya sasa (Saraka inaweza kuwa na orodha za seva zote mara moja.)

Faili %Computername%.Orodha - ina njia kamili za saraka zilizosawazishwa, kila njia imeandikwa kwenye mstari mpya, na haipaswi kuwa na mistari tupu.

Baada ya uzinduzi wa kwanza, script hufanya utaratibu wa indexing, bila kujali ni muhimu au la, na script pia huunda index ya idadi ya faili katika kila saraka iliyosawazishwa.

Madhumuni ya hati ni kuhesabu faili zote kwenye saraka maalum.

Mwishoni mwa kuhesabu kila saraka, ikiwa katika angalau saraka moja thamani ya sasa ya faili hailingani na ya awali, hati hufuta faili kutoka kwa saraka ya mizizi ya saraka ya barua iliyosawazishwa: index.fld, indexlog.fld, search.fld na huanza mchakato wa kuorodhesha wa folda za barua zilizoshirikiwa.

Taarifa kuhusu utekelezaji wa kazi hutupwa kwenye saraka ya LOG.

Mchakato wa kuorodhesha
Mchakato wa kuorodhesha unakuja hadi kutekeleza kazi ya Kerio API
Kipindi = callMethod("Domains.checkPublicFoldersIntegrity",{}, tokeni)

Utekelezaji wa mfano umetolewa katika - 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 unaweza kuiacha kama ilivyo, lakini ikiwa unahitaji HTTPS, chatu lazima aamini cheti cha Kerio.

Pia katika faili lazima ueleze akaunti yenye haki za kufanya kazi hii (Adm - folda za barua pepe za umma) za seva ya barua.

Natumai nakala yangu itakuwa muhimu kwa wasimamizi wa Kerio Connect.

Chanzo: mapenzi.com

Kuongeza maoni