Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Roj baş, Habr!

Armanc

Rêxistina min li ser platforma Kerio Connect serverek e-nameyê bikar tîne; serverên nameyê li bajarên cihê têne saz kirin da ku ji bikarhênerên xwe re xizmetê bikin. Di destpêkê de avahiyek belavkirî tune bû, ji ber ku domên di asta sêyemîn de cûda dibin, ku bajarê malperê destnîşan dike. Her tişt xebitî û her kes kêfxweş bû. Rojek xweş, rêveberî peywirek, salnameyek hevpar a çalakiyan di navbera hemî malperan de destnîşan kir!

pêşdîrok

Di destpêkê de, fikir ew bû ku Kerio Domaina Mail-a Belavkirî bilind bike û ew ê her tiştî bixwe bike. Dûv re ku hate gotin, domainek belavkirî hate afirandin, lê ne wusa bû, server amade bû ku salname, peldank, têkiliyan hevdeng bike - di navbera domên ku li ser heman serverê ne, lê qet nediçû ku daneyan di navbera çendan de hevdeng bike. pêşkêşkerên.

Bê guman, min li benda girtinek wusa nedikir û ji bo demek dirêj nedikarî bawer bikim ku fonksiyona ku min hewce dike winda bû. Paşê min delîlên belgeyî yên vê rastiyê dîtin. Ez ji vê yekê pir matmayî û bêhêvî bûm.

Kar bi hêsanî veguherî pirsgirêkê.

Vebijêrk çi bûn?

  • Li ser serverên cûda du xerîdar biafirînin ku daneyên pêwîst bi hin nermalava partiya sêyemîn re diguhezînin. Pêwîst bû ku ev nermalava sêyemîn-sêyemîn ku dê vê fonksiyonê bicîh bîne - ez ji vê rakêşanê hez nakim, lê dixuye ku ev yekane çareseriya bilez bû.
  • Ji bo hevdemkirina daneyê di navbera serveran de skrîpta xwe binivîsin. Rastî ev e ku Kerio her tiştî wekî pelek cûda hilîne, ji ber vê yekê hewce bû ku ji bo xebata bi pelan re skrîptek were pêşve xistin, lê ji ber hebûna hejmarek têra çavkaniyan, peywir hinekî tevlihev xuya bû, nemaze ji ber ku hewce bû ku pirjimar were kirin. ji bo rastbûna daneyan kontrol dike, heke kesek di heman heyamê de peywirek çêbike, hwd., hwd.

Li pêş mêze dikim, ez ê bibêjim ku her çend Kerio tiştek wekî pelek cihêreng hilîne jî, ew ne ew qas ehmeq e ku meriv her gava ku hûn xwe bigihînin objektê bipirsin ka pergala pelê çawa dike.

Ji ber ku gelek wext difikirîm, xêzkirina komek kaxiz bi planên "destxistina axa dijmin", di demjimêr 6 de min du biryarên rast dan:

  • Biryara yekem ew e ku hûn karê xwe bikin û ji derve li tiştekî negerin.
  • Çareseriya duyemîn jî çûna xewê ye.

Jixwe serê sibê ez bi yek ramanek yekane û rast şiyar bûm, ku bi çend tîpan kêm bû - DFS

biryar

Ji xwe çareserî bi vî rengî xuya dikir

  • hemî serverên ku dê beşdarî hevdemkirinê bibin bînin OS Windows. (Beşek wê li ser Linux bû. Koçkirina daneyên e-nameyê ji bo OS-ya din hewce bû)
  • Struktura pelrêçikên ku dê beşdarî hevdemkirinê bibin diyar bikin - divê ew yek bin.
  • Hemî pêşkêşkerên nameyê di binê yek domainê de bi yek cîhek DFS-ê diyar bikin.
  • Domana Kerio ya ku li jor hatî behs kirin biafirînin, ji ber ku di doza min de hevdengkirina daneyê hewce ye, ne tenê di navbera serveran de, lê di heman demê de di navbera domanan de; ya duyemîn dikare ji hêla servera Kerio ve serbixwe were rêve kirin. (bervajî ya yekem)
  • Pelên hevdemkirî li cîhê DFS-ê bicîh bikin.
  • Werin bi cûreyek kevçîyê (berî her tiştî, hûn nekarin bêyî kulmek bijîn)

Реализация

Nimûne li ser du pêşkêşkerên nameyê (dibe ku bêtir)

1. Kerio Domainê Belavkirî

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Mamoste beşdarî hevdemkirinê nabe, lê ev ne şertek e.

Ez ê diyar nekim ka meriv çawa domainek belavkirî ya Kerio bilind dike, di derheqê wê de tiştek tevlihev tune, hûn dikarin fermî bixwînin manul

Di dawiyê de, divê hûn wêneya jêrîn di konsolê rêveberiyê de bibînin:

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Piştre ez bi peldankên hevpar re eleqedar bûm; li ser servera Master hûn dikarin vebijarkên jêrîn diyar bikin:

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Ji bo her domainê taybetî - server dê peldankên gelemperî di navbera domanan de hevdeng neke

Ji bo hemî domanan hevpar e - Hemî pêşkêşker dê peldankên gelemperî yên heyî yên li her domainê biterikînin û ji bo hemî domên li ser her serverek e-nameyê peldankên yekta nû biafirînin.

Hişyariya kerema xwe! Her çend ev vebijark siyaseta vesazkirinê li ser hemî pêşkêşkeran diguhezîne, ew ji her serverê veqetandî hevdeng dibe (ango, bêyî cîhek hevpar a yekane)

Rêvebir hîn jî wê îmkana belavkirina gihîştina di navbera bikarhêneran de hebe.
di doza min de, ew hemî yên min in û ez hewceyê hevdengkirina tam heye (Di doza we de, dibe ku çareserî cûda be) li ser her serverê hûn hewce ne ku hûn komek domên yeksan ên ku divê bêne hevdeng kirin biafirînin.

2. Derhênerên daneyên Kerio

Naha hûn hewce ne ku pelrêçikên hevbeş ên wekhev ên ku hewce ne li ser her serverek hevdeng bibin biafirînin. Peldank, Salname, Têkilî.

Şêwirmendî - pelrêçan bi Englishngilîzî biafirînin, heke hûn wan bi latînî biafirînin, pelrêç dê di hin kodkirina nefêmkirî de navek hebe, ev bi kêmanî nerehet e.

Naha hûn hewce ne ku rêyên laşî yên peldankên nameyê li ser her serverê bibînin.

Ji bo hemî domanan hevpar e ~DataMailmail#publicСинхронизируемый каталог#msgs
Ji bo her domainê taybetî ~DataMailmail**Domain**#publicСинхронизируемый каталог#msgs

Ji kerema xwe not bikin ku em ê tevahiya pelrêça, lê tenê konteynerê bi daneyan re hevdeng nekin #msgs - tiştên xwe li vir têne hilanîn, divê hemî daneyên din ji bo her serverê veqetandî bin.

3.DFS

Ez ê bi hûrgulî nebêjim ka meriv çawa DFS-ê mîheng dike, li ser vê mijarê agahdarî têr heye.

DFS di Servera Windows-ê de karûbarek rolê ye ku kapasîteya berhevkirina peldankên hevpar ên ku li ser serverên cihêreng hene peyda dike
Girêdana belgeya MS DFS

Berî ku hûn DFS-ê saz bikin, divê hûn hemî pêşkêşkerên nameyê ku dê beşdarî hevdengkirina daneyê bibin rawestînin.

Piştî qedandina sazkirinê, divê hûn wêneya jêrîn ji bo her peldankên hevdemkirî bistînin

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Bi xwezayî, em ne hewce ne ku peldankên dubare biweşînin.

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Piştî ku dubarekirin çêdibe (û tiştek taybetî tune ku li wir dubare bibe - peldank vala ne), serverên nameyê dikarin werin destpêkirin.

Dûv re, hûn dikarin yek ji pêşkêşkerên nameyê bi daneyan tijî bikin û kontrol bikin ka dane rast têne dubare kirin.

4. Kûçik

Danasîna refleksê

Wekî ku hûn dibînin piştî ku dane dest bi hevdemkirinê (DFS) dikin, heke we li ser servera yekem tiştek çêkir, bi rengekî tiştek li ser servera duyemîn xuya nake, an jî xuya dike lê bi rengekî ne her gav.

Bêhêvî nebin; bê guman, ew ê zû an dereng li wir xuya bibe, lê zû ji dereng çêtir. Ji ber ku di 6 - 12 saetan de pir dereng e.

Tişt ev e ku gava ku we tiştek li ser servera yekem çêkir, li ser servera duyemîn û paşîn helbet dê bi saya pergala DFS-ê tavilê xuya bibe, lê heke ev pelrêça e-nameyê berê ji hêla kesek ve hatî xwendin. û dîsa tê xwestin, server dê peldanka #msgs-ê ji nû ve nexwîne lê dê daneyan ji navnîşa xwe derxe, ku dibe ku êdî bi rastiya me re negunca be.

Kerio mekanîzmayek ji bo ji nû ve xwendina navnîşê heye, lê ew dikare di nav şeş demjimêran de bixebite, û di van 6 demjimêran de dibe ku têkildariya peywira di salnameyê de hinekî winda bibe.
Ji bo ku hûn niha hevdemkirinê biceribînin, hûn dikarin pelê di pelrêça hevdemkirî ya têkildar index.fld jêbikin, piştî ku ji nû ve gihîştina peldanka li ser servera nameyê û heke ev pel winda bibe, Kerio dê pelrêça û daneyan ji nû ve bixwîne. dê xuya bibe. Wusa dixuye ku ev çareserî ye, dema ku daneyan diguhezîne pelê jêbirin, lê ev her car naxebite, lê tenê yekem car, wê hingê Kerio ji ber hin sedeman hemî eleqeya xwe li index.fld winda dike.
Di heman demê de ew dest bi rijandina peyamên ku ji bikarhêner re nayên têgihîştin - li ser cûreyek navnîşan dike û ku ew jixwe li wir tiştek dike.

Vebijarkek din jî heye, ku meriv tiştek biafirîne - di dema afirandina tiştek nû de, server ji nişkê ve pê dihese ku navê pelê ku wî dixwest destnîşan bike jixwe hatîye girtin, lê ew berf dibare û ev vebijarkek bêdawî ye.

Awa bibe?

Ger em carek din bala xwe bidin wêneyê ku jixwe ji me re nas e.

Hevdemkirina bêkêmasî ya peldankên hevbeş, têkilî, salname di navbera serverên Kerio Connect-ê yên belavkirî de

Lê li ser balafirek din, hûn dikarin bişkokek pir balkêş a ku naha hewce dike bibînin - Peldankên Reindex

Û bi rastî. Ger em li ser vê bişkojkê li ser serverek nameyê bikirtînin ku nizane ku tiştek di #msgên hevdemkirî de jixwe guheriye, em ê encamek domdar û bilez bistînin. Her tiştê veşartî dê eşkere bibe.

Di têketinê de hûn dikarin bibînin ka ev pêvajo çiqas dirêj dike; di rewşa min de bi çend hezar (15 hezar) tomaran ew bi qasî 3-4 hûrdem digire.

Tiştê ku divê em bikin ev e ku em fêhm bikin ka meriv çawa bi rastî vê bişkojkê pêdixe dema ku em pê hewce ne.

Derket holê ku Kerio yên xwe hene API

description
Dokumentasyonê

Fonksiyona ku peywira me pêk tîne wiha xuya dike:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

Ji van hemî jorîn, pêdivî ye ku em skrîptek binivîsin ku dê rewşa peldankên berjewendiyê bişopîne û, ger tiştek hatibe guhertin, fonksiyona ku em hewce dike pêk bînin.

Ez dixwazim bibêjim ku min çend guhertoyên cûrbecûr yên nivîsarên ku kontrolên cihêreng pêk tînin nivîsandin, û li ser ya ku hemî encaman li ser bingeha hejmara pelan derdixe rawestiyam.

pêkanîna Skrîptê

Nimûne û şiroveya nivîsara 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

Kopiyek skrîptê li ser her serverek e-nameyê dimeşîne (dibe ku wekî karûbar were bikar anîn, mafên Adm ne hewce ne)

Nivîsar pelê dixwîne Setup%Computername%.List

Cîhê ku %Computername% navê pêşkêşkara heyî ye (Pelterek dikare navnîşên hemî pêşkêşkeran bi carekê ve bigire.)

Dosya %Computername%.List – tevahî rêyên pelrêçên hevdemkirî dihewîne, her rêyek li ser rêzek nû tê nivîsandin, û divê xetên vala nehewîne.

Piştî destpêkirina yekem, skrîpt prosedûra îndekskirinê pêk tîne, bêyî ku ew hewce be an na, û skrîpt di her pelrêça hevdemkirî de navnîşek hejmara pelan jî diafirîne.

Armanca skrîptê ew e ku hemî pelên di pelrêça diyarkirî de bijmêre.

Di dawiya jimartina her pelrêçakê de, heke bi kêmî ve di peldankek de nirxa heyî ya pelan bi ya berê re nebe hev, skrîpt pelan ji pelrêça bingehîn a pelrêça e-nameya hevdemkirî jê dike: index.fld, indexlog.fld, search.fld û pêvajoya îndekskirina peldankên nameyên hevpar dest pê dike.

Agahiyên li ser pêkanîna peywirê di pelrêça LOG de têne avêtin.

Pêvajoya Indekskirinê
Pêvajoya navnîşkirinê bi pêkanîna fonksiyonek Kerio API ve tê
Rûniştin = callMethod ("Domains.checkPublicFoldersIntegrity",{}, nîşanek)

Nimûneyek pêkanîna di - python de tê dayîn
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 hûn dikarin wê wekî xwe bihêlin, lê heke hûn HTTPS hewce ne, divê python bi sertîfîkaya Kerio bawer bike.

Di heman demê de di pelê de divê hûn hesabek bi mafên ku vê fonksiyonê pêk bînin (Adm - peldankên posta giştî) ya servera posteyê diyar bikin.

Ez hêvî dikim ku gotara min dê ji rêvebirên Kerio Connect re kêrhatî be.

Source: www.habr.com

Add a comment