আমি কীভাবে একটি সার্ভার থেকে অন্য সার্ভারে একটি রেডিস ডাটাবেস স্থানান্তর করব?


179

আমার কাছে বর্তমানে একটি লাইভ রেডিস সার্ভার মেঘের দৃষ্টান্তে চলছে এবং আমি এই রেডিস সার্ভারটিকে একটি নতুন মেঘের উদাহরণে স্থানান্তর করতে চাই এবং সেই দৃষ্টান্তটি আমার নতুন রেডিস সার্ভার হিসাবে ব্যবহার করতে চাই। এটি মাইএসকিউএল হলে আমি পুরানো সার্ভার থেকে ডিবি রফতানি করে নতুন সার্ভারে আমদানি করতাম। রেডিস দিয়ে আমার এটি কীভাবে করা উচিত?

PS: আমি প্রতিরূপ সেট আপ করতে চাই না। আমি রেডিস সার্ভারটি সম্পূর্ণ নতুনভাবে ইনস্টল করতে চাই।


5
কয়েক বছর পরে ... বিভিন্ন রেডিস সম্পর্কিত বিষয়গুলির সাথে কাজ করার পরে, আমি টম ক্লার্কসনের দাস দৃষ্টান্ত স্থাপনের পদ্ধতির সাথে কাজ করার পরামর্শ দিয়েছিলাম, এটি মাস্টারের সাথে সিঙ্ক করতে এবং তারপরে দাসকে মাস্টার হিসাবে উন্নীত করে। আমি গৃহীত উত্তরের তুলনায় এটি অনেক কম সংক্ষিপ্ত সময়ের কারণ ঘটবে, বিশেষত যদি আপনি বেশ কয়েকটি জিবি রেডিস ডেটা নিয়ে কাজ করে থাকেন। যদি আপনি এই মিশ্রণটিতে একটি রেডিস সেন্ডিনেল ফেলে দিতে পারেন তবে আপনি প্রায় শূন্য ডাউনটাইম স্থানান্তর করতে পারেন।
এরজব

আমার কাছে একটি রিমোট রেডিস সার্ভার রয়েছে এবং এটি স্থানীয়ভাবে চলমান রেডিস সার্ভারে এর ডেটা অনুলিপি করতে চাই ... ডাম্প.আরডিবি ব্যবহার করা কঠিন হতে পারে কারণ আমাকে সেই ডেটাটি নেটওয়ার্কের মধ্যে নিয়ে যেতে হবে ..
আলেকজান্ডার মিলস

উত্তর:


110

চলমান BGSAVEবা SAVEকমান্ড লাইন থেকে ডাম্প.আরডিবিতে ডাটাবেসের একটি স্ন্যাপশট সংরক্ষণ করুন । এটি আপনার redis সার্ভারের মতো একই ফোল্ডারে ডাম্প.আরডিবি নামের একটি ফাইল তৈরি করবে। সমস্ত সার্ভার কমান্ডের একটি তালিকা দেখুন ।

আপনি যে স্থানান্তর করতে চান সেই অন্যান্য redis সার্ভারে এই ডাম্প.আরডিবি অনুলিপি করুন। যখন redis শুরু হয়, এটি থেকে ডাটাবেস আরম্ভ করার জন্য এই ফাইলটি সন্ধান করে।


16
এটি আমার কাছে দুটি জিনিস অনুমান করে চলেছে: সংরক্ষণ আদেশটি তার ডাম্পটি কোথায় ফেলেছে? রেডিস একটি স্টার্ট আপ লোড করার জন্য "ডাম্প.আরডিবি" ফাইলটি কোথায় খুঁজবে? আমার রেডিস কনফিগারেশনে ডিবিফিলনামটি /var/db/redis/redis_state.rdb তে সেট করা আছে ... আমি "ডাম্প.আরডিবি" এর জায়গায় এই ফাইলনামটি ব্যবহার করি?
মোজো

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

9
আপনি যদি এওএফ লগিং (redis.conf এ appendonly = yes) ব্যবহার করেন noতবে রেডিস সার্ভারটি শুরু করার আগে এটি সেট করুন - অন্যথায় এটি নতুন ডেটা সেট লোড করবে না। একবার ডেটা সেট মেমোরিতে লোড হয়ে গেলে, মেমোরিতে ( config set appendonly yes) এবং কনফিগার ফাইলে উভয়ই এটি আবার চালু করুন।
ম্যাথু রাতজলফ

5
উবুন্টু তারিখে, Redis conf ফাইলে পরিবর্তন সংরক্ষণ করা হয় /etc/redis/redis.conf, এবং আপনি এটি যেখানে আপনার এটা মাধ্যমে অনুসন্ধান করতে পারেন .rdbফাইল আছেন: cat /etc/redis/redis.conf | grep "rdb"। আমার ক্ষেত্রে এটি/var/lib/redis
হারমান স্কাফ

5
redis-cli config get dirআপনি যে ডিরেক্টরিতে .rdbসঞ্চিত তা আপনাকে দেবে।
কিশোর পওয়ার

252

প্রথমে সার্ভার এ-তে একটি ডাম্প তৈরি করুন

A$ redis-cli
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis/"
127.0.0.1:6379> SAVE
OK

এটি dump.rdbসম্পূর্ণরূপে আপ-টু-ডেট রয়েছে এবং এটি কোথায় সঞ্চিত তা আমাদের দেখায় ( /var/lib/redis/dump.rdbএই ক্ষেত্রে)। dump.rdbপর্যায়ক্রমে ডিস্কে স্বয়ংক্রিয়ভাবে লেখা হয়।

পরবর্তী, এটি সার্ভার বিতে অনুলিপি করুন:

A$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb

বিতে রেডিস সার্ভারটি বন্ধ করুন, ডাম্প.আরডিবি অনুলিপি করুন (অনুমতিগুলি আগের মতো রয়েছে তা নিশ্চিত করে), তারপরে শুরু করুন।

B$ sudo service redis-server stop
B$ sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb
B$ sudo chown redis: /var/lib/redis/dump.rdb
B$ sudo service redis-server start

বি তে রেডিসের সংস্করণ অবশ্যই এ এর ​​চেয়ে বড় বা সমান হতে পারে, বা আপনি সামঞ্জস্যতার সমস্যাগুলি হিট করতে পারেন ।


32
গৃহীত উত্তরের চেয়ে উপায় ভাল, সমস্ত বিবরণ আছে।
বিটিকে

1
এটি আমার অনেক সময় সাশ্রয় করে দেখিয়েছে যে রেডিসে আমদানি করা রেডিস ফোল্ডারে ফেলে দেওয়া হয়
রনিকনক্সভিল

7
ম্যাকের উপর রেডিস ব্যাকআপটি / ইউএসআর / লোকাল / ভার / ডিবি / রেডিস / এ সঞ্চয় করা হয়
থমসন

3
ধন্যবাদ ডোনভান থমসন (আমি ম্যাকের উপর রেডিস ইনস্টল করার জন্য হোমব্রু ব্যবহার করেছি) ... আপনার পথটি খুঁজে পাওয়ার আরও সাধারণ উপায় হ'ল রেডিস কমান্ড ব্যবহার করা CONFIG GET dir, যা ফিরে এসেছে"/usr/local/var/db/redis"
জুলিয়ান

এবং এই প্রক্রিয়া চলাকালীন যে লেখাগুলি এ-তে গিয়েছিল তাদের সম্পর্কে কেউ কী করবে?
মাইক গ্রাফ

34

আপনার যদি সার্ভারগুলির মধ্যে সংযোগ থাকে তবে স্লেভ নোড হিসাবে নতুন দৃষ্টান্তের সাথে প্রতিলিপিটি সেট করা (যা তুচ্ছ, এসকিউএলের সাথে পৃথক নয়) সেট করা ভাল - তবে আপনি নতুন নোডটিকে একটি একক কমান্ডের সাথে মাস্টার করতে এবং এর সাহায্যে পদক্ষেপটি করতে পারেন can শূন্য ডাউনটাইম।


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

আমি মনে করি INFO কমান্ড আপনাকে প্রস্তুত করবে কখন এটি প্রস্তুত। তবে, এটি খুব বেশি গুরুত্ব দেয় না - যেহেতু এটি এককালীন অনুলিপিটির পরিবর্তে প্রতিলিপি, তাই আপনি পুরনো নোডটি স্যুইচ করার আগে উভয় নোডকে যতক্ষণ চান ঠিক রেখে দিতে পারেন। স্লাভিওফ নন হ'ল নতুন নোডকে মাস্টার হিসাবে প্রচার করার আদেশ।
টম ক্লার্কসন

9
দুর্দান্ত সমাধানের মতো শোনাচ্ছে - কিছু কমান্ড উদাহরণ দিয়ে চমৎকার হবে!
নটোল

17

বিশ্বাস করুন বা না করুন, আমি কেবল এটির জন্য নিবন্ধ তৈরি করেছি:

http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another

কিন্তু মাস্টার এবং ক্রীতদাসের মধ্যে ডেটা স্থানান্তর সম্পূর্ণ হওয়ার পরে আমি কীভাবে জানব? আপনি INFO কমান্ড ব্যবহার করতে পারেন।


কৌতুকজনকভাবে, আমি যদি সেই পৃষ্ঠাটি দেখতে যাই তবে আমি একটি পুনরায় ত্রুটি পেয়েছি আহাহাহা:Warning: Redis::connect(): connect() failed: Connection refused in /www/sites/redis4you.com/include/config.php on line 16 Server error, try again later
ফ্ল্যাগ 19

16

SLAVEOF কমান্ডটি ব্যবহার করে ডেটা স্থানান্তর করাও সম্ভব:

SLAVEOF old_instance_name old_instance_port

আপনি কীগুলি সাথে পেয়েছেন তা পরীক্ষা করুন KEYS *। আপনি অন্য কোনও উপায়েও নতুন দৃষ্টান্তটি পরীক্ষা করতে পারেন, এবং আপনি যখন কাজটি সম্পন্ন করেছেন কেবল তখন এর অনুলিপি ঘুরিয়ে দিন:

SLAVEOF NO ONE

এটি সবচেয়ে বেদনাবিহীন পদ্ধতির!
noooooooob

13

আজকাল আপনি মিগ্রেটও ব্যবহার করতে পারেন, ২.6 থেকে পাওয়া যায়।

আমাকে এটি ব্যবহার করতে হয়েছিল যেহেতু আমি কেবল একটি ডাটাবেসে ডেটা সরাতে চেয়েছিলাম এবং সেগুলি সবই নয়। দুটি রেডিস উদাহরণ দুটি পৃথক মেশিনে থাকে।

আপনি যদি রেডিস -১ থেকে সরাসরি রেডিস -২ এর সাথে সংযোগ স্থাপন করতে না পারেন তবে ssh পোর্ট বাইন্ডিং ব্যবহার করুন:

 ssh user@redis-2.foo.com -L 1234:127.0.0.1:6379

KEYS ব্যবহার করে সমস্ত কীগুলি লুপ করার জন্য একটি ছোট স্ক্রিপ্ট এবং প্রতিটি কী মাইগ্রেট করুন। এটি পার্ল, তবে আশা করি আপনি ধারণাটি পাবেন:

 foreach ( $redis_from->keys('*') ) {

    $redis_from->migrate(
        $destination{host},    # localhost in my example
        $destination{port},    # 1234
        $_,                    # The key
        $destination{db},
        $destination{timeout} 
    );
 }

দেখা আরও তথ্যের জন্য http://redis.io/commands/migrate


পাসওয়ার্ডের সাথে মাইগ্রেট করতে চান এমন রিমোট রেডিস কী?
noooooooob

4

রেডিস ডেটা আমদানি করার সময় ডাম্প.আরডিবি কোথায় রাখতে হবে তা পরীক্ষা করতে,

ক্লায়েন্ট শুরু করুন

$redis-cli

এবং

তারপর

redis 127.0.0.1:6379> CONFIG GET *
 1) "dir"
 2) "/Users/Admin"

এখানে / ব্যবহারকারী / অ্যাডমিন হ'ল ডাম্প.আরডিবি এর অবস্থান যা সার্ভার থেকে পড়ে এবং তাই এটি ফাইলটি প্রতিস্থাপন করতে হবে।


2

আপনি আরডিডি ব্যবহার করতে পারেন

এটি চলমান রেডিস সার্ভারটি ডাম্প ও পুনরুদ্ধার করতে পারে এবং ফিল্টার / ম্যাচ / নাম পরিবর্তনের ডাম্প কীগুলিকে অনুমতি দেয়


2

শূন্য-ডাউনটাইম মাইগ্রেশনের মূল উপাদানগুলি হ'ল:

  • প্রতিলিপি ( http://redis.io/commands/SLAVEOF) )
  • অ্যাপ্লিকেশন স্যুইচিংয়ের সময় দাসে লেখার সম্ভাবনা ( CONFIG SET slave-read-only no)

সংক্ষেপে:

  1. উত্স redis (আপনার ডেটা সহ) এর গোলাম হিসাবে একটি লক্ষ্য redis (খালি) সেটআপ করুন
  2. প্রতিরূপ সমাপ্তির জন্য অপেক্ষা করুন
  3. অনুমতি একটি লক্ষ্য redis লিখুন (যা বর্তমানে দাস)
  4. আপনার অ্যাপ্লিকেশনগুলিকে একটি লক্ষ্য redis এ স্যুইচ করুন
  5. মাস্টার থেকে ক্রীতদাসে সমাপ্ত ডেটাস্ট্রিমের জন্য অপেক্ষা করুন
  6. মাস্টার থেকে গোলামে টার্গেট পুনরায় পরিণত করুন

অতিরিক্তভাবে রেডিসে বিকল্প রয়েছে যা একটি লক্ষ্য পুনরায় বিচ্ছিন্ন করার পরে লেখাগুলি গ্রহণ করতে পুনরায় কোনও উত্সকে অক্ষম করতে দেয়:

  • min-slaves-to-write
  • min-slaves-max-lag

এই বিষয়টি কভার করে

রেডিসল্যাবস দল থেকে খুব ভাল ব্যাখ্যা https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration

এবং এমনকি স্থানান্তরের জন্য তাদের ইন্টারেক্টিভ সরঞ্জাম: https://github.com/RedisLabs/redis-migrate


1

আমিও একই জিনিসটি করতে চাই: একটি ডিবি ডিগ্রহীকরণ স্ট্যান্ড্যালোন রেডিস উদাহরণ থেকে অন্য রেডিস উদাহরণগুলিতে (রেডিস সেন্ডিনেল)।

যেহেতু ডেটা সমালোচনাযোগ্য নয় (সেশন ডেটা), তাই আমি https://github.com/yaauie/redis-copy ব্যবহার করে দেখব।


1

রেডিস ডেটা রফতানি / ডাম্প ফাইল তৈরি করার সহজ উপায়টি (ডাম্প ফাইল তৈরি করা) হ'ল স্লেভফ ফ্ল্যাগের সাহায্যে কমান্ড লাইনের মাধ্যমে একটি সার্ভার শুরু করা এবং অনুসরণের সাথে সরাসরি রেপ্লিকা তৈরি করা (উত্সটি ধরে নিলে রেডিস 79৩79৯-এ 1.2.79.৩.৪ রয়েছে):

/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379

আমার লিনাক্স মেশিনে একটি রেডিস চলছে যা আমার অ্যাক্সেস করেছে। আমার উইন্ডোজ মেশিনে একটি রেডিস রয়েছে। এই জাতীয় সংমিশ্রনের জন্য ডেটা অনুলিপি করা কি সম্ভব?
কামরান শহীদ

1
আমি বিশ্বাস করি আপনি উভয়ই একই সংস্করণের সাথে থাকলে
মাওজ জাডোক

হ্যাঁ আমারও সংস্করণ পরীক্ষা করা দরকার। তবে উইন্ডোজ রিলিজ সংস্করণটি আমি জানি যতটা গত 3.0 এর উপরে নয়
কামরান শহীদ

0

আমি সবেমাত্র এনএমপি এবং গিথুব-এ একটি কমান্ড লাইন ইন্টারফেস ইউটিলিটি প্রকাশ করেছি যা আপনাকে একটি রেডিস ডাটাবেস থেকে অন্য রেডিয়াসে একটি নির্দিষ্ট প্যাটার্ন (এমনকি *) এর সাথে মেলে এমন কীগুলি অনুলিপি করতে দেয়।

আপনি এখানে ইউটিলিটিটি খুঁজে পেতে পারেন:

https://www.npmjs.com/package/redis-utils-cli


-2

redis- ডাম্প শেষ পর্যন্ত আমার জন্য কাজ করেছে। এর ডকুমেন্টেশন একটি উদাহরণ দেয় যা কীভাবে রেডিস ডাটাবেস ডাম্প করে এবং অন্য একটিতে ডেটা .োকাতে হয়।

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