د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

ماسپښین ښه، حبر!

موخه

زما سازمان د Kerio Connect پلیټ فارم کې د میل سرور کاروي؛ د میل سرورونه په بیلابیلو ښارونو کې نصب شوي ترڅو خپلو کاروونکو ته خدمت وکړي. په پیل کې هیڅ ویشل شوی جوړښت نه و، ځکه چې ډومینونه په دریمه کچه توپیر لري، د سایټ ښار په ګوته کوي. هر څه کار وکړ او هرڅوک خوشحاله وو. یوه ښه ورځ، مدیریت یو دنده وټاکه، د ټولو سایټونو ترمنځ د فعالیتونو یو عام کیلنڈر!

له تاریخ څخه دمخه

په پیل کې، نظر دا و چې د کیریو توزیع شوي میل ډومین لوړ کړي او دا به هرڅه پخپله وکړي. ژر تر ژره ویل شوي چې ترسره شوي ، یو توزیع شوی ډومین رامینځته شوی ، مګر دا قضیه نده ، سرور چمتو و چې کیلنڈرونه ، فولډرونه ، اړیکې همغږي کړي - په ورته سرور کې موقعیت لرونکي ډومینونو ترمینځ ، مګر د څو ترمینځ ډیټا همغږي کولو لپاره هیڅ نه و. سرورونه

ما، البته، د داسې کیچ تمه نه درلوده او د اوږدې مودې لپاره یې باور نه شو کولی چې هغه فعالیت چې زه ورته اړتیا لرم ورک و. وروسته ما د دې حقیقت مستند شواهد وموندل. زه په دې کار ډیر حیران او مایوسه وم.

دنده په اسانۍ سره په ستونزه بدله شوه.

اختیارونه څه وو؟

  • په مختلف سرورونو کې دوه پیرودونکي رامینځته کړئ چې د ځینې دریمې ډلې سافټویر سره اړین معلومات تبادله کوي. دا اړینه وه چې د دې دریمې ډلې سافټویر ومومئ چې دا فعالیت به پلي کړي - زه دا ډول ریک نه خوښوم، مګر داسې بریښي چې دا یوازینی چټک حل و.
  • د سرورونو ترمنځ د معلوماتو همغږي کولو لپاره خپل سکریپټ ولیکئ. حقیقت دا دی چې کیریو هر څیز د جلا فایل په توګه ذخیره کوي، نو دا اړینه وه چې د فایلونو سره کار کولو لپاره سکریپټ رامینځته کړي، مګر د کافی شمیر سرچینو په پام کې نیولو سره، دا کار یو څه پیچلی ښکاري، په ځانګړې توګه ځکه چې دا اړینه وه چې څو څو ځلې ترسره کړي. د معلوماتو د سموالي لپاره معاینه کوي، په هغه صورت کې چې یو څوک په ورته وخت کې دنده رامینځته کړي، او داسې نور.

مخکې لټولو سره، زه به ووایم چې که څه هم کیریو یو شی د جلا فایل په توګه ذخیره کوي، دا دومره احمق نه دی چې پوښتنه وکړي چې د فایل سیسټم هرکله چې تاسو اعتراض ته لاسرسۍ څنګه کوي.

د ډیر وخت په فکر کولو سره، د کاغذ د ټوټو یوه ټوټه جوړه کړه چې د "دښمن د سیمې د نیولو لپاره" پلان لري، په 6 بجو ما دوه سمې پریکړې وکړې:

  • لومړی پریکړه دا ده چې خپل کار وکړئ او د بهر څخه هیڅ شی مه ګورئ.
  • دوهم حل دا دی چې خوب ته لاړ شئ.

لا دمخه په سهار کې زه د یو واحد او ریښتیني فکر سره پاڅیدم ، کوم چې یو څو لیکو ته راټیټ شوی و - DFS

پریکړه

د حل لاره پخپله داسې ښکاري

  • ټول سرورونه راوړي چې د OS وینډوز ته په ترکیب کې برخه واخلي. (د دې برخه په لینکس کې وه. بل OS ته د میل ډیټا مهاجرت اړین و)
  • د لارښودونو جوړښت مشخص کړئ چې په ترکیب کې به برخه واخلي - دوی باید ورته وي.
  • د یو واحد DFS ځای سره د یو ډومین لاندې ټول میل سرورونه تعریف کړئ.
  • پورته ذکر شوی توزیع شوی کیریو ډومین جوړ کړئ، ځکه چې زما په قضیه کې د معلوماتو همغږي کول اړین دي، نه یوازې د سرورونو ترمنځ بلکې د ډومینونو ترمنځ؛ دویم د کیریو سرور لخوا په خپلواکه توګه اداره کیدی شي. (د لومړي نه برعکس)
  • د DFS ځای ته همغږي شوي لارښودونه تنظیم کړئ.
  • د یو ډول کرچ سره راشئ (په هرصورت، تاسو د کرچ پرته ژوند نشئ کولی)

پلي کول

په دوه میل سرورونو کې مثال (شاید نور)

1. کیریو ویشل شوی ډومین

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

ماسټر په ترکیب کې برخه نه اخلي، مګر دا یو شرط ندی.

زه به تشریح نه کړم چې څنګه د کیریو توزیع شوي ډومین لوړ کړم ، پدې کې هیڅ پیچلي ندي ، تاسو کولی شئ رسمي مطالعه وکړئ manul

په نهایت کې ، تاسو باید لاندې عکس د ادارې کنسول کې وګورئ:

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

بیا زه د شریک فولډرو سره علاقه لرم؛ په ماسټر سرور کې تاسو کولی شئ لاندې اختیارونه مشخص کړئ:

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

د هر ډومین لپاره ځانګړی - سرور به د ډومینونو ترمینځ عامه فولډرې همغږي نه کړي

په ټولو ډومینونو کې عام - ټول سرورونه به په هر ډومین کې موجود عامه فولډرونه پریږدي او په هر میل سرور کې د ټولو ډومینونو لپاره نوي واحد فولډرونه رامینځته کړي.

پاملرنه وکړئ! که څه هم دا اختیار په ټولو سرورونو کې د ترتیب کولو پالیسي بدلوي، دا د هر سرور څخه په جلا توګه همغږي کیږي (دا د یو واحد عام ځای پرته)

مدیر به لاهم د کاروونکو ترمینځ د لاسرسي توزیع کولو وړتیا ولري.
زما په قضیه کې، دا ټول زما دي او زه بشپړ همغږي ته اړتیا لرم (ستاسو په قضیه کې، حل ممکن توپیر ولري) په هر سرور کې تاسو اړتیا لرئ د ډومینونو ورته سیټ جوړ کړئ چې همغږي کولو ته اړتیا لري.

2. د کیریو ډیټا لارښودونه

اوس تاسو اړتیا لرئ ورته شریک شوي لارښودونه رامینځته کړئ چې اړتیا لري په هر سرور کې همغږي شي. فولډر، کیلنڈر، اړیکې.

مشوره - په انګلیسي کې لارښودونه رامینځته کړئ ، که تاسو دوی په لاتین کې رامینځته کړئ ، لارښود به په ځینې نا پوهیدونکي کوډ کولو کې نوم ولري ، دا لږترلږه ناشونی دی.

اوس تاسو اړتیا لرئ په هر سرور کې د میل فولډر فزیکي لارې ومومئ.

په ټولو ډومینونو کې عام ~DataMailmail#publicСинхронизируемый каталог#msgs
د هر ډومین لپاره ځانګړی ~DataMailmail**Domain**#publicСинхронизируемый каталог#msgs

مهرباني وکړئ په یاد ولرئ چې موږ به ټوله لارښود همغږي نه کړو، مګر یوازې کانټینر د معلوماتو سره #پیغامونه - توکي پخپله دلته ساتل شوي، نور ټول معلومات باید د هر سرور لپاره جلا وي.

3.DFS

زه به په تفصیل سره تشریح نه کړم چې څنګه د DFS تنظیم کړئ ، پدې مسله کې کافي معلومات شتون لري.

DFS په وینډوز سرور کې د رول خدمت دی چې په مختلف سرورونو کې موقعیت لرونکي شریک شوي فولډرې یوځای کولو وړتیا چمتو کوي
د MS DFS سند سره اړیکه

د DFS تنظیم کولو دمخه ، تاسو باید ټول میل سرورونه ودروئ کوم چې د معلوماتو ترکیب کې برخه اخلي.

د تنظیم په بشپړیدو سره ، تاسو باید د هر یو ترکیب شوي فولډر لپاره لاندې عکس ترلاسه کړئ

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

په طبیعي توګه، موږ اړتیا نلرو چې نقل شوي فولډرونه خپاره کړو.

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

وروسته له دې چې نقل پیښ شي (او دلته د نقل کولو لپاره کوم ځانګړی شتون نلري - فولډرونه خالي دي) ، د میل سرورونه پیل کیدی شي.

بیا، تاسو کولی شئ د میل سرورونو څخه یو له ډاټا سره ډک کړئ او وګورئ چې ډاټا په سمه توګه نقل شوي.

4. کرچ

د انعکاس تفصیل

لکه څنګه چې تاسو لیدلی شئ وروسته له دې چې ډاټا همغږي کول (DFS) پیل کوي ، که تاسو یا په لومړي سرور کې یو څه رامینځته کړی ، نو په دوهم سرور کې هیڅ نه ښکاري ، یا دا ښکاري مګر یو څه تل ​​نه.

نا امیدي مه کوئ؛ البته، دا به ژر یا وروسته ښکاره شي، مګر د وروسته په پرتله ډیر ژر. ځکه چې دا په 6 - 12 ساعتونو کې ډیر ناوخته دی.

خبره دا ده چې هرڅومره ژر چې تاسو په لومړي سرور کې یو څه رامینځته کړئ ، په دوهم او ورپسې سرورونو کې فایل به یقینا سمدلاسه د DFS سیسټم څخه مننه څرګند شي ، مګر په هغه حالت کې چې دا بریښنالیک لارښود دمخه د چا لخوا لوستل شوی وي. او بیا غوښتنه کیږي، سرور به د #msgs فولډر بیا ونه لوستل شي مګر د خپل شاخص څخه به ډاټا وغورځوي، کوم چې ممکن نور زموږ د واقعیت سره سمون ونلري.

کیریو د شاخص د بیا لوستلو لپاره میکانیزم لري، مګر دا کولی شي په شپږو ساعتونو کې کار وکړي، او په دې 6 ساعتونو کې په کیلنڈر کې د دندې تړاو یو څه له لاسه ورکوي.
همدا اوس د همغږي کولو ازموینې لپاره ، تاسو کولی شئ فایل په اړونده همغږي شوي لارښود index.fld کې حذف کړئ ، وروسته له دې چې په میل سرور کې فولډر ته لاسرسی ومومئ او که دا فایل ورک وي ، کیریو به ډایرکټر او ډیټا بیا ولولي. ښکاره به شي. داسې بریښي چې دا د حل لاره ده ، فایل حذف کړئ کله چې ډاټا بدل شي ، مګر دا هر ځل کار نه کوي ، مګر یوازې لومړی ځل ، بیا کیریو د یو دلیل لپاره په index.fld کې ټوله علاقه له لاسه ورکوي.
دا د هغه پیغامونو تویول هم پیل کوي چې د کارونکي لپاره د پوهیدو وړ ندي - د یو ډول شاخص په اړه او دا چې دا دمخه هلته یو څه کوي.

یو بل اختیار شتون لري ، د یو څه رامینځته کولو لپاره - د نوي څیز رامینځته کولو په وخت کې ، سرور ناڅاپه پوه شو چې د فایل نوم چې غوښتل یې وټاکي لا دمخه اخیستل شوی ، مګر دا واورې بالیږي او دا د پای پای اختیار دی.

څنګه به وي؟

که موږ یو ځل بیا هغه عکس ته پام وکړو چې موږ ته دمخه پیژندل شوی.

د توزیع شوي کیریو کنیکټ سرورونو ترمینځ د شریک شوي فولډرو ، اړیکو ، کیلنڈرونو بشپړ همغږي کول

مګر په بله الوتکه کې، تاسو کولی شئ یو خورا زړه پورې تڼۍ وګورئ چې موږ ورته اړتیا لرو - د فولډر رینډیکس

او په حقیقت کې. که موږ په یو میل سرور کې دا تڼۍ کلیک کړو چې نه پوهیږو چې یو څه دمخه په همغږي شوي #msgs کې بدلون موندلی، موږ به یو باثباته، چټکه پایله ترلاسه کړو. هر څه چې پټ دي روښانه شي.

په لاګ کې تاسو لیدلی شئ چې دا پروسه څومره وخت نیسي؛ زما په قضیه کې د څو زره (15 زره) ریکارډونو سره دا شاوخوا 3-4 دقیقې وخت نیسي.

ټول هغه څه چې موږ یې باید ترسره کړو دا معلومه کړو چې څنګه واقعیا دا تڼۍ فشار کړئ کله چې موږ ورته اړتیا لرو.

دا معلومه شوه چې کیریو خپل لري API

شرح
لاسوند

هغه فعالیت چې زموږ دنده ترسره کوي داسې ښکاري:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

له پورته ټولو څخه، موږ اړتیا لرو یو سکریپټ ولیکو چې د ګټو فولډر حالت وڅاري او که یو څه بدل شوی وي، هغه فعالیت ترسره کړي چې موږ ورته اړتیا لرو.

زه غواړم ووایم چې ما د سکریپټونو ډیری مختلف نسخې لیکلي چې مختلف چیکونه ترسره کوي، او په هغه یو کې میشته شوي چې د فایلونو شمیر پراساس ټولې پایلې راوباسي.

د سکریپټ تطبیق

د CMD سکریپټ مثال او توضیحات

بیا 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

د سکریپټ یوه کاپي په هر میل سرور کې چلیږي (د خدمت په توګه کارول کیدی شي، د اډم حقونه اړین ندي)

سکریپټ فایل لوستل کیږي Setup%Computername%.List

چیرې چې د کمپیوټر نوم٪ د اوسني سرور نوم دی (ډائریکټري کولی شي په یوځل کې د ټولو سرورونو لیست ولري.)

فایل %کمپیوټر نوم%. لیست – د همغږي شوي لارښودونو بشپړ لارې لري، هره لاره په نوې کرښه لیکل شوې، او باید خالي لیکې ونه لري.

د لومړي لانچ وروسته ، سکریپټ د شاخص کولو کړنلاره ترسره کوي ، پرته لدې چې دا اړین وي یا نه ، او سکریپټ په هر ترکیب شوي لارښود کې د فایلونو شمیرې شاخص هم رامینځته کوي.

د سکریپټ هدف په ټاکل شوي لارښود کې د ټولو فایلونو شمیرل دي.

د هرې ډایرکټرۍ د شمیرلو په پای کې، که لږترلږه په یوه ډایرکټر کې د فایلونو اوسنی ارزښت د پخوانیو سره سمون نه خوري، سکریپټ د همغږي شوي میل ډایرکټر له روټ ډایرکټر څخه فایلونه حذف کوي: index.fld, indexlog.fld, search.fld او د شریک شوي میل فولډرونو د لیست کولو پروسه پیل کوي.

د دندې اجرا کولو په اړه معلومات د LOG لارښود کې ډوب شوي.

د لیست کولو پروسه
د لیست کولو پروسه د کیریو API فعالیت اجرا کولو ته راځي
سیشن = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

د تطبیق یوه بیلګه په 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 تاسو کولی شئ دا لکه څنګه چې وي پریږدئ، مګر که تاسو HTTPS ته اړتیا لرئ، python باید د کیریو سند باور وکړي.

همدارنګه په فایل کې تاسو باید د بریښنالیک سرور د دې فعالیت (Adm - عامه میل فولډر) ترسره کولو لپاره د حقونو سره حساب مشخص کړئ.

زه امید لرم چې زما مقاله به د کیریو ارتباط مدیرانو لپاره ګټوره وي.

سرچینه: www.habr.com

Add a comment