تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

شب بخیر، حبر!

ٹاسک

میری تنظیم Kerio Connect پلیٹ فارم پر میل سرور استعمال کرتی ہے؛ میل سرورز مختلف شہروں میں اپنے صارفین کی خدمت کے لیے انسٹال کیے گئے ہیں۔ ابتدائی طور پر کوئی تقسیم شدہ ڈھانچہ نہیں تھا، کیونکہ ڈومین تیسرے درجے پر مختلف ہوتے ہیں، جو سائٹ کے شہر کی نشاندہی کرتے ہیں۔ سب کام ہوا اور سب خوش تھے۔ ایک اچھا دن، انتظامیہ نے ایک کام مقرر کیا، تمام سائٹس کے درمیان سرگرمیوں کا ایک مشترکہ کیلنڈر!

پس منظر

ابتدائی طور پر، خیال یہ تھا کہ کیریو ڈسٹری بیوٹڈ میل ڈومین کو بڑھایا جائے اور یہ سب کچھ خود کرے گا۔ جیسے ہی کہا گیا تھا، ایک تقسیم شدہ ڈومین بنایا گیا تھا، لیکن ایسا نہیں تھا، سرور ایک ہی سرور پر واقع ڈومینز کے درمیان کیلنڈرز، فولڈرز، رابطوں کو سنکرونائز کرنے کے لیے تیار تھا، لیکن ڈیٹا کو کئی کے درمیان ہم آہنگ کرنے کے لیے بالکل بھی تیار نہیں تھا۔ سرورز

مجھے، بلاشبہ، اس طرح کے کیچ کی توقع نہیں تھی اور ایک طویل عرصے تک یقین نہیں کر سکتا تھا کہ مجھے جس فعالیت کی ضرورت تھی وہ غائب تھی۔ بعد میں مجھے اس حقیقت کے دستاویزی ثبوت ملے۔ میں اس سے بہت پریشان اور مایوس تھا۔

کام آسانی سے ایک مسئلہ میں بدل گیا.

اختیارات کیا تھے؟

  • مختلف سرورز پر دو کلائنٹس بنائیں جو کسی تھرڈ پارٹی سافٹ ویئر کے ساتھ ضروری ڈیٹا کا تبادلہ کریں۔ اس تھرڈ پارٹی سافٹ ویئر کو تلاش کرنا ضروری تھا جو اس فعالیت کو نافذ کرے - مجھے ایسا ریک پسند نہیں ہے، لیکن ایسا لگتا ہے کہ یہ واحد فوری حل ہے۔
  • سرورز کے درمیان ڈیٹا سنکرونائزیشن کے لیے اپنا اسکرپٹ لکھیں۔ حقیقت یہ ہے کہ کیریو ہر شے کو ایک علیحدہ فائل کے طور پر اسٹور کرتا ہے، اس لیے فائلوں کے ساتھ کام کرنے کے لیے اسکرپٹ تیار کرنا ضروری تھا، لیکن ذرائع کی کافی تعداد کے پیش نظر یہ کام کچھ پیچیدہ معلوم ہوتا تھا، خاص طور پر چونکہ اس کے لیے متعدد کام کرنا ضروری تھا۔ اعداد و شمار کی درستگی کی جانچ پڑتال کرتا ہے، اگر کوئی اسی مدت میں کام بناتا ہے، وغیرہ وغیرہ۔

آگے دیکھتے ہوئے، میں یہ کہوں گا کہ اگرچہ کیریو کسی شے کو ایک علیحدہ فائل کے طور پر اسٹور کرتا ہے، لیکن یہ اتنا بیوقوف نہیں ہے کہ جب بھی آپ اس چیز تک رسائی حاصل کرتے ہیں تو فائل سسٹم کیسا ہوتا ہے؟

کافی وقت سوچنے میں صرف کرنے کے بعد، "دشمن کے علاقے پر قبضہ کرنے" کے منصوبوں کے ساتھ کاغذ کے ٹکڑوں کا ایک گچھا تیار کرنے کے بعد، 6 بجے میں نے دو درست فیصلے کیے:

  • پہلا فیصلہ یہ ہے کہ اپنا کام خود کرو اور باہر سے کچھ نہ ڈھونڈو۔
  • دوسرا حل یہ ہے کہ سو جائیں۔

پہلے ہی صبح میں ایک واحد اور سچی سوچ کے ساتھ بیدار ہوا، جو چند حروف تک کم ہو گیا تھا - DFS

حل

حل خود اس طرح نظر آیا

  • ان تمام سرورز کو لائیں جو OS Windows میں مطابقت پذیری میں حصہ لیں گے۔ (اس کا کچھ حصہ لینکس پر تھا۔ میل ڈیٹا کی دوسرے OS میں منتقلی کی ضرورت تھی)
  • ان ڈائریکٹریوں کی ساخت کا تعین کریں جو ہم آہنگی میں حصہ لیں گی - وہ ایک جیسی ہونی چاہئیں۔
  • ایک ہی DFS اسپیس کے ساتھ ایک ڈومین کے تحت تمام میل سرورز کی وضاحت کریں۔
  • اوپر بیان کردہ تقسیم شدہ کیریو ڈومین بنائیں، کیونکہ میرے معاملے میں ڈیٹا سنکرونائزیشن کی ضرورت ہے، نہ صرف سرورز کے درمیان بلکہ ڈومینز کے درمیان بھی؛ دوسرا کیریو سرور آزادانہ طور پر ہینڈل کر سکتا ہے۔ (پہلے کے برعکس)
  • مطابقت پذیر ڈائریکٹریز کو DFS اسپیس پر سیٹ کریں۔
  • کسی قسم کی بیساکھی لے کر آئیں (آخر میں، آپ بیساکھی کے بغیر نہیں رہ سکتے)

Реализация

دو میل سرورز پر مثال (شاید زیادہ)

1. کیریو تقسیم شدہ ڈومین

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

ماسٹر مطابقت پذیری میں حصہ نہیں لیتا ہے، لیکن یہ شرط نہیں ہے۔

میں یہ نہیں بتاؤں گا کہ کیریو تقسیم شدہ ڈومین کو کیسے بڑھایا جائے، اس میں کچھ بھی پیچیدہ نہیں ہے، آپ آفیشل کا مطالعہ کر سکتے ہیں۔ manul

بالآخر، آپ کو ایڈمنسٹریشن کنسول میں درج ذیل تصویر دیکھنا چاہئے:

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

اگلا مجھے مشترکہ فولڈرز میں دلچسپی تھی؛ ماسٹر سرور پر آپ درج ذیل آپشنز بتا سکتے ہیں۔

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

ہر ڈومین کے لیے مخصوص - سرور ڈومینز کے درمیان عوامی فولڈرز کو ہم آہنگ نہیں کرے گا۔

تمام ڈومینز کے لیے عام - تمام سرورز ہر ڈومین میں موجودہ عوامی فولڈرز کو چھوڑ دیں گے اور ہر میل سرور پر تمام ڈومینز کے لیے نئے سنگل فولڈرز بنائیں گے۔

ہوشیار! اگرچہ یہ آپشن تمام سرورز پر کنفیگریشن پالیسی کو تبدیل کرتا ہے، لیکن یہ ہر سرور سے الگ الگ مطابقت پذیر ہوتا ہے (یعنی ایک مشترکہ جگہ کے بغیر)

منتظم کے پاس اب بھی صارفین کے درمیان رسائی تقسیم کرنے کی صلاحیت ہوگی۔
میرے معاملے میں، وہ سب میرے ہیں اور مجھے مکمل مطابقت پذیری کی ضرورت ہے (آپ کے معاملے میں، حل مختلف ہو سکتا ہے) ہر سرور پر آپ کو ڈومینز کے ایک جیسے سیٹ بنانے کی ضرورت ہے جنہیں مطابقت پذیر ہونے کی ضرورت ہے۔

2. کیریو ڈیٹا ڈائریکٹریز

اب آپ کو ایک جیسی مشترکہ ڈائریکٹریز بنانے کی ضرورت ہے جن کو ہر ایک سرور پر ہم آہنگ کرنے کی ضرورت ہے۔ فولڈرز، کیلنڈرز، رابطے۔

مشورہ - انگریزی میں ڈائریکٹریز بنائیں، اگر آپ انہیں لاطینی میں بناتے ہیں، تو ڈائریکٹری کا نام کچھ ناقابل فہم انکوڈنگ میں ہوگا، یہ کم از کم تکلیف دہ ہے۔

اب آپ کو ہر سرور پر میل فولڈرز کے جسمانی راستے تلاش کرنے کی ضرورت ہے۔

تمام ڈومینز کے لیے عام ~DataMailmail#publicСинхронизируемый каталог#msgs
ہر ڈومین کے لیے مخصوص ~DataMailmail**Domain**#publicСинхронизируемый каталог#msgs

براہ کرم نوٹ کریں کہ ہم پوری ڈائرکٹری کو ہم آہنگ نہیں کریں گے، لیکن صرف ڈیٹا کے ساتھ کنٹینر کو ہم آہنگ کریں گے۔ #msgs - اشیاء خود یہاں محفوظ ہیں، باقی تمام ڈیٹا ہر سرور کے لیے الگ ہونا چاہیے۔

3.DFS

میں تفصیل سے نہیں بتاؤں گا کہ ڈی ایف ایس کو کیسے ترتیب دیا جائے، اس مسئلے پر کافی معلومات موجود ہیں۔

ڈی ایف ایس ونڈوز سرور میں ایک رول سروس ہے جو مختلف سرورز پر موجود مشترکہ فولڈرز کو یکجا کرنے کی صلاحیت فراہم کرتی ہے۔
MS DFS دستاویز سے لنک کریں۔

DFS ترتیب دینے سے پہلے، آپ کو تمام میل سرورز کو روکنا ہوگا جو ڈیٹا کی مطابقت پذیری میں حصہ لیں گے۔

سیٹ اپ کی تکمیل پر، آپ کو مطابقت پذیر فولڈرز میں سے ہر ایک کے لیے درج ذیل تصویر موصول ہونی چاہیے۔

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

قدرتی طور پر، ہمیں نقل شدہ فولڈرز شائع کرنے کی ضرورت نہیں ہے۔

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

نقل ہونے کے بعد (اور وہاں نقل کرنے کے لیے کوئی خاص چیز نہیں ہے - فولڈرز خالی ہیں)، میل سرورز کو شروع کیا جا سکتا ہے۔

اگلا، آپ میل سرورز میں سے ایک کو ڈیٹا سے بھر سکتے ہیں اور چیک کر سکتے ہیں کہ ڈیٹا کو صحیح طریقے سے نقل کیا گیا ہے۔

4. بیساکھی

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

جیسا کہ آپ ڈیٹا کی مطابقت پذیری (DFS) شروع ہونے کے بعد دیکھ سکتے ہیں، اگر آپ نے پہلے سرور پر کچھ تخلیق کیا ہے، تو کسی نہ کسی طرح دوسرے سرور پر کچھ بھی ظاہر نہیں ہوتا ہے، یا یہ ظاہر ہوتا ہے لیکن کسی نہ کسی طرح ہمیشہ نہیں۔

مایوس نہ ہوں؛ یقیناً، یہ جلد یا بدیر وہاں ظاہر ہوگا، لیکن بعد میں جلد بہتر ہوگا۔ کیونکہ یہ 6 - 12 گھنٹے میں بہت دیر ہو چکی ہے۔

بات یہ ہے کہ جیسے ہی آپ پہلے سرور پر کوئی چیز بنائیں گے، دوسرے اور اس کے بعد کے سرورز پر فائل یقیناً فوراً ظاہر ہو جائے گی جس کی بدولت DFS سسٹم ہے، لیکن اس صورت میں کہ یہ میل ڈائرکٹری پہلے ہی کسی نے پڑھی ہو۔ اور دوبارہ درخواست کی جاتی ہے، سرور #msgs فولڈر کو دوبارہ نہیں پڑھے گا بلکہ اس کے اپنے انڈیکس سے ڈیٹا نکال دے گا، جو کہ اب ہماری حقیقت سے مطابقت نہیں رکھتا۔

کیریو کے پاس انڈیکس کو دوبارہ پڑھنے کا طریقہ کار ہے، لیکن یہ تقریباً چھ گھنٹے میں کام کر سکتا ہے، اور ان 6 گھنٹوں کے دوران کیلنڈر میں کام کی مطابقت کسی حد تک ختم ہو سکتی ہے۔
ابھی ہم وقت سازی کو جانچنے کے لیے، آپ میل سرور پر فولڈر تک دوبارہ رسائی کے بعد، متعلقہ مطابقت پذیر ڈائریکٹری index.fld میں موجود فائل کو حذف کر سکتے ہیں اور اگر یہ فائل غائب ہے، تو Kerio ڈائریکٹری اور ڈیٹا کو دوبارہ پڑھے گا۔ ظاہر ہو جائے گا. ایسا لگتا ہے کہ یہی حل ہے، ڈیٹا تبدیل ہونے پر فائل کو ڈیلیٹ کر دیں، لیکن یہ ہر بار کام نہیں کرتا، بلکہ صرف پہلی بار ہوتا ہے، پھر Kerio کسی وجہ سے index.fld میں تمام دلچسپی کھو دیتا ہے۔
یہ ایسے پیغامات کو بھی تھوکنا شروع کر دیتا ہے جو صارف کے لیے ناقابل فہم ہیں - کسی قسم کے انڈیکس کے بارے میں اور یہ کہ وہ وہاں پہلے ہی کچھ کر رہا ہے۔

ایک اور آپشن ہے، کوئی چیز بنانے کے لیے - ایک نئی چیز بنانے کے وقت، سرور کو اچانک احساس ہوتا ہے کہ وہ فائل کا نام جسے وہ تفویض کرنا چاہتا تھا پہلے ہی لے لیا گیا ہے، لیکن یہ سنو بال ہے اور یہ ایک ڈیڈ اینڈ آپشن ہے۔

ть ° Рє же Р ± С ‹С‚СЊ؟

اگر ہم ایک بار پھر اس تصویر پر توجہ دیں جو ہمارے لیے پہلے سے مانوس ہے۔

تقسیم شدہ کیریو کنیکٹ سرورز کے درمیان مشترکہ فولڈرز، رابطوں، کیلنڈرز کی مکمل ہم آہنگی۔

لیکن ایک اور ہوائی جہاز پر، آپ ایک بہت ہی دلچسپ بٹن دیکھ سکتے ہیں جس کی ہمیں ابھی ضرورت ہے۔ ری انڈیکس فولڈرز

اور بے شک۔ اگر ہم میل سرور پر اس بٹن پر کلک کرتے ہیں جو یہ نہیں جانتا ہے کہ مطابقت پذیر #msgs میں پہلے ہی کچھ بدل گیا ہے، تو ہمیں ایک مستحکم، تیز نتیجہ ملے گا۔ چھپی ہوئی ہر چیز واضح ہو جائے گی۔

لاگ میں آپ دیکھ سکتے ہیں کہ اس عمل میں کتنا وقت لگتا ہے؛ میرے معاملے میں کئی ہزار (15 ہزار) ریکارڈز میں تقریباً 3-4 منٹ لگتے ہیں۔

ہمیں صرف یہ معلوم کرنا ہے کہ جب ہمیں ضرورت ہو تو اس بٹن کو کس طرح دبانا ہے۔

یہ ثابت ہوتا ہے کیریو ان کے اپنے ہیں API

تفصیل
ریکارڈز

ہمارے کام کو انجام دینے والا فنکشن اس طرح لگتا ہے:
session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)

مندرجہ بالا سب سے، ہمیں ایک اسکرپٹ لکھنے کی ضرورت ہے جو دلچسپی کے فولڈرز کی حالت پر نظر رکھے اور، اگر کچھ بدل گیا ہے، تو ہمیں جس فنکشن کی ضرورت ہے اسے انجام دیں۔

میں یہ کہنا چاہتا ہوں کہ میں نے اسکرپٹ کے کئی مختلف ورژن لکھے ہیں جو مختلف جانچ پڑتال کرتے ہیں، اور فائلوں کی تعداد کی بنیاد پر تمام نتائج اخذ کرنے والے ایک پر بستے ہیں۔

اسکرپٹ کا نفاذ

سی ایم ڈی اسکرپٹ کی مثال اور تفصیل

دوبارہ 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

جہاں %Computername% موجودہ سرور کا نام ہے (ڈائریکٹری میں ایک ساتھ تمام سرورز کی فہرستیں شامل ہو سکتی ہیں۔)

فائل %Computername%.List - مطابقت پذیر ڈائریکٹریز کے مکمل راستوں پر مشتمل ہے، ہر راستہ ایک نئی لائن پر لکھا گیا ہے، اور اس میں خالی لائنیں نہیں ہونی چاہئیں۔

پہلی لانچ کے بعد، اسکرپٹ اشاریہ سازی کا طریقہ کار انجام دیتا ہے، قطع نظر اس کے کہ یہ ضروری ہے یا نہیں، اور اسکرپٹ ہر مطابقت پذیر ڈائرکٹری میں فائلوں کی تعداد کا انڈیکس بھی بناتا ہے۔

اسکرپٹ کا مقصد مخصوص ڈائریکٹری میں موجود تمام فائلوں کو شمار کرنا ہے۔

ہر ڈائرکٹری کی گنتی کے اختتام پر، اگر کم از کم ایک ڈائرکٹری میں فائلوں کی موجودہ قیمت پچھلی ایک سے مماثل نہیں ہے، تو اسکرپٹ مطابقت پذیر میل ڈائرکٹری کی روٹ ڈائرکٹری سے فائلوں کو حذف کر دیتا ہے: index.fld, indexlog.fld, search.fld اور مشترکہ میل فولڈرز کی اشاریہ سازی کا عمل شروع کرتا ہے۔

ٹاسک ایگزیکیوشن کے بارے میں معلومات LOG ڈائرکٹری میں ڈال دی جاتی ہے۔

اشاریہ سازی کا عمل
اشاریہ سازی کا عمل Kerio API فنکشن کو انجام دینے کے لیے آتا ہے۔
سیشن = کال میتھڈ("Domains.checkPublicFoldersIntegrity"،{}، ٹوکن)

ایک مثال کے نفاذ کو - 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 کی ضرورت ہے، تو ازگر کو کیریو سرٹیفکیٹ پر بھروسہ کرنا چاہیے۔

نیز فائل میں آپ کو میل سرور کے اس فنکشن (ایڈم - پبلک میل فولڈرز) کو انجام دینے کے حقوق کے ساتھ ایک اکاؤنٹ کی وضاحت کرنا ہوگی۔

مجھے امید ہے کہ میرا مضمون کیریو کنیکٹ کے منتظمین کے لیے مفید ثابت ہوگا۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں