ব্যাকআপ সার্ভারে LVM স্ন্যাপশট সিঙ্ক করুন


22

আমার বেশ কয়েকটি জেন ​​ভার্চুয়াল মেশিন প্রচুর লিনাক্স সার্ভারে চলছে। এই ভিএমগুলি তাদের ডিস্ক চিত্রগুলি লিনাক্স এলভিএম ভলিউমে ডিভাইসের নামের সাথে / dev / xenVG / SERVER001OS এর লাইনে সংরক্ষণ করে। আমি disk ডিস্কের চিত্রগুলির নিয়মিত ব্যাকআপ নিতে চাই যাতে আমাদের প্রয়োজন সেক্ষেত্রে আমি ভিএমগুলি পুনরুদ্ধার করতে পারি (এলভিএম ডিভাইসগুলি দুটি ফিজিক্যাল মেশিনের মধ্যে ইতিমধ্যে ডিআরবিডি দিয়ে সজ্জিত, আমি কেবল এখানে অতিরিক্ত প্যারানয়েড হচ্ছি)।

কিভাবে আমি এই সম্পর্কে যান? স্পষ্টতই প্রথম পদক্ষেপটি হল LVM ডিভাইসটির স্ন্যাপশট করা, তবে আমি কীভাবে সবচেয়ে কার্যকর পদ্ধতিতে কোনও ব্যাকআপ সার্ভারে ডেটা স্থানান্তর করব? আমি কেবল পুরো ডিভাইসটি অনুলিপি করতে পারি, এর লাইনের সাথে কিছু:

dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"

... তবে এতে অনেক ব্যান্ডউইথ লাগবে। দূরবর্তী সার্ভারগুলির মধ্যে পুরো ডিস্ক ব্লকের সামগ্রী সিঙ্ক করার জন্য কি আরএসসিএনসি-জাতীয় সরঞ্জাম রয়েছে? কিছুটা এইরকম:

rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img

আমি যদি rsync এর ম্যান পেজটি সঠিকভাবে বুঝতে পারি তবে উপরের কমান্ডটি আসলে কাজ করবে না (এটি হবে?), তবে এটি আমি কী লক্ষ্য করছি তা দেখায়। আমি বুঝতে পারি - ডিভাইসগুলির আরএসসিএনসি অপশনটি ডিভাইসগুলি নিজেরাই অনুলিপি করা উচিত those ডিভাইসের সামগ্রীগুলি নয়। দূরবর্তী সার্ভারের সাথে সিঙ্ক করার আগে ভিএম চিত্রের স্থানীয় কপি তৈরি করা কোনও বিকল্প নয় কারণ ডিস্কের স্থান নেই।

এমন কোনও উপযোগী ইউটিলিটি যা ব্লক ডিভাইস এবং দূরবর্তী সার্ভারে একটি ব্যাকআপ ফাইলের মধ্যে সিঙ্ক করতে পারে? আমি যদি লিখতে পারি তবে আমি এটি লিখতে পারি তবে বিদ্যমান সমাধানটি আরও ভাল। আমি কি একটি আরএসসিএনসি বিকল্প মিস করেছি যা আমার জন্য এটি করে?

উত্তর:


12

স্ট্যান্ডার্ড আরএসএনসি এই বৈশিষ্ট্যটি নিখোঁজ করছে, তবে এর জন্য একটি প্যাচ রয়েছে আরএসসিএন-প্যাচ টারবাল (কপি- ডিভাইস.ডিফ ) যা http://rsync.samba.org/ftp/rsync/ থেকে ডাউনলোড করা যাবে অ্যাপ্লিকেশন এবং পুনর্নির্মাণের পরে , আপনি --copy- ডিভাইস বিকল্পের সাহায্যে ডিভাইসগুলি rsync করতে পারেন।


যদি আপনার টার্গেটটি কোনও ডিভাইস হয় তবে প্যাচটি এখানে অবস্থিত: bugzilla.redhat.com/show_bug.cgi?id=1193654
জেসন পায়ারন

16

যদিও আরএসসিঙ্কের জন্য 'লিখন-ডিভাইস' এবং 'কপি-ডিভাইস' প্যাচগুলি রয়েছে তবে তারা কেবলমাত্র ছোট চিত্রগুলিতে (1-2 গিগাবাইট) ভাল কাজ করে। আর সিঙ্কটি বড় চিত্রগুলিতে ব্লক মেলানোর জন্য প্রায় যুগে যুগে অনুসন্ধান করতে ব্যয় করবে এবং এটি প্রায় 40 গিগাবাইট বা বৃহত্তর ডিভাইস / ফাইলগুলির থেকে অকেজো।

প্রতি 1 এমবি চেকসাম তুলনা করতে আমরা নিম্নলিখিতটি ব্যবহার করি এবং তারপরে এটি মেলে না তবে কেবল কপিরাইটটি অনুলিপি করতে পারি। আমরা এটি মার্কিন যুক্তরাষ্ট্রে একটি ভার্চুয়াল হোস্টের সর্বজনীন ইন্টারনেটে ব্যাকআপ সিস্টেমে ব্যাকআপ সার্ভারগুলিতে ব্যবহার করি। খুব কম সিপিইউ ক্রিয়াকলাপ এবং স্ন্যাপশট পারফরম্যান্স হিট কেবল কয়েক ঘন্টা পরে:

স্ন্যাপশট তৈরি করুন:

lvcreate -i 2 -L 25G /dev/vg_kvm/company-exchange -n company-exchange-snap1

export dev1='/dev/mapper/vg_kvm-company--exchange--snap1';
export dev2='/dev/mapper/vg_kvm-company--exchange';
export remote='root@backup.company.co.za';

প্রাথমিক বীজ বপন:

dd if=$dev1 bs=100M | gzip -c -9 | ssh -i /root/.ssh/rsync_rsa $remote "gzip -dc | dd of=$dev2"

বর্ধমান রাতের ব্যাকআপ (কেবলমাত্র পরিবর্তিত ব্লক প্রেরণ করে):

ssh -i /root/.ssh/rsync_rsa $remote "
  perl -'MDigest::MD5 md5' -ne 'BEGIN{\$/=\1024};print md5(\$_)' $dev2 | lzop -c" |
  lzop -dc | perl -'MDigest::MD5 md5' -ne 'BEGIN{$/=\1024};$b=md5($_);
    read STDIN,$a,16;if ($a eq $b) {print "s"} else {print "c" . $_}' $dev1 | lzop -c |
ssh -i /root/.ssh/rsync_rsa $remote "lzop -dc |
  perl -ne 'BEGIN{\$/=\1} if (\$_ eq\"s\") {\$s++} else {if (\$s) {
    seek STDOUT,\$s*1024,1; \$s=0}; read ARGV,\$buf,1024; print \$buf}' 1<> $dev2"

স্ন্যাপশট সরান:

lvremove -f company-exchange-snap1

আমি প্রথমে ভয় পেয়েছিলাম কিন্তু তারপরে চেষ্টা করে দেখি এটি সত্যিই কার্যকর।
মার্টিন

@ Sysadmin1138 এর read ARGV,$buf,1024পরিবর্তে কেন read STDIN,$buf,1024? (আমি stackoverflow.com/q/22693823/2987828 এর উত্তর দেওয়ার চেষ্টা করছি এবং এখানে এআরজিভি বুঝতে পারি না)। আমি স্ট্যাকওভারফ্লো.com/Q/22693823/2987828 প্রশ্নে প্রতিদিনের রূপটি ব্যবহার করি এবং এটি ভালভাবে কাজ করে।
ব্যবহারকারী 2987828

1
দেখতে perlmonks.org/bare/?node_id=492858 যা বলছেন যে argv এবং stdin অনুরূপ যদি না ফাইলের নাম আর্গুমেন্ট হিসাবে দেওয়া হয়।
ব্যবহারকারী 2987828

9

LVM স্ন্যাপশটগুলির সাথে বিশেষত এটি করতে আগ্রহী লোকেরা আমার lvmsync সরঞ্জামটি পছন্দ করতে পারে যা স্ন্যাপশটের পরিবর্তিত ব্লকের তালিকাটি পড়ে এবং কেবল সেই পরিবর্তনগুলি প্রেরণ করে।


6

কটাক্ষপাত Zumastor লিনাক্স সংগ্রহস্থল প্রকল্প এটি প্রয়োগ "স্ন্যাপশট" ব্যাকআপ মাধ্যমে বাইনারি "rsync" ব্যবহার ddsnap হাতিয়ার।

ম্যান পৃষ্ঠা থেকে:

ddsnap ব্লক ডিভাইসের প্রতিলিপি সরবরাহ করে একটি ব্লক স্তরের স্ন্যাপশট সুবিধা যা একাধিক একযোগে স্ন্যাপশট দক্ষতার সাথে রাখার জন্য সক্ষম। ডিডিএসএনপ দুটি স্ন্যাপশটের মধ্যে পার্থক্যযুক্ত স্ন্যাপশট খণ্ডগুলির একটি তালিকা তৈরি করতে পারে, তারপরে তারতম্যটি প্রেরণ করুন। ডাউন স্ট্রিম সার্ভারে স্ন্যাপশটেড ব্লক ডিভাইসে আপডেট হওয়া ডেটা লিখুন।


আহ, দেখতে আমি ঠিক যে ধরণের জিনিস খুঁজছিলাম তা দেখে মনে হচ্ছে, ধন্যবাদ।
ডেভিড হিক্স

জুমাস্তর প্রকল্পের লিঙ্কটি পুরানো, আমার ধারণা এটি সঠিক: shapor.com/zumastor.org
মার্টিন

2

ব্লকসিঙ্ক নামে একটি পাইথন স্ক্রিপ্ট রয়েছে যা এসএসএসের মাধ্যমে নেটওয়ার্কের মাধ্যমে দুটি ব্লক ডিভাইস সিঙ্ক্রোনাইজ করার একটি সহজ উপায়, কেবল পরিবর্তনগুলি স্থানান্তরিত করে।

  • Blockync.py অনুলিপি হোস্টের হোম ডিরেক্টরিতে অনুলিপি করুন
  • আপনার দূরবর্তী ব্যবহারকারী sudo করতে পারেন বা নিজেই রুট হয়েছে তা নিশ্চিত করুন
  • আপনার স্থানীয় ব্যবহারকারী (রুট?) রিমোট হোস্টে উত্স ডিভাইস ও এসএসএস পড়তে পারে তা নিশ্চিত করুন
  • ডাকা: python blocksync.py /dev/source user@remotehost /dev/dest

আমি সম্প্রতি এটি পরিষ্কার করতে এবং এটি আরএসসিএন ( অ্যাডলার -32 ) হিসাবে একই দ্রুত-চেকসাম অ্যালগরিদমটি ব্যবহার করতে পরিবর্তন করার জন্য এতে হ্যাক করেছি ।


1
আমি এটি ব্যবহার করছি, ভাল কাজ করে। নোট করুন এমন একটি সংশোধিত সংস্করণ রয়েছে যা দুর্নীতির সম্ভাব্য উত্সটি ঠিক করে এবং আরও নির্ভরযোগ্য হ্যাশ ব্যবহার করে।
সেএমসি

1

আপনি যদি কোনও সমতল দিয়ে তারের ওপার জুড়ে যে পরিমাণ ফাঁকা স্থান প্রেরণ করতে চান তা হ্রাস করার চেষ্টা করছেন dd, আপনি কি এটি স্ক্যাশ করার জন্য পাইপ করার আগে কেবল এটি জিৎপিতে পাইপ করতে পারবেন না?

যেমন dd if = / dev / xenVG / SERVER001OS | gzip | ssh প্রশাসক @ ব্যাকআপসভার "dd of = / mnt / largeDisk / SERVER001OS.img.gz"


এটি ব্যান্ডউইথকে কিছুটা কমাতে চাইবে তবে আমরা প্রায় 60০ এবং ১০০ গিগাবাইট ডিস্ক চিত্র পেয়েছি এবং জিপিপ সহ এটিও খুব বেশি সময় নিতে পারে।
ডেভিড হিক্স

@ আফিডিয়ান, আপনার জানা উচিত যে এসএসএইচ অভ্যন্তরীণভাবে সংকোচন পরিচালনা করে, এর একটি বিকল্প আছে।
পোজ

1

কেবল সাবধান থাকুন যে LVM স্ন্যাপশট রয়েছে এমন একটি সিস্টেমের কর্মক্ষমতা স্ন্যাপশটের সংখ্যার সাথে সমানুপাতিক।

উদাহরণস্বরূপ , lvm স্ন্যাপশট সহ MySQL সম্পাদনা performance


প্রকৃতপক্ষে - আমার প্রাথমিক সমাধানটি কেবলমাত্র একটি দৈনিক স্ন্যাপশট সেট করার পরে আগের দিনের স্ন্যাপশটের সাথে আলাদা হয়ে তা ব্যাকআপ সার্ভারে ডিডি-ইনগ্রেটেড করে। এটি সাদামাটা ছিল না তা সন্ধান করার জন্য আমি সবচেয়ে আকস্মিক হয়েছি।
ডেভিড হিক্স

এটি এলভিএম পাতলা স্ন্যাপশটের সাথে সত্য হতে পারে না যা অনেক ভিন্নভাবে প্রয়োগ করা হয়
অ্যালেক্স এফ

0

ডেভিড হার্সেলম্যানের উত্তর ছাড়াও - নিম্নলিখিত স্ক্রিপ্টটি একটি স্থানীয় ডিভাইসে সিঙ্ক হবে:

perl -'MDigest::MD5 md5' -ne 'BEGIN{$/=\1024};print md5($_)' $dev2 |
  perl -'MDigest::MD5 md5' -ne 'BEGIN{$/=\1024};$b=md5($_);
    read STDIN,$a,16;if ($a eq $b) {print "s"} else {print "c" . $_}' $dev1 |
   perl -ne 'BEGIN{$/=\1} if ($_ eq"s") {$s++} else {if ($s) {
    seek STDOUT,$s*1024,1; $s=0}; read ARGV,$buf,1024; print $buf}' 1<> $dev2

আমি যতদূর জানি উভয় স্ক্রিপ্ট প্রথমে list.samba.org এ পোস্ট করা হয়েছিল


0

এটি একটি পুরানো প্রশ্ন, তবে কেউ দুটি ব্লক ডিভাইসকে দক্ষতার সাথে সিঙ্ক্রোনাইজ করার জন্য দুটি খুব কার্যকর সরঞ্জামের উল্লেখ করেনি:

আমি দৃ both ়ভাবে উভয় সরঞ্জামের সাথে খেলতে এবং আপনার উদ্দেশ্যে ব্যবহারের সাথে যেকোন ভাল মানিয়ে নেওয়ার জন্য নির্বাচন করার পরামর্শ দিচ্ছি ।


0

বেশ কয়েক বছর সন্ধান করার পরে, আমি সম্প্রতি সার্ভারের মধ্যে এলভিএম স্ন্যাপশট সিঙ্ক্রোনাইজ করার জন্য একটি সরঞ্জাম তৈরি করেছি । এটি ন্যূনতম আইও ব্যবহার করার জন্য এবং সিঙ্ক্রোনেশন হওয়ার সময় সিস্টেমগুলি চালনার অনুমতি দেওয়ার জন্য ডিজাইন করা হয়েছে।

এটি জেডএফএস প্রেরণের অনুরূপ অনুরূপ যা LVM স্ন্যাপশটের মধ্যে পার্থক্যটি সিঙ্ক্রোনাইজ করে এবং পাতলা বিধান ব্যবহার করে যাতে পারফরম্যান্সের প্রভাবটি সর্বনিম্ন হয়।

আমি মতামত চাই, তাই একবার দেখুন।


-1

এই স্ক্রিপ্টে কিছু দক্ষতা তৈরি করতে হবে:

  1. আমার সিস্টেমে কমপক্ষে, পার্ল বাফার রিডগুলি 8 কে, তাই 8192 ব্লক আকার ব্যবহার করুন।
  2. অটোফ্লাশ যাতে রিমোট আউটপুট বাফারটি 'পূর্ণ' না হওয়া পর্যন্ত স্থানীয় প্রান্তটি অবরুদ্ধ হয় না, কারণ আমরা lzop খাচ্ছি বাফারিং অর্থহীন বলে মনে হচ্ছে।

ssh -i /root/.ssh/rsync_rsa $ দূরবর্তী "পার্ল -'MDigest :: MD5 md5 '-ne' BEGIN {$ | = 1; \ $ / = \ 892}; মুদ্রণ এমডি 5 (\ $ ) '$ দেব 2 | lzop -c "| lzop -dc | perl -'MDigest :: MD5 md5 '-ne' BEGIN {$ | = 1; $ / = \ 8192}; $ বি = এমডি 5 ($ ); STDIN, $ a, 16; পড়ুন; (($ aq $ b) {"s" মুদ্রণ করুন "অন্য" {মুদ্রণ "সি")। $ _} '$ দেব 1 | lzop -c | ssh -i /root/.ssh/rsync_rsa $ দূরবর্তী "lzop -dc |
পার্ল -ne 'BEGIN {\ $ / = \ 1} যদি (\ $ _ eq \" s \ ") {\ $ s ++} অন্য {যদি (\ $ s) ST ST D * s * 8192,1; ST $ s = 0}; এসআরভিভি, \ $ বুফ, 8192 পড়ুন; প্রিন্ট \ $ বুফ} '1 <> $ দেব 2 "

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