খুব বড় ফোল্ডার কাঠামো সিঙ্ক্রোনাইজ করা


14

আমাদের ইন্ট্রানেটে একটি ফোল্ডার কাঠামো রয়েছে যার মধ্যে প্রায় 800,000 ফাইল রয়েছে প্রায় 4,000 ফোল্ডারে বিভক্ত। আমাদের ডিএমজেডের একটি ছোট ক্লাস্টারের মেশিনে এটি সিঙ্ক্রোনাইজ করা দরকার। কাঠামোর গভীরতা খুব অগভীর (এটি কখনও কখনও দুই স্তরের বেশি অতিক্রম করে না)।

বেশিরভাগ ফাইল কখনও পরিবর্তন হয় না, প্রতিদিন কয়েক হাজার আপডেটেড ফাইল এবং 1-2-২০০০ নতুন ফাইল থাকে। ডেটা হ'ল historicalতিহাসিক রিপোর্টিং ডেটা বজায় রাখা হচ্ছে যেখানে উত্সের ডেটা শুচি করা হয়েছে (অর্থাত্ এগুলি চূড়ান্ত প্রতিবেদনগুলির জন্য যার উত্সের ডেটা যথেষ্ট পুরানো যা আমরা সংরক্ষণাগারভুক্ত এবং মুছে ফেলি)। এটি একটি যুক্তিসঙ্গত সময় ফ্রেমে ঘটতে পারে তা প্রদত্ত প্রতি দিন একবার সিঙ্ক্রোনাইজিং যথেষ্ট। প্রতিবেদনগুলি রাতারাতি উত্পন্ন হয় এবং আমরা নির্ধারিত কাজ হিসাবে সকালে প্রথম জিনিসটি সিঙ্ক করি।

স্পষ্টতই যেহেতু খুব কম ফাইলগুলি নিয়মিতভাবে পরিবর্তন হয়, তাই ইনক্রিমেন্টাল কপি থেকে আমরা প্রচুর উপকার পেতে পারি। আমরা Rsync চেষ্টা করেছি, তবে এটি "বিল্ডিং ফাইল তালিকা" অপারেশনটি সম্পূর্ণ করতে আট থেকে বারো ঘন্টা সময় নিতে পারে । এটি স্পষ্ট যে আমরা কীভাবে আরএসসিএনসি সক্ষম তা দ্রুত বাড়িয়ে তুলছি (12 ঘন্টা সময়ের ফ্রেমটি অনেক দীর্ঘ)।

স্ট্রাকচারগুলি সিঙ্ক্রোনাইজ করার জন্য আমরা রেপ্লিওয়েব নামে আরেকটি সরঞ্জাম ব্যবহার করছিলাম এবং এটি প্রায় 45 মিনিটের মধ্যে একটি বর্ধিত স্থানান্তর করতে পারে। তবে মনে হয় আমরা এর সীমা অতিক্রম করেছি, ফাইলগুলি যখন নেই তখন এটি মুছে ফেলা হিসাবে দেখা শুরু করেছে (সম্ভবত কিছু অভ্যন্তরীণ মেমরি কাঠামো শেষ হয়ে গেছে, আমরা নিশ্চিত নই)।

অন্য কেউ কি এই ধরণের বড় আকারের সিঙ্ক্রোনাইজেশন প্রকল্পে চলেছে? সিঙ্ক্রোনাইজেশনের জন্য বিশাল আকারের ফাইল স্ট্রাকচারগুলি হ্যান্ডেল করার জন্য কি এমন কিছু ডিজাইন করা আছে?


আপনি একই সাথে চলমান বেশ কয়েকটি দৃষ্টান্তের কাজটি ছড়িয়ে দেওয়ার চেষ্টা করেছেন? আমার কাছে ডিরেক্টরি কাঠামোর সত্যিকারের ভাল ছবি নেই তবে আপনি এটি ডিরেক্টরি নাম বা ফাইলের নাম দ্বারা বিভক্ত করতে পারেন।
ক্লাচ

আমরা সে সম্পর্কে ভেবেছিলাম, তবে এ জাতীয় সমতল কাঠামোর সাহায্যে কাজটি বিভক্ত করার জন্য ভাল বিভাজন রেখা খুঁজে পাওয়া শক্ত। এটি জটিল যে ফোল্ডারগুলি বেশিরভাগ অংশের জন্য খুব একইভাবে নামকরণ করা হয় (একটি নামকরণ কনভেনশন রয়েছে যা বেশিরভাগ ফোল্ডারকে একই প্রাথমিক সেট 6 অক্ষরের সাথে শুরু করে তোলে)।
মাইইটি

ডেভ আপনি কি কখনও একটি ভাল সমাধান খুঁজে পেয়েছেন? আমি 65535 সাব-ডায়ার সহ একটি দিরের জন্য lsyncd বিবেচনা করছি, যার প্রত্যেকটিতে 65 ^ 16 ফাইল থাকতে পারে
মাইক ডিহেন

1
@ মাইকডিহেন আমি এখানে এমন কোনও সরঞ্জাম খুঁজে পাইনি যা আমি এখানে পুরোপুরি খুশি ছিলাম। আমরা বাগটি ঠিক করার জন্য মালিকানাধীন RepliWeb সরঞ্জামটি পেয়েছি যেখানে তারা ফাইলগুলি মুছে ফেলা হয়েছে যা মুছে ফেলা হয়নি, এটি একটি উপচে পড়া অভ্যন্তরীণ কাঠামো ছিল। বছর কয়েক আগে আমি সেই কাজটি ছেড়েছি, আমি ধরে নিয়েছি তারা এখনও এটি ব্যবহার করছে using আপনার উদ্দেশ্যে, যদি আপনার ডিরেক্টরিগুলি যথাযথভাবে বিতরণ করা হয়, আপনি রায়ান এর সমাধানের মতো কিছু নিয়ে যেতে পারেন। এটি শীর্ষ স্তরের মোছাগুলি লক্ষ্য করবে না, তবে 65535 জন আধিকারিকরা আমাকে পরামর্শ দেয় যে আপনার সম্ভবত এটিগুলি নেই।
মাইটি

উত্তর:


9

আপনি যদি সর্বশেষ-সংশোধিত টাইমস্ট্যাম্পগুলিতে ফাইল সিস্টেমে বিশ্বাস করতে পারেন তবে আপনি ইউনিক্স / লিনাক্স 'ফাইন্ড' ইউটিলিটির সাথে রাইকিঙ্কের সমন্বয় করে জিনিসগুলিকে গতি বাড়িয়ে দিতে পারেন। 'সন্ধান করুন' বিগত দিনের মধ্যে সর্বশেষ-সংশোধিত সময় দেখানো সমস্ত ফাইলের একটি তালিকা একত্রিত করতে পারে এবং তারপরে কেবল ফাইল / ডিরেক্টরিগুলির সংক্ষিপ্ত তালিকাটি রাইকিঙ্ক করা যায়। এটি রিয়েন্স সার্ভারের বিপরীতে প্রেরকের প্রতিটি ফাইলের মেটাডেটার তুলনা করার চেয়ে অনেক বেশি দ্রুত।

সংক্ষেপে, নীচের কমান্ডটি গত 24 ঘন্টা পরিবর্তিত ফাইল এবং ডিরেক্টরিগুলির তালিকার জন্য কেবলমাত্র রিযাইক চালাবে: (Rsync অন্য কোনও ফাইল / ডিরেক্টরি যাচাই করতে বিরত করবে না))

find /local/data/path/ -mindepth 1 -ctime -0 -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.

আপনি যদি 'ফাইন্ড' কমান্ডের সাথে পরিচিত না হন তবে এটি নির্দিষ্ট ডিরেক্টরি সাবট্রি দিয়ে পুনরাবৃত্তি করে, ফাইলগুলি এবং / অথবা ডিরেক্টরিগুলি সন্ধান করে যা আপনার নির্দিষ্ট মানদণ্ডগুলি পূরণ করে। উদাহরণস্বরূপ, এই আদেশ:

find . -name '\.svn' -type d -ctime -0 -print

বর্তমান ডিরেক্টরিতে ("।") শুরু হবে এবং অনুসন্ধানের জন্য সমস্ত উপ-ডিরেক্টরিতে পুনরাবৃত্তি হবে:

  • যে কোনও ডিরেক্টরি ("টাইপ ডি"),
  • ".svn" ("-name '.svn'"),
  • গত 24 ঘন্টা ("-কটাইম -0") এ মেটাডেটা সংশোধিত হয়েছে।

এটি স্ট্যান্ডার্ড আউটপুটে criteria মানদণ্ডের সাথে মেলে এমন কোনও কিছুর পুরো পাথ নাম ("-প্রিন্ট") মুদ্রণ করে। বিকল্পগুলির নাম '-name', '-প্রকার', এবং '-কালটাইম' বলা হয় "পরীক্ষা", এবং বিকল্প '-প্রিন্ট' "ক্রিয়া" বলা হয়। 'সন্ধান করুন' এর ম্যান পেজে টেস্ট এবং ক্রিয়াগুলির একটি সম্পূর্ণ তালিকা রয়েছে।

আপনি যদি সত্যিই চতুর হতে চান তবে এই প্রক্রিয়াটিকে আরও ত্রুটি-সহনশীল এবং নমনীয় করে তুলতে আপনি 'ফাইন্ড' কমান্ডের '-cnewer' পরীক্ষাটি ব্যবহার করতে পারেন'ccime 'এর পরিবর্তে। গাছের প্রতিটি ফাইল / ডিরেক্টরিতে তার মেটাডেটা কিছু রেফারেন্স ফাইলের চেয়ে সাম্প্রতিককালে পরিবর্তিত হয়েছে কিনা তা '-জ্ঞানী' পরীক্ষা করে। 'স্পর্শ ... |' এর ঠিক আগে প্রতিটি রানের শুরুতে এনএক্সটি রানের রেফারেন্স ফাইল তৈরি করতে 'টাচ' ব্যবহার করুন rsync ... 'কমান্ড কার্যকর করে। এখানে বেসিক বাস্তবায়ন:

#!/bin/sh
curr_ref_file=`ls /var/run/last_rsync_run.*`
next_ref_file="/var/run/last_rsync_run.$RANDOM"
touch $next_ref_file
find /local/data/path/ -mindepth 1 -cnewer $curr_ref_file -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.
rm -f $curr_ref_file

এই স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে এটি কখন চালানো হয়েছিল তা জানে এবং এটি কেবল সর্বশেষ রান থেকে পরিবর্তিত ফাইলগুলি স্থানান্তর করে। যদিও এটি আরও জটিল, এটি আপনাকে এমন পরিস্থিতি থেকে রক্ষা করে যেখানে ডাউনটাইম বা অন্য কোনও ত্রুটির কারণে আপনি ২৪ ঘন্টারও বেশি সময় ধরে কাজ চালানো মিস করেছেন।


এটি অত্যন্ত চতুর সমাধান! আমি ভাবছি আপনি touch $next_ref_fileশেষ পর্যন্ত বলতে চাইছেন ? এটি মুছে ফেলা পথগুলির সাথে লড়াই করার ক্ষমতা ছাড়াই আমাদের ছেড়ে যায় যদিও (এমনকি এই স্থির সংরক্ষণাগার প্রতিবেদনগুলি শেষ পর্যন্ত যথেষ্ট পুরানো হয়ে যায় যে সেগুলি সংরক্ষণাগারভুক্ত এবং মোছা হয়েছে)। যদিও এটি শো স্টপার নাও হতে পারে।
মাইটিই

যদিও আমি আবিষ্কার করছি যে find . -ctime 0এই ডিরেক্টরি কাঠামোর চেয়েও ঠিক ধীরে ধীরে (এখনও এটির জন্য সময়টি সম্পূর্ণ করার জন্য এটির জন্য অপেক্ষা করা হচ্ছে)। এটি আসলে আমাকে খানিকটা বিরক্ত করে কারণ মনে হয় এটি খুব কম স্তরের অপারেশন হতে পারে যা সম্ভবত আমাদের এই কাজটি শেষ হওয়ার প্রত্যাশার জন্য দ্রুততম বার নির্ধারণ করে। এটি এমন পরিস্থিতিতে হতে পারে যে ডিস্ক আই / ও হ'ল এখানে সীমাবদ্ধ ফ্যাক্টর।
মাইটিই

যে স্ক্রিপ্টলেট হিসাবে, হ্যাঁ, আমি একটি ভুল করেছি। আমি বোঝাতে চাইছিলাম 'সন্ধান করুন ... | চালানোর আগে ঠিক' পরের_আরফ_ফাইলে '(' কর্নার_রেফ_ফায়াল 'নয়)' টাচ 'চালান | rsync ... 'কমান্ড। (আমি আমার উত্তরটি ঠিক করব))
রায়ান বি। লিঞ্চ

3
ধীর 'ফাইন্ড' কমান্ড হিসাবে: আপনি কোন ধরণের ফাইল সিস্টেম ব্যবহার করছেন? আপনি যদি Ext3 ব্যবহার করছেন তবে আপনি দুটি এফএস টুইটগুলি বিবেচনা করতে চাইতে পারেন: 1) এক্সট্রোন 3 এর 'ডায়ার_ইন্ডেক্স' বৈশিষ্ট্য সক্ষম করতে, 'টিউন 2fs -O dir_index <DEVICE_NODE>' চালান, বড় ফাইল সংখ্যার সাথে ডায়ার অ্যাক্সেস গতি বাড়ানোর জন্য। 2) অ্যাক্সেস সময় আপডেট বন্ধ করতে 'মাউন্ট-ও রিমাম্ট, নোটিম, নোডিরামটাইম' চালান যা সাধারণত পাঠের গতি বাড়ায়। 'dumpe2fs -h <DEVICE_NODE> | grep dir_index 'আপনাকে বলে যদি' dir_index 'ইতিমধ্যে সক্ষম করা হয় (কিছু ডিস্ট্রোগুলিতে এটি ডিফল্ট হয়), এবং' মাউন্ট | গ্রেপ <DEVICE_NODE> 'আপনাকে অ্যাক্সেসের সময় আপডেট সম্পর্কে বলে।
রায়ান বি। লিঞ্চ

দুঃখের বিষয় এটি এনটিএফএস - উইন্ডোজ 2003 সার্ভার ফাইন্ড কমান্ডের জন্য সাইগউইন ব্যবহার করে। আমরা আমাদের ডেবিয়ান ক্লাস্টারের যে কোনও ক্ষেত্রে এরকম কিছু ঘটতে চাইলে এক্সট্রি 3 এর জন্য এই টিউনিং বিকল্পগুলি (দুর্দান্ত পরামর্শ) মনে রাখব।
মাইটিই

7

একত্রীকরণের চেষ্টা করুন , এটি স্থানীয়ভাবে প্রতিটি সার্ভারে পরিবর্তন তালিকা (বিল্ডিং ফাইলের তালিকা) রেখে, ব-দ্বীপ গণনা করার সময় দ্রুততর করে, এবং তারের পরে যে পরিমাণ পরিমাণ তারের পরে প্রেরণ করা হয়েছে তা হ্রাস করে এই সমস্যাটি সমাধানের জন্য বিশেষভাবে তৈরি করা হয়েছিল।


আমি ইউনিসনকে চেষ্টা করে দেখছি। এটি এখন "পরিবর্তনগুলির সন্ধানের" পর্যায়ে প্রায় ২ ঘন্টা চলছে এবং বর্তমানে যে ফাইলগুলি কাজ করছেন তার উপর ভিত্তি করে দেখে মনে হচ্ছে এটি প্রায় অর্ধেক পথ সম্পন্ন হয়েছে (সুতরাং স্থানান্তর শুরুর আগে মোট ৪ ঘন্টা)। দেখে মনে হচ্ছে এটি আরএসসিএন এর চেয়ে ভাল তবে এটি আমাদের কাঙ্ক্ষিত অপারেটিং উইন্ডোর বাইরে।
মাইইটি

2
প্রথমবার আপনি যখন উভয় পক্ষের একটি সূচক তৈরি করেন তখন পুনর্নির্মাণের সময়গুলি আরএসইএনসি'র সাথে সমান হয় কারণ এতে প্রতিটি ফাইল হ্যাশ করতে হয়। একবার এটি হয়ে গেলে, সংযুক্তি যখন ফাইল পরিবর্তন হয়েছে তখন চিহ্নিত করার জন্য ডিরেক্টরিটির শেষবারের পরিবর্তিত সময়টি ব্যবহার করে এবং পরিবর্তনের জন্য কেবল সেই ফাইলটি স্ক্যান করতে হয়।
ডেভ চেনি

দুঃখের সাথে আমি একজন অতি-উদ্যোগী অপারেশন প্রশাসনের শিকার হয়েছি যে ক্যাটালগটি তৈরি হওয়ার আগে আমার সেশনটি জোর করে শেষ করেছিল (আমরা একযোগে লগ-অন সংখ্যাকে প্রোডাকশন সার্ভারগুলিতে সীমাবদ্ধ করি)। প্রাথমিক ক্যাটালগ তৈরির ক্ষেত্রে এটি যে অগ্রগতি করেছিল তা আমি হারিয়ে ফেলেছি, তাই আমাকে আবারও শুরু করতে হবে। আমি আপনাকে জানাতে পারি যে এটি কীভাবে চলে।
মাইইটি

পরিবর্তনের জন্য স্ক্যান করতে প্রাথমিক ক্যাটালগটি তৈরি করা এখন প্রায় 2 ঘন্টা সময় নেয়। আমি বেশ অবাক হয়েছি এর জন্য কতটা র‌্যাম ইউনিয়ন ব্যবহার করছে। আমাদের ফাইল সংগ্রহের জন্য, উত্স সার্ভারটি 635 এম ব্যবহার করছে এবং দূরবর্তী ক্লায়েন্টটি 366 এম ব্যবহার করছে। একটি ক্লাস্টারে বেশ কয়েকটি মেশিন সিঙ্ক্রোনাইজ করা বিশেষত উত্স সার্ভারের জন্য একটি দুর্দান্ত মাপের পদচিহ্ন হতে পারে!
মাইটিই

1
আপনি কীভাবে আপনার ডেটা এমনভাবে গঠন করতে সক্ষম হন যাতে ডেটা সম্প্রতি পরিবর্তিত হয়েছে তা সনাক্ত করা সহজ করে তোলে? অর্থাৎ, এটি বছর / মাস / দিন / ... ফর্ম্যাটে সংরক্ষণ করা হচ্ছে?
ডেভ চেনি


2

আপনি যদি আরএসসিএন-তে সুইচ ব্যবহার করে থাকেন তবে এটিকে ছাড়া চালানোর চেষ্টা করুন। কিছু কারণে আমি এই গতিটি এমনকি ফাইলগুলির প্রাথমিক গণনাও দেখেছি।


আমরা -Z পতাকাটি সহ এবং ছাড়াও চেষ্টা করেছি। "বিল্ডিং ফাইল তালিকা" কার্যকর করার সময়কালে এর প্রভাব পড়েছে বলে মনে হয় না।
মাইইটি

2

আরএসইএনসি কমান্ড যা কোনও সংকোচনের বাইরে নেই তা "রিসিভ ফাইল তালিকাকে" এত দ্রুত এগিয়ে নিয়ে যায় এবং আমাদের প্রায় 500 জিবি স্থানান্তর করতে হয়েছিল। -Z সুইচটি নিয়ে একদিন লাগার আগে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.