কীভাবে পুরো জেডএফএস পুলকে অন্য জেএফএস পুলে একমুখী মিরর দেওয়া যায়


16

আমার কাছে একটি জেডএফএস পুল রয়েছে যার মধ্যে বেশ কয়েকটি জেভোল এবং ডেটাসেট রয়েছে যার মধ্যে কিছু নেস্টেডও রয়েছে। সমস্ত ডেটাসেট এবং জেডভোলগুলি পর্যায়ক্রমে zfs- অটো-স্ন্যাপশট দ্বারা স্ন্যাপশট করা হয়। সমস্ত ডেটাসেট এবং জেডভোলগুলিতে কিছু ম্যানুয়ালি স্ন্যাপশট তৈরি করা হয়েছে।

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

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

আমি যদি আরএসসিএনসি ব্যবহার করে দুটি নিয়মিত ফাইল সিস্টেমের মধ্যে এটি করি, তবে এটি "-axPHAX --delete" (কিছু সিস্টেমের ব্যাকআপ দেওয়ার জন্য আমি আসলে এটিই করি)।

কীভাবে আমি একটি সিঙ্ক্রোনাইজিং টাস্ক সেটআপ করব যাতে রিমোট পুল জেভোলস এবং ডেটাসেটগুলি (তাদের স্ন্যাপশট সহ) স্থানীয় জেভোলস, ডেটাসেট এবং স্ন্যাপশটের সাথে সমন্বয় করতে পারে?

আমি ssh এর মাধ্যমে স্থানান্তর এড়াতে চাই, এসএসএসের কম থ্রুটপুট পারফরম্যান্সের কারণে; আমি এর পরিবর্তে এমফার বা ইস্কি পছন্দ করব।


আপনি কিভাবে আপনার প্রাথমিক করা zfs send -R ...? যদি আপনি এর মাধ্যমে আউটপুটটি পাইপ করেন তবে আপনি কী sshদিয়ে পালানো অক্ষর অক্ষম করেছিলেন zfs send -R ... | ssh -e none ...?
অ্যান্ড্রু হেনেল

এছাড়াও - আপনাকে নিশ্চিত করতে হবে যে রিমোট কপিটি আপ টু ডেট রাখার জন্য আপনার ধীর সংযোগে পর্যাপ্ত ব্যান্ডউইথ রয়েছে। আপনি যদি রিমোট সিস্টেমে প্রেরণের চেয়ে স্থানীয় সিস্টেমে আরও বেশি পরিবর্তন আনতে থাকেন তবে আপনি কখনই রিমোট কপিটি আপ টু ডেট রাখতে পারবেন না। বর্ধিত zfs প্রতিলিপি প্রবাহটি ধরুন এবং এটিকে একটি ফাইলে সংরক্ষণ করুন। ফাইলটি যদি স্ন্যাপশটের মাঝে সময়ের পরিমাণে আপনি দূরবর্তী সাইটে প্রেরণ করতে পারেন এমন ডেটার পরিমাণের চেয়ে বড় হয়, আপনি কখনই তা বজায় রাখবেন না। zfs send -R -i pool@snap1 pool@snap2 | gzip --fast > /output/file.gz
অ্যান্ড্রু হেনেল

আপনি স্বয়ংক্রিয়ভাবে এই স্ক্রিপ্টটি ব্যবহার করার চেষ্টা করতেও পারেন: github.com/psy0rz/zfs_autobackup/blob/master/README.md
এডউইন

উত্তর:


12

দাবি অস্বীকার: আমি কখনই zvols ব্যবহার করি নি, তাই স্বাভাবিক ফাইল সিস্টেম বা স্ন্যাপশটের তুলনায় এগুলি প্রতিরূপে অন্যরকম কিনা তা আমি বলতে পারি না। আমি ধরে নিলাম এগুলি কিন্তু এটির জন্য আমার শব্দটি গ্রহণ করবেন না।


আপনার প্রশ্নটি আসলে একাধিক প্রশ্ন, আমি তাদের আলাদাভাবে উত্তর দেওয়ার চেষ্টা করি:

দূরবর্তী অবস্থানে সম্পূর্ণ পুলটি কীভাবে প্রতিলিপি / মিরর করা যায়

আপনাকে টাস্কটি দুটি ভাগে বিভক্ত করতে হবে: প্রথমত, প্রাথমিক প্রতিলিপিটি সম্পূর্ণ করতে হবে, তারপরে ইনক্রিমেন্টাল প্রতিরক্ষা সম্ভব হয়, যতক্ষণ না আপনি আপনার প্রতিরূপ স্ন্যাপশটগুলিতে গোলযোগ না করেন । বর্ধিত প্রতিরূপ সক্ষম করতে, আপনাকে সর্বশেষ প্রতিলিপি স্ন্যাপশট সংরক্ষণ করতে হবে, এর আগে সমস্ত কিছু মুছতে পারে। আপনি যদি পূর্বের স্ন্যাপশটটি মুছে ফেলেন, zfs recvতবে অভিযোগটি প্রতিবেদনটি বাতিল এবং বাতিল করতে হবে। এই ক্ষেত্রে আপনাকে আবারও শুরু করতে হবে, তাই এটি না করার চেষ্টা করুন।

আপনার যদি কেবল সঠিক বিকল্পের প্রয়োজন হয় তবে সেগুলি হ'ল:

  • zfs send:
    • -R: প্রদত্ত পুল বা ডেটাসেটের অধীনে সমস্ত কিছু প্রেরণ করুন (পুনরাবৃত্ত প্রতিরূপ, সব সময় প্রয়োজন, অন্তর্ভুক্ত -p)। এছাড়াও, গ্রহণ করার সময়, সমস্ত মোছা উত্স স্ন্যাপশটগুলি গন্তব্যে মুছে ফেলা হয়।
    • -I: সর্বশেষ প্রতিরূপ স্ন্যাপশট এবং বর্তমান প্রতিলিপি স্ন্যাপশটের মধ্যে সমস্ত মধ্যবর্তী স্ন্যাপশট অন্তর্ভুক্ত করুন (কেবলমাত্র ইনক্রিমেন্টাল প্রেরণের সাথে প্রয়োজনীয়)
  • zfs recv:
    • -F: উত্সে মুছে ফেলা বিদ্যমান ডেটাসেটগুলি মোছা সহ লক্ষ্য পুলটি প্রসারিত করুন
    • -d: উত্স পুলের নামটি ফেলে দিন এবং এটি গন্তব্য পুলের নামের সাথে প্রতিস্থাপন করুন (বাকী ফাইল সিস্টেমের পাথগুলি সংরক্ষণ করা হবে, এবং প্রয়োজনে এটিও তৈরি করা হয়েছে)
    • -u: গন্তব্যে ফাইল সিস্টেম মাউন্ট করবেন না

আপনি যদি একটি সম্পূর্ণ উদাহরণ পছন্দ করেন তবে এখানে একটি ছোট স্ক্রিপ্ট রয়েছে:

#!/bin/sh

# Setup/variables:

# Each snapshot name must be unique, timestamp is a good choice.
# You can also use Solaris date, but I don't know the correct syntax.
snapshot_string=DO_NOT_DELETE_remote_replication_
timestamp=$(/usr/gnu/bin/date '+%Y%m%d%H%M%S')
source_pool=tank
destination_pool=tank
new_snap="$source_pool"@"$snapshot_string""$timestamp"
destination_host=remotehostname

# Initial send:

# Create first recursive snapshot of the whole pool.
zfs snapshot -r "$new_snap"
# Initial replication via SSH.
zfs send -R "$new_snap" | ssh "$destination_host" zfs recv -Fdu "$destination_pool"

# Incremental sends:

# Get old snapshot name.
old_snap=$(zfs list -H -o name -t snapshot -r "$source_pool" | grep "$source_pool"@"$snapshot_string" | tail --lines=1)
# Create new recursive snapshot of the whole pool.
zfs snapshot -r "$new_snap"
# Incremental replication via SSH.
zfs send -R -I "$old_snap" "$new_snap" | ssh "$destination_host" zfs recv -Fdu "$destination_pool"
# Delete older snaps on the local source (grep -v inverts the selection)
delete_from=$(zfs list -H -o name -t snapshot -r "$source_pool" | grep "$snapshot_string" | grep -v "$timestamp")
for snap in $delete_from; do
    zfs destroy "$snap"
done

এসএসএইচের চেয়ে দ্রুত কিছু ব্যবহার করুন

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

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

বিশৃঙ্খলাযুক্ত স্ন্যাপশটগুলির সাথে সমস্যা

আগেই বলা হয়েছে, আপনি যদি আপনার অনুলিপি স্ন্যাপশটগুলি মুছুন / পরিবর্তন করেন তবে আপনি ত্রুটি বার্তাটি পাবেন

cannot send 'pool/fs@name': not an earlier snapshot from the same fs

যার অর্থ হয় আপনার আদেশটি ভুল ছিল বা আপনি একটি বেমানান অবস্থায় রয়েছেন যেখানে আপনাকে অবশ্যই স্ন্যাপশটগুলি সরিয়ে পুরোপুরি শুরু করতে হবে।

এর বেশ কয়েকটি নেতিবাচক প্রভাব রয়েছে:

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

এই সমস্যাগুলির একটি সম্ভাব্য সমাধান রয়েছে, তবে আমি নিজে চেষ্টা করে দেখিনি। আপনি ব্যবহার করতে পারেন zfs bookmark, এই কাজের জন্য বিশেষভাবে তৈরি ওপেনসোলারিস / ইলুমাসের একটি নতুন বৈশিষ্ট্য। এটি আপনাকে স্ন্যাপশট পরিচালনা থেকে মুক্ত করবে। একমাত্র ক্ষতিটি হ'ল বর্তমানে, এটি কেবল একক ডেটাসেটের জন্য কাজ করে, পুনরাবৃত্তির সাথে নয়। আপনাকে আপনার সমস্ত পুরানো এবং নতুন ডেটাসেটের একটি তালিকা সংরক্ষণ করতে হবে এবং তারপরে লুপ, বুকমার্কিং, প্রেরণ এবং গ্রহণ করা এবং তারপরে তালিকাটি আপডেট করতে হবে (বা যদি আপনি পছন্দ করেন তবে ছোট ডাটাবেস)।

আপনি যদি বুকমার্কের রুটটি চেষ্টা করেন তবে তা আপনার পক্ষে কীভাবে কার্যকর হয়েছিল তা শুনতে আগ্রহী!


এই বিস্তারিত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। আমি শুধু প্রেরণ করছি ... রিসিভ-ইন zpool
jitter

1
সুন্দর স্ক্রিপ্ট অনুসন্ধানের গভীরতা সীমাবদ্ধ করার -d 1জন্য আমি দুটি zfs listনির্দেশই যুক্ত করব (পুল নামের নীচে অনুসন্ধান করার দরকার নেই)। এটি প্রচুর স্ন্যাপশট সহ পুলগুলিতে দীর্ঘ বিলম্ব এড়ায় (যেমন আমার "ব্যাকআপ" পুলটিতে 320000 স্ন্যাপশট রয়েছে এবং zfs list -r -t snapshot backupএটি চালাতে 13 মিনিট সময় নেয় এটি সাথে কেবল 0.06 সেকেন্ড সময় নেয় -d 1)। zfs destroyলুপ জন্য কমান্ড তারপর দরকার -rযাও recursively একই snapname সঙ্গে সব স্ন্যাপশট মুছে ফেলতে পারেন।
ক্যাস

5

ব্যক্তিগতভাবে, আমি নিজেকে zvols একটি তালিকা করতে হবে, ডেটাসেট ইত্যাদি দূরবর্তী সার্ভারে উপর না স্ন্যাপশট আপ-টু-ডেট আছে, এবং তারপর সেই স্ন্যাপশট সঙ্গে আপ টু ডেট আনতে zfs send, এমনকি যদি এই সময় সাপেক্ষ এবং অনেক ব্যবহার ব্যান্ডউইথ এর।

তারপরে আমি তখন zfs sendথেকে কেবল ব্যবহার চালিয়ে যেতে পারতাম এবং আমার নিজের সিঙ্ক্রোনাইজেশন কোডটি লিখে চাকাটি পুনরায় উদ্ভাবন করতে হবে না। rsyncপুরানো ফাইল zfs sendসিস্টেমগুলির জন্য দুর্দান্ত তবে জেডএফএসের পক্ষে এটি আরও ভাল - এটি ঠিক জানেন যে স্ন্যাপশটে কোন ব্লকগুলি পরিবর্তন হয়েছে এবং কেবল সেগুলি প্রেরণ করে, যখন আরএসসিএনকে স্থানীয় এবং দূরবর্তী সার্ভারগুলির মধ্যে পৃথক ফাইল এবং / অথবা টাইমস্ট্যাম্পগুলির তুলনা করতে হয়। btrfs sendবিটিআরএফএস পুলের ক্ষেত্রে একই প্রযোজ্য ।

যদি আপনার কাছে কেবলমাত্র অল্প সংখ্যক স্ন্যাপশট থাকে যা আপ-টু ডেট নিয়ে আসে, এটি ম্যানুয়ালি করা যেতে পারে। অন্যথায় এটি স্বয়ংক্রিয়ভাবে করার জন্য, আপনাকে সাম্প্রতিক স্থানীয় স্ন্যাপশট বনাম দূরবর্তী স্ন্যাপশটগুলির একটি তালিকা এবং সংস্করণ এবং তারপরে zfs sendস্থানীয় স্ন্যাপশটগুলির তুলনা করতে একটি স্ক্রিপ্টের দরকার যা রাইমে সার্ভারে পুরানো।

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

আপনি যদি রিমোট সার্ভারের সাথে সুরক্ষিত সংযোগ চান তবে আপনার ব্যবহারের বদলে সত্যিই খুব কম পছন্দ হয়েছে ssh- অথবা সম্ভবত কোনও openvpnকিছু বা ব্যবহারের সাথে একটি টানেল সেট আপ করতে পারেন netcat


জ্রেপ কী ব্যবহার করবেন? bolthole.com/solaris/zrep
এক্সডিজি

হ্যাঁ, এটি কখনও ব্যবহার করা হয়নি। দেখে মনে হচ্ছে এটি একটি ভাল উত্তর দেবে, যদিও কেউ যদি একটু গবেষণা এবং পরীক্ষা করে এটি লিখে রাখেন (তবে এটি একটি ইঙ্গিত)।
ক্যাস

আমি এটি উবুন্টুতে (লিনাক্সে জেডএফএস) পরীক্ষা করেছি এবং এটি গভীরতর ডেটাসেটগুলিতে (ট্যাঙ্ক / কিছু / অন্য কোনও) কাজ করছে না। আমি এই বন্দরটি শেল - লিঙ্কে ব্যবহার করছিলাম । রিকার্সিভ পতাকা export ZREP_R=-Rমোটেও কাজ করে না। :(
এক্সডিজি

1

ফ্রিবিএসডি-তে 'zrepl' দেখুন, যা আপনার জীবনকে এবং যে কেউ এই বিষয়টিকে সহজতর করে তুলতে পারে। এটি কিছু দিন আগে অটোয়ার বিএসডিসিএন ২০১৮ চলাকালীন উপস্থাপিত হয়েছিল। এটি আশাব্যঞ্জক বলে মনে হচ্ছে এবং এটি আপনার সমস্যার সমাধান হতে পারে



প্রশ্নে প্রশ্নটি হল: "আমি কীভাবে একটি সিঙ্ক্রোনাইজিং টাস্ক সেটআপ করব যাতে রিমোট পুলের জেডভোলস এবং ডেটাসেটগুলি (তাদের স্ন্যাপশট সহ) স্থানীয় জেভোলস, ডেটাসেট এবং স্ন্যাপশটের সাথে সমন্বয় করতে পারে?"
জেফ শ্যাচলার

0

জ্রেপ হ'ল একটি সর্বোত্তম এক সমাধান, এবং কেবল সরল এসএসএইচ স্থানান্তরের চেয়ে দ্রুত স্থানান্তর কীভাবে পাবেন সে সম্পর্কে ডকুমেন্টেশন + হুক রয়েছে

https://github.com/bolthole/zrep

এটি ক্রসপ্ল্যাটফর্ম: লিনাক্স, ফ্রিবিএসডি এবং সোলারিস / ইলুমোসে সমর্থিত



1
প্রশ্নে প্রশ্নটি হল: "আমি কীভাবে একটি সিঙ্ক্রোনাইজিং টাস্ক সেটআপ করব যাতে রিমোট পুলের জেডভোলস এবং ডেটাসেটগুলি (তাদের স্ন্যাপশট সহ) স্থানীয় জেভোলস, ডেটাসেট এবং স্ন্যাপশটের সাথে সমন্বয় করতে পারে?"
জেফ শ্যাচলার

জেফ, আপনি কি পরামর্শ দিচ্ছেন যে সেরা "উত্তর" হ'ল কেবল জ্রেপকে একটি রেফারেন্স দেওয়ার পরিবর্তে জ্রেপ ডকুমেন্টেশন থেকে কাট-এন-পেস্ট বিট হবে?
ফিলিপ ব্রাউন

1
আমি জানি না সেরা উত্তরটি কী হবে তবে সফ্টওয়্যারটির একটি লিঙ্ক সমাধান নয়। এটি ইতিমধ্যে উল্লেখ করা হয়েছে, আসলে। প্রশ্নটি জিজ্ঞাসা করে: "আমি কীভাবে একটি সিঙ্ক্রোনাইজিং টাস্ক সেটআপ করব যাতে রিমোট পুলের জভোলস এবং ডেটাসেটগুলি (তাদের স্ন্যাপশট সহ) স্থানীয় জেভোলস, ডেটাসেট এবং স্ন্যাপশটের সাথে সমন্বয় করতে পারে?"
জেফ শ্যাচলার

হ্যাঁ প্রশ্ন। যাইহোক, ভাল কাজটি সম্পাদন করতে এখানে একটি ওয়েবপৃষ্ঠায় সামান্য লেখার চেয়ে অনেক বেশি প্রয়োজন। এজন্য zrep হ'ল 2000 লাইনের শেলস্ক্রিপ্ট। এমনকি যদি আসল সমস্যাটির প্রয়োজন হয় না এমন সমস্ত অংশ সরিয়ে ফেলা হয়, তবে এটি করার জন্য এখনও কয়েক শতাধিক লিপি স্ক্রিপ্টের প্রয়োজন হবে।
ফিলিপ ব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.