Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Wilujeng siang, Habr!

tugas

Organisasi kuring nganggo pangladén surat dina platform Kerio Connect; pangladén surat dipasang di kota béda pikeun ngalayanan pamakéna. Mimitina teu aya struktur anu disebarkeun, sabab domain béda dina tingkat katilu, nunjukkeun kota situs éta. Sagalana digawé jeung dulur éta senang. Hiji dinten anu saé, manajemén nyetél tugas, kalénder umum kagiatan antara sadaya situs!

prasajarah

Mimitina, ideu nyaéta pikeun ngangkat Kerio Distributed Mail Domain sareng éta bakal ngalakukeun sadayana nyalira. Teu lami saurna, domain anu disebarkeun diciptakeun, tapi éta sanés masalahna, server parantos siap nyinkronkeun almenak, polder, kontak - antara domain anu aya dina server anu sami, tapi henteu pisan bakal nyinkronkeun data antara sababaraha server.

Kuring, tangtosna, henteu nyangka nyekel sapertos kitu sareng lami-lami teu percanten yén pungsionalitas anu kuring peryogikeun leungit. Teras kuring mendakan bukti dokumenter ngeunaan kanyataan ieu. Kuring pohara puzzled jeung kuciwa ku ieu.

Tugas lancar janten masalah.

Naon éta pilihan?

  • Jieun dua klien dina server béda nu tukeur data diperlukeun ku sababaraha software pihak-katilu. Ieu diperlukeun pikeun manggihan software pihak-katilu ieu anu bakal nerapkeun pungsi ieu - Abdi teu resep rake misalna, tapi seemed yén ieu téh hijina solusi gancang.
  • Tulis skrip anjeun sorangan pikeun sinkronisasi data antara server. Kanyataan yén Kerio nyimpen unggal obyék salaku file anu misah, ku kituna perlu ngembangkeun skrip pikeun damel sareng file, tapi kusabab jumlah sumber anu cekap, tugasna sigana rada pajeulit, khususna sabab kedah ngalakukeun sababaraha. pariksa kabeneran data, upami aya anu nyiptakeun tugas dina waktos anu sami, jsb., jsb.

Ningali payun, abdi bakal nyebutkeun yén sanajan Kerio nyimpen hiji obyék salaku file misah, teu jadi bodo nanya kumaha sistem file ngalakonan unggal waktos Anjeun ngakses obyék.

Saatos nyéépkeun waktos mikir, nyusun sakumpulan kertas kalayan rencana "ngarebut wilayah musuh," tabuh 6 kuring nyandak dua kaputusan anu leres:

  • Kaputusan kahiji nyaéta ngalakukeun hal anjeun nyalira sareng henteu milarian nanaon ti luar.
  • Solusi kadua nyaéta pikeun bobo.

Geus isuk-isuk kuring bangun kalayan hiji pamikiran tunggal jeung leres, nu diréduksi jadi sababaraha hurup - DFS

kaputusan

Solusi sorangan katingali sapertos kieu

  • mawa sagala server anu bakal ilubiung dina singkronisasi ka OS Windows. (Bagian tina éta dina Linux. Migrasi data surat ka OS anu sanés diperyogikeun)
  • Nangtukeun struktur diréktori anu bakal ilubiung dina sinkronisasi - aranjeunna kedah sami.
  • Nangtukeun sadaya server mail dina hiji domain kalawan spasi DFS tunggal.
  • Jieun domain Kerio disebarkeun di luhur-disebutkeun, saprak dina hal kuring sinkronisasi data diperlukeun, teu ukur antara server tapi ogé antara domain; kadua bisa diatur ku server Kerio mandiri. (teu kawas nu kahiji)
  • Setel diréktori anu disingkronkeun kana rohangan DFS.
  • Jieun sababaraha jinis tongkat (sanggeus sadayana, anjeun moal tiasa hirup tanpa tongkat)

Реализация

Conto dina dua server mail (meureun leuwih)

1. domain Distribusi Kerio

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Master henteu ilubiung dina sinkronisasi, tapi ieu sanés prasyarat.

Abdi moal ngajelaskeun kumaha carana ngangkat domain disebarkeun Kerio, teu aya anu rumit ngeunaan éta, anjeun tiasa diajar resmi manul

Pamustunganana, anjeun kedah ningali gambar ieu dina konsol administrasi:

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Teras kuring resep kana polder anu dibagikeun; dina server Master anjeun tiasa netepkeun pilihan ieu:

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Husus pikeun tiap domain - server moal nyingkronkeun folder publik antara domain

Umum ka sadaya domain - sadaya server bakal ngantunkeun polder umum anu aya dina unggal domain sareng nyiptakeun polder tunggal anyar pikeun sadaya domain dina unggal server surat.

Awas! Sanajan pilihan ieu ngarobah kawijakan konfigurasi dina sakabéh server, éta nyingkronkeun misah ti unggal server (nyaéta, tanpa spasi umum tunggal)

Administrator masih bakal gaduh kamampuan pikeun nyebarkeun aksés antara pangguna.
Bisi kuring, aranjeunna sadayana milik sareng kuring peryogi sinkronisasi pinuh (Dina hal anjeun, solusina tiasa béda) dina unggal server anjeun kedah nyiptakeun set domain anu sami anu kedah disingkronkeun.

2. Diréktori data Kerio

Ayeuna anjeun kedah nyiptakeun diréktori anu sami sareng anu kedah disingkronkeun dina unggal server. Polder, Almenak, Kontak.

Saran - jieun diréktori dina basa Inggris, upami anjeun nyiptakeunana dina basa Latin, diréktori éta bakal gaduh nami dina sababaraha encoding anu teu kaharti, ieu sahenteuna henteu pikaresepeun.

Ayeuna anjeun kedah milarian jalur fisik polder mail dina unggal server.

Umum ka sadaya domain ~DataMailmail#publicСинхронизируемый каталог#msgs
Husus pikeun tiap domain ~DataMailmail**Domain**#publicСинхронизируемый каталог#msgs

Punten dicatet yén kami moal nyingkronkeun sadayana diréktori, tapi ngan ukur wadahna sareng data #pesen — objék sorangan disimpen di dieu, sadaya data sejenna kudu misah pikeun tiap server.

3. DFS

Kuring moal ngajelaskeun di jéntré kumaha ngonpigurasikeun DFS, aya cukup informasi dina masalah ieu.

DFS mangrupakeun ladenan peran dina Windows Server nu nyadiakeun kamampuhan pikeun ngagabungkeun polder dibagikeun lokasina di server béda
Tumbu ka dokumén MS DFS

Sateuacan nyetél DFS, anjeun kedah ngeureunkeun sadaya pangladén surat anu bakal ngiringan sinkronisasi data.

Saatos parantosan setelan, anjeun kedah nampi gambar di handap ieu pikeun unggal polder anu disingkronkeun

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Alami, urang henteu kedah nyebarkeun polder anu direplikasi.

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Saatos réplikasi lumangsung (sareng teu aya anu khusus pikeun ngayakeun réplikasi - polderna kosong), server mail tiasa ngamimitian.

Salajengna, anjeun tiasa ngeusian salah sahiji pangladén surat sareng data sareng pariksa yén data éta direplikasi leres.

4. Krupuk

Pedaran réfléksi

Salaku bisa ningali sanggeus data dimimitian nyingkronkeun (DFS), mun anjeun boh dijieun hal dina server munggaran, kumaha bae age nanaon mucunghul dina server kadua, atawa nembongan tapi kumaha bae teu salawasna.

Tong asa-asa; tangtosna, éta bakal muncul di dinya engké atanapi engké, tapi langkung saé langkung lami. Kusabab éta telat dina 6 - 12 jam.

Masalahna nyaéta pas anjeun nyiptakeun hiji hal dina server kahiji, dina server kadua sareng salajengna file bakal langsung muncul berkat sistem DFS, tapi upami diréktori surat ieu parantos dibaca ku batur sateuacanna. sarta dipénta deui, server moal deui maca folder #msgs tapi bakal nyiduh kaluar data tina indéks sorangan, nu bisa euweuh pakait jeung kanyataan urang.

Kerio boga mékanisme pikeun ulang maca indéks, tapi tiasa dianggo dina ngeunaan genep jam, sarta salila ieu 6 jam relevansi tugas dina kalénder bisa jadi rada leungit.
Pikeun nguji sinkronisasi ayeuna, anjeun tiasa ngahapus file dina index.fld diréktori anu cocog, saatos ngaksés deui folder dina server mail sareng upami file ieu leungit, Kerio bakal maca deui diréktori sareng data. bakal muncul. Ieu bakal sigana nu ieu solusi, ngahapus file lamun data robah, tapi ieu teu dianggo unggal waktu, tapi ngan kahiji waktos, lajeng Kerio pikeun sababaraha alesan leungiteun sagala minat index.fld.
Éta ogé mimiti nyiduh pesen anu teu kaharti ku pangguna - ngeunaan sababaraha jinis indéks sareng yén éta parantos ngalakukeun hiji hal di dinya.

Aya pilihan sejen, pikeun nyieun hiji hal - dina momen nyieun hiji obyék anyar, server ujug-ujug nyadar yén ngaran file nu eta hayang napelkeun geus dicokot, tapi snowballs na ieu téh pilihan dead-end.

Kumaha tiasa?

Lamun urang nengetan sakali deui kana gambar nu geus akrab jeung urang.

Sinkronisasi pinuh ku folder dibagikeun, kontak, almenak antara disebarkeun server Kerio Connect

Tapi dina pesawat anu sanés, anjeun tiasa ningali tombol anu pikaresepeun pisan anu urang peryogikeun ayeuna - Reindex polder

Jeung memang. Lamun urang klik tombol ieu dina server mail nu teu nyaho yén hal geus robah dina #msgs nyingkronkeun, urang bakal meunang stabil, hasilna gancang. Sagalana disumputkeun bakal jelas.

Dina log anjeun tiasa ningali sabaraha lila prosés ieu butuh; dina kasus kuring sareng sababaraha rébu (15 rébu) rékaman butuh sakitar 3-4 menit.

Sadaya anu urang kedah laksanakeun nyaéta terang kumaha leres-leres pencét tombol ieu nalika urang peryogina.

Tétéla Kerio boga sorangan API

gambaran
Dokuméntasi

Fungsi anu ngalaksanakeun tugas urang sapertos kieu:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

Tina sadaya di luhur, urang kedah nyerat naskah anu bakal ngawas kaayaan polder anu dipikaresep sareng, upami aya anu robih, ngalaksanakeun fungsi anu urang peryogikeun.

Abdi hoyong disebutkeun yen kuring wrote sababaraha versi béda tina Aksara nu ngalakukeun cék béda, sarta netep dina hiji nu draws sagala conclusions dumasar kana jumlah file.

palaksanaan Script

conto naskah CMD jeung pedaran

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 naskah dijalankeun dina unggal server surat (tiasa dianggo salaku jasa, hak Adm henteu diperyogikeun)

Skrip maca file Setup%Computername%.List

Dimana %Computername% nyaéta nami server ayeuna (Diréktori tiasa ngandung daptar sadaya server sakaligus.)

Berkas %Computername%.List - ngandung jalur pinuh ku diréktori anu disingkronkeun, unggal jalur ditulis dina garis anyar, sareng henteu kedah ngandung garis kosong.

Saatos peluncuran munggaran, naskah ngalaksanakeun prosedur indexing, paduli naha éta perlu atawa henteu, sarta naskah ogé nyieun hiji indéks tina jumlah file dina unggal diréktori nyingkronkeun.

Tujuan tina naskah nyaéta pikeun ngitung sadaya file dina diréktori anu ditangtukeun.

Dina ahir cacah unggal diréktori, upami dina sahenteuna hiji diréktori nilai file ayeuna henteu cocog sareng anu sateuacana, skrip ngahapus file tina diréktori akar diréktori surat anu disingkronkeun: index.fld, indexlog.fld, search.fld tur dimimitian prosés indexing polder mail dibagikeun.

Inpormasi ngeunaan palaksanaan tugas dibuang kana diréktori LOG.

Prosés Indexing
Prosés indexing asalna handap pikeun executing hiji fungsi API Kerio
Session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

Hiji conto palaksanaan dirumuskeun dina - 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 anjeun tiasa ngantepkeun éta, tapi upami anjeun peryogi HTTPS, python kedah percanten ka sertipikat Kerio.

Ogé dina file anjeun kedah netepkeun akun anu gaduh hak pikeun ngalakukeun fungsi ieu (Adm - folder mail umum) tina server mail.

Kuring miharep artikel abdi bakal mangpaat pikeun pangurus Kerio Connect.

sumber: www.habr.com

Tambahkeun komentar