Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Sugeng sonten, Habr!

Tujuan

Organisasiku nggunakake server mail ing platform Kerio Connect; server mail diinstal ing kutha-kutha beda kanggo nglayani pangguna. Wiwitane ora ana struktur sing disebarake, amarga domain beda-beda ing tingkat katelu, nuduhake kutha situs kasebut. Kabeh bisa lan kabeh seneng. Sawijining dina sing apik, manajemen nyetel tugas, tanggalan umum kegiatan ing antarane kabeh situs!

prasejarah

Kaping pisanan, ide kasebut yaiku ngunggahake Domain Surat Distribusi Kerio lan bakal nindakake kabeh dhewe. Ora let suwe, domain sing disebarake digawe, nanging ora kaya ngono, server wis siyap nyinkronake tanggalan, folder, kontak - antarane domain sing ana ing server sing padha, nanging ora bakal nyinkronake data ing antarane sawetara. server.

Aku, mesthi, ora nyana nyekel kuwi lan kanggo dangu ora pracaya fungsi aku needed wis ilang. Mengko aku nemokake bukti dokumenter babagan kasunyatan iki. Aku banget puzzled lan kuciwa dening iki.

Tugas lancar dadi masalah.

Apa padha pilihan?

  • Nggawe loro klien ing server beda sing ngganti data sing perlu karo sawetara piranti lunak pihak katelu. Sampeyan kudu nemokake piranti lunak pihak katelu sing bakal ngleksanakake fungsi iki - Aku ora seneng rake kuwi, nanging ketoke sing iki mung solusi cepet.
  • Tulis skrip sampeyan dhewe kanggo sinkronisasi data antarane server. Kasunyatane Kerio nyimpen saben obyek minangka file sing kapisah, mula kudu nggawe skrip kanggo nggarap file, nanging amarga jumlah sumber sing cukup, tugas kasebut katon rumit, utamane amarga kudu nindakake macem-macem. mriksa bener data, yen ana wong nggawe tugas ing wektu sing padha, etc., etc.

Looking ahead, Aku bakal ngomong sing sanajan Kerio nyimpen obyek minangka file kapisah, iku ora dadi bodho kanggo takon carane sistem file saben-saben sampeyan ngakses obyek.

Sawise ngentekake akeh wektu kanggo mikir, nggawe akeh kertas kanthi rencana "kanggo ngrebut wilayah mungsuh," jam 6 aku nggawe rong keputusan sing bener:

  • Kaputusan pisanan yaiku nindakake perkara sampeyan dhewe lan ora golek apa-apa saka njaba.
  • Solusi kapindho yaiku turu.

Wis ing wayah esuk aku tangi karo siji pikirane sing bener, sing dikurangi dadi sawetara huruf - DFS

kaputusan

Solusi kasebut dhewe katon kaya iki

  • nggawa kabeh server sing bakal melu sinkronisasi menyang OS Windows. (Babagan kasebut ana ing Linux. Migrasi data mail menyang OS liyane dibutuhake)
  • Nemtokake struktur direktori sing bakal melu sinkronisasi - kudu padha.
  • Netepake kabeh server mail ing siji domain karo spasi DFS siji.
  • Gawe domain Kerio sing wis kasebut ing ndhuwur, amarga ing kasusku, sinkronisasi data dibutuhake, ora mung ing antarane server nanging uga ing antarane domain; sing kapindho bisa ditangani dening server Kerio kanthi mandiri. (ora kaya sing pisanan)
  • Setel direktori sing disinkronake menyang ruang DFS.
  • Nggawe sawetara jinis kruk (sawise kabeh, sampeyan ora bisa urip tanpa kruk)

РСализация

Conto ing rong server mail (bisa uga luwih)

1. Kerio Distributed domain

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Master ora melu sinkronisasi, nanging iki dudu prasyarat.

Aku ora bakal njlèntrèhaké carane ngunggahake domain sing disebarake Kerio, ora ana sing rumit, sampeyan bisa sinau babagan resmi. manul

Pungkasane, sampeyan kudu ndeleng gambar ing ngisor iki ing konsol administrasi:

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Sabanjure aku kasengsem ing folder sing dienggo bareng; ing server Master sampeyan bisa nemtokake pilihan ing ngisor iki:

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Khusus kanggo saben domain - server ora bakal nyinkronake folder umum antarane domain

Umum kanggo kabeh domain - kabeh server bakal nilar folder umum sing ana ing saben domain lan nggawe folder siji anyar kanggo kabeh domain ing saben server mail.

Ati-ati Senajan pilihan iki ngganti kabijakan konfigurasi ing kabeh server, iku nyinkronake kanthi kapisah saka saben server (yaiku, tanpa papan umum siji)

Administrator isih duwe kemampuan kanggo nyebarake akses antarane pangguna.
ing kasusku, kabeh iku duweke lan aku butuh sinkronisasi lengkap (Ing kasus sampeyan, solusi bisa uga beda) ing saben server sampeyan kudu nggawe set domain sing padha sing kudu disinkronake.

2. Direktori data Kerio

Saiki sampeyan kudu nggawe direktori bareng sing padha sing kudu disinkronake ing saben server. Folder, Tanggalan, Kontak.

Saran - nggawe direktori ing basa Inggris, yen sampeyan nggawe ing basa Latin, direktori kasebut bakal duwe jeneng ing sawetara enkoding sing ora bisa dingerteni, iki paling ora trep.

Saiki sampeyan kudu nemokake path fisik saka folder mail ing saben server.

Umum kanggo kabeh domain ~DataMailmail#publicΠ‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³#msgs
Khusus kanggo saben domain ~DataMailmail**Domain**#publicΠ‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³#msgs

Elinga yen kita ora bakal nyinkronake kabeh direktori, nanging mung wadhah karo data #pesen - obyek dhewe disimpen ing kene, kabeh data liyane kudu kapisah kanggo saben server.

3. DFS

Aku ora bakal njlèntrèhaké kanthi rinci carane ngatur DFS, ana cukup informasi babagan masalah iki.

DFS minangka layanan peran ing Windows Server sing nyedhiyakake kemampuan kanggo nggabungake folder bareng sing ana ing server sing beda-beda
Link menyang dokumen MS DFS

Sadurunge nyetel DFS, sampeyan kudu mungkasi kabeh server mail sing bakal melu sinkronisasi data.

Sawise persiyapan rampung, sampeyan kudu nampa gambar ing ngisor iki kanggo saben folder sing disinkronake

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Alami, kita ora perlu nerbitake folder sing ditiru.

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Sawise replikasi kedadeyan (lan ora ana sing bisa ditiru ing kono - folder kosong), server mail bisa diwiwiti.

Sabanjure, sampeyan bisa ngisi salah sawijining server mail nganggo data lan mriksa manawa data kasebut ditiru kanthi bener.

4. Krupuk

Deskripsi refleksi

Nalika sampeyan bisa ndeleng sawise data wiwit nyinkronake (DFS), yen sampeyan salah siji digawe soko ing server pisanan, Piye wae katon ing server kapindho, utawa katon nanging piye wae ora tansah.

Aja nglokro; mesthi, bakal katon ing kono cepet utawa mengko, nanging luwih cepet tinimbang mengko. Amarga wis telat ing 6 - 12 jam.

Masalahe, yen sampeyan wis nggawe soko ing server pisanan, ing server kapindho lan sabanjure file kasebut mesthi bakal langsung katon thanks kanggo sistem DFS, nanging yen direktori mail iki wis diwaca dening wong sadurunge. lan dijaluk maneh, server ora bakal maca maneh folder #msgs nanging bakal ngetokake data saka indeks dhewe, sing bisa uga ora cocog karo kasunyatane.

Kerio duwe mekanisme kanggo maca maneh indeks, nanging bisa digunakake ing babagan enem jam, lan sajrone 6 jam kasebut, relevansi tugas ing tanggalan bisa uga ilang.
Kanggo nguji sinkronisasi saiki, sampeyan bisa mbusak file kasebut ing direktori sinkronisasi sing cocog index.fld, sawise ngakses maneh folder ing server mail lan yen file iki ilang, Kerio bakal maca maneh direktori lan data bakal katon. Iku bakal koyone sing iki solusi, mbusak file nalika owah-owahan data, nanging iki ora bisa saben wektu, nanging mung pisanan, banjur Kerio sakperangan alesan ilang kabeh kapentingan ing index.fld
Iku uga wiwit muntahake pesen sing ora bisa dimangerteni dening pangguna - babagan sawetara jinis indeks lan wis nindakake apa wae ing kana.

Ana pilihan liyane, kanggo nggawe soko - ing wayahe nggawe obyek anyar, server dumadakan nyadari yen jeneng berkas sing wanted kanggo nemtokake wis dijupuk, nanging snowballs lan iki pilihan mati-mburi.

Carane dadi?

Yen kita nggatekake maneh gambar sing wis akrab karo kita.

Sinkronisasi lengkap folder bareng, kontak, tanggalan antarane server Kerio Connect sing disebarake

Nanging ing pesawat liyane, sampeyan bisa ndeleng tombol sing menarik banget sing kita butuhake saiki - Reindex folder

Lan tenan. Yen kita ngeklik tombol iki ing server mail sing ora ngerti yen ana sing wis diganti ing #msgs sing disinkronake, kita bakal entuk asil sing stabil lan cepet. Kabeh sing didhelikake bakal dadi cetha.

Ing log sampeyan bisa ndeleng suwene proses iki; ing kasusku kanthi sawetara ewu (15 ewu) cathetan butuh udakara 3-4 menit.

Kabeh sing kudu kita lakoni yaiku kepiye carane mencet tombol iki nalika kita butuh.

Pranyata metu Kerio duwe dhewe API

Description
Dokumentasi

Fungsi sing nindakake tugas kita katon kaya iki:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

Saka kabeh kasebut ing ndhuwur, kita kudu nulis skrip sing bakal ngawasi kahanan folder sing dikarepake lan, yen ana sing diganti, nindakake fungsi sing dibutuhake.

Aku arep ngomong sing aku wrote sawetara versi beda saka Tulisan sing nindakake kir beda, lan mapan ing siji sing ndudohke kabeh Serat adhedhasar nomer file.

Implementasi skrip

Tuladha lan deskripsi skrip CMD

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

Salinan skrip lumaku ing saben server mail (bisa digunakake minangka layanan, hak Adm ora dibutuhake)

Skrip maca file Setup%Computername%.List

Where %Computername% iku jeneng server saiki (Direktori bisa ngemot dhaptar kabeh server bebarengan.)

File %Computername%.List – ngemot path lengkap saka direktori sing disinkronake, saben path ditulis ing baris anyar, lan ora kudu ngemot garis kosong.

Sawise diluncurake pisanan, skrip nindakake prosedur indeksasi, preduli saka perlu utawa ora, lan skrip uga nggawe indeks jumlah file ing saben direktori sing disinkronake.

Tujuan saka skrip yaiku kanggo ngetung kabeh file ing direktori sing ditemtokake.

Ing pungkasan ngetung saben direktori, yen ing paling ora siji direktori nilai file saiki ora cocog karo sing sadurunge, skrip bakal mbusak file saka direktori root direktori mail sing disinkronake: index.fld, indexlog.fld, search.fld lan miwiti proses indeksasi folder mail sing dienggo bareng.

Informasi babagan eksekusi tugas dibuwang menyang direktori LOG.

Proses indeksasi
Proses indeksasi mudhun kanggo nglakokake fungsi API Kerio
Session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

Implementasi conto diwenehi ing - python
PublicFolds.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 sampeyan bisa ninggalake minangka, nanging yen sampeyan mbutuhake HTTPS, python kudu dipercaya sertifikat Kerio.

Uga ing file sampeyan kudu nemtokake akun kanthi hak kanggo nindakake fungsi iki (Adm - folder mail umum) saka server mail.

Muga-muga artikelku bisa migunani kanggo pangurus Kerio Connect.

Source: www.habr.com

Add a comment