MISCONF রেডিস আরডিবি স্ন্যাপশটগুলি সংরক্ষণ করার জন্য কনফিগার করা হয়েছে


366

রেডিসকে লেখার সময় ( SET foo bar) আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি:

MISCONF রেডিস আরডিবি স্ন্যাপশটগুলি সংরক্ষণ করার জন্য কনফিগার করা হয়েছে তবে বর্তমানে এটি ডিস্কে টিকতে সক্ষম নয়। ডেটা সেটটি সংশোধন করতে পারে এমন কমান্ডগুলি অক্ষম। ত্রুটি সম্পর্কে বিশদ জানতে দয়া করে রেডিস লগগুলি চেক করুন।

মূলত আমি বুঝতে পারি যে সমস্যাটি হ'ল রেডিস ডিস্কে ডেটা সংরক্ষণ করতে সক্ষম নয়, তবে কীভাবে সমস্যা থেকে মুক্তি পাবেন তার কোনও ধারণা নেই।

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


আপনি কি এই সমস্যাটি সমাধান করতে পেরেছিলেন? যদি হ্যাঁ, আপনি দয়া করে পদক্ষেপে সহায়তা করতে পারেন। কারণ আরডিবি ফাইলটি অন্য কোথাও রাখলে এটি আমার সমাধান হবে না। আমি মনে করি আমি এখানে কিছু মিস করছি
অঙ্কুর

4
এই ত্রুটিটি এমন একটি ডিরেক্টরিতে রেডিস সার্ভার শুরু করার কারণে ঘটেছিল যেখানে রেডিসের অনুমতি নেই। আমি সমস্যাটি ঠিক করার পরে ডিফল্ট সেটিংসে ফিরে যাওয়ার পরামর্শ দিই: এই সমস্যার সমাধানের জন্য উত্তর দেখুন ।
গোবিন্দ রায়

: থেকে গোবিন্দ রাই-এর উত্তর উপরন্তু stackoverflow.com/a/47880440/5649620
Vyshnav রমেশ ত্রিসূর

@ গোবিন্দরাই আমি ইতিমধ্যে গোষ্ঠী ও মালিক উভয়কেই পরিবর্তন করে পুনরায় অনুমতি প্রদান করেছি redis, তবে সহায়তা করে না!
wdetac 15

উত্তর:


184

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

ব্যবহার করে redis-cli, আপনি এই জাতীয় কিছু করতে পারেন:

CONFIG SET dir /tmp/some/directory/other/than/var
CONFIG SET dbfilename temp.rdb

এর পরে, আপনি ফাইলটি BGSAVEডেটা লিখিত হবে কিনা তা নিশ্চিত করার জন্য একটি কমান্ড কার্যকর করতে চাইতে পারেন rdb। নিশ্চিত করুন যে আপনি যখন মৃত্যুদন্ড কার্যকর করবেন INFO persistence, bgsave_in_progressইতিমধ্যে 0এবং rdb_last_bgsave_statusআছেন ok। এর পরে, আপনি এখন উত্পন্ন rdbফাইলটি নিরাপদে কোথাও ব্যাক আপ শুরু করতে পারেন ।


7
rdb_bgsave_in_pogress: 0 জেদ অনুযায়ী
থানিক্কাল

কিছু কারণে যখন আমি কোনও কনফিগার সেট কমান্ড চেষ্টা করি, এটি চিরকালের জন্য লোড করা চালিয়ে যায়।
বাশার আবদুল্লাহ

5
সেই দুর্ভাগা বেশী মুহূর্তে উইন্ডোজ, আমার প্রতি, আর থাম MSOpenTech সংস্করণ ব্যবহার করছেন জন্য, আপনাকে নিম্নোক্ত শৈলী সেট ডিরেক্টরির পাথ করতে হবে: dir C:/Temp/। এটি কাজ করে কিনা তা যাচাই করতে একটি ব্লগস্যাভ করুন ..
জন পি

@ জন পি, এটি করা দরকার ছিল। ধন্যবাদ!
স্যাম

2
127.0.0.1:6379> কনফিগ সেট dir / মূল / সরঞ্জাম (ত্রুটি) ERR ডিরেক্টরি পরিবর্তন হচ্ছে: অনুমতি প্রত্যাখ্যান করা হয়েছে
গাঙ্ক

316

ব্যবহার করে redis-cli, আপনি এটি স্ন্যাপশটটি সংরক্ষণের চেষ্টা বন্ধ করতে পারেন:

config set stop-writes-on-bgsave-error no

এটি একটি দ্রুত কাজ, তবে আপনি যে ডেটাটির জন্য এটি ব্যবহার করছেন সে সম্পর্কে যদি আপনি যত্নশীল হন তবে আপনারা কেন Bgsave প্রথম স্থানে ব্যর্থ হয়েছেন তা নিশ্চিত করে পরীক্ষা করা উচিত।


21
এটি একটি দ্রুত কর্মক্ষেত্র তবে আপনারা নিশ্চিত করতে পারেন যে ব্লগস্যাভ কেন প্রথম স্থানে ব্যর্থ হয়েছিল
সিং

7
আপনি যদি প্রাথমিকভাবে ক্যাচিং এবং সেশনের জন্য রেডিস ব্যবহার করেন তবে এটি অবশ্যই আবশ্যক।
জিম

1
এটি কি বিপজ্জনক নয়? উদাহরণস্বরূপ, নোডিববি রেডিসকে ডেটা স্টোর হিসাবে ব্যবহার করে।
কোডেকবয়

2
@ লাভটোকোড কনফিগারেশন সেট-স্টপ-রাইটিং-অন-ব্লগসভে-ত্রুটি হ্যাঁ
ফিল

4
আমি যখনই সার্ভার পুনরায় চালু করি তখন আবার একই সমস্যাটি পেলাম। তারপরে আমাকে আবার সেট করতে হবে। আমি কীভাবে এটি স্থায়ী করতে পারি?
জিয়া কামার

63

কম মেমরির কারণে bgsave প্রক্রিয়া চলাকালীন ত্রুটি থাকতে পারে। এটি চেষ্টা করুন (পুনরায় ব্যাকগ্রাউন্ড থেকে এফএকিউ সংরক্ষণ করুন)

echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

5
লিঙ্ক: redis.io/topics/faq এর জন্য অনুসন্ধান করুন: " লিনাক্সের অধীনে কাঁটাচামচ () ত্রুটির সাথে ব্যাকগ্রাউন্ড সংরক্ষণ ব্যর্থ হচ্ছে যদিও আমি অনেক নিখরচায় র‌্যামও পেয়েছি ! "
ব্রুনো পেরেস

49

বিজিএসএভে ব্যর্থ হওয়ার কারণে এই ত্রুটি ঘটে occurs বিজিএসএভিয়ের সময়, রেডিস ডিস্কের ডেটা সংরক্ষণ করতে একটি শিশু প্রক্রিয়া জোর করে। যদিও বিজিএসএইভি ব্যর্থতার সঠিক কারণটি লগ (সাধারণত /var/log/redis/redis-server.logলিনাক্স মেশিনে) থেকে পরীক্ষা করা যায় তবে অনেক সময় বিজিএভিএ ব্যর্থ হয় কারণ কাঁটাচামচ স্মৃতি বরাদ্দ করতে পারে না। OS এর দ্বন্দ্বপূর্ণ অপ্টিমাইজেশনের কারণে অনেক সময় কাঁটাচামচ মেমরি বরাদ্দ করতে ব্যর্থ হয় (যদিও মেশিনে পর্যাপ্ত র‍্যাম উপলব্ধ রয়েছে)।

যেমনটি রেডিস এফএকিউ থেকে পড়া যায় :

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

ওভারকমিট_মেমোরি 1-এ সেট করে লিনাক্সকে আরও আশাবাদী বরাদ্দ ফ্যাশনে কাঁটাচামচটি শিথিল করতে এবং সঞ্চালন করতে বলে, এবং এটিই রেডিসের জন্য আপনি চান indeed

ওএস ডিস্কে লেখার জন্য যেমনটি মনে করে রেডিসের তেমন মেমরির প্রয়োজন নেই, তাই প্রাক-সক্রিয়ভাবে কাঁটাচামচটি ব্যর্থ হতে পারে।

এটি সমাধান করার জন্য, আপনি:

সংশোধন করুন /etc/sysctl.confএবং যুক্ত করুন:

vm.overcommit_memory=1

তারপরে সিসেক্টলটি পুনরায় আরম্ভ করুন:

ফ্রিবিএসডি তে:

sudo /etc/rc.d/sysctl reload

লিনাক্সে:

sudo sysctl -p /etc/sysctl.conf

ফলাফল systemctl status redisপ্রকাশিত হয়েছে যে একটি সতর্কতা রয়েছে যা ঠিক overcommit_memory=0সেটিংটি পরিবর্তন করার পরামর্শ দিয়েছে । এটি আমার জন্য সমস্যার সমাধান করে দেয়।
বিমূর্ত আলগোরিদিম

এটি সমস্যাটি সঠিকভাবে সমাধান করেছে এবং এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
ডিএসইনারজি

সুতরাং টিএলডিআর হবে ডিফল্ট সেটিংস সহ, যদি রেডিস যদি 10 জিবি র‌্যাম ব্যবহার করে থাকে তবে এই শিশু প্রক্রিয়াটি কার্যকর করতে সক্ষম হওয়ার জন্য আপনার 10 জিবি র‌্যাম মুক্ত থাকতে হবে?
ড্যান হেস্টিংস

@ ড্যানহাস্টিংস - হ্যাঁ এবং ওভারকমিট_মেমোরি 1 এ সেট করা এই প্রয়োজনীয়তাটি শিথিল করে।
ভিন্দি 5'19

26

আপনার redis সার্ভার পুনরায় চালু করুন।

  • MacOS (চোলাই) : brew services restart redis
  • লিনাক্স: sudo service redis restart /sudo systemctl restart redis
  • উইন্ডোজ: Windows + R-> প্রকার services.msc, Enter-> এর জন্য অনুসন্ধান করুন Redisতারপরে ক্লিক করুন restart

ব্রিউ ( brew upgrade) এর সাথে পুনরায় উন্নতি করার পরে আমার ব্যক্তিগতভাবে এই সমস্যাটি ছিল । ল্যাপটপ রিবুট করার পরে, এটি অবিলম্বে কাজ করে।


যে কেউ এই পড়া হয় যদি আমি আপগ্রেড সঙ্গে কাজ করতে ভাল কিন্তু কিছুই যেমন Homebrew সঙ্গে সমস্যা ছিল: আমি শুধু সঙ্গে পরিষেবা শুরু করা প্রয়োজন sudo: brew services stop redis; sudo brew services start redis
bfontaine

24

আপনি যদি একটি লিনাক্স মেশিনে কাজ করছেন তবে ডাটাবেসের ফাইল এবং ফোল্ডারের অনুমতিগুলিও যাচাই করে নিন।

ডিবি এবং এটির পথটি এর মাধ্যমে পাওয়া যেতে পারে:

ইন redis-cli:

কনফিগ পেতে ড

কনফিগ পেতে dbfilename

এবং কমান্ডলাইনে ls -l। ডিরেক্টরিটির অনুমতিগুলি 755 হওয়া উচিত এবং ফাইলগুলির জন্য সেগুলি 644 হওয়া উচিত । এছাড়াও, সাধারণত redis- সার্ভার ব্যবহারকারী হিসাবে কার্যকর করে redis, তাই redisকার্যকর করে ফোল্ডারের মালিককে ব্যবহারকারীকে দেওয়া ভাল sudo chown -R redis:redis /path/to/rdb/folder। এটি এখানে উত্তরে বিস্তারিতভাবে বর্ণনা করা হয়েছে


তাদের কী অনুমতি থাকতে হবে?
স্টিফেন

এটি আমার পক্ষে কাজ করেছে। ধন্যবাদ!
লর্ডহুইজি

19

সমস্যাটি যাচাই করার জন্য সবাইকে ধন্যবাদ, স্পষ্টতই ত্রুটিটি তৈরি হয়েছিল bgsave

আমার জন্য, config set stop-writes-on-bgsave-error noশেল টাইপ করা এবং পুনরায় চালু করা সমস্যার সমাধান করেছে।


82
এটি "সমস্যার সমাধান করেনি", এটি কেবল এটি উপেক্ষা করেছে।
মহিষ

পরিষেবাদি.এমএসসি তে রেডিসার সার্ভার পুনরায় চালু করা আমার পক্ষে কাজ করেছে।
ViPuL5

আমি যখনই সার্ভার পুনরায় চালু করি তখন আবার একই সমস্যাটি পেলাম। তারপরে আমাকে আবার সেট করতে হবে। আমি কীভাবে এটি স্থায়ী করতে পারি?
জিয়া কামার

@ জিয়াউকমার, আপনি সম্পত্তিটি redis.conf এ স্থায়ীভাবে সেট করতে পারেন, যা সম্ভবত সম্ভবত /etc/redis/redis.conf- এ থাকতে পারে, "স্টপ-রাইটস-অন-ব্লগস্যাভ-ত্রুটি নং" সেট করুন
গৌরব

আইএমও অবশ্যই সমাধান নয়। আপনি কেবল রেডিসকে এই ত্রুটিগুলি লগ না করার জন্য বলছেন। তবে ত্রুটিগুলি এখনও রয়েছে ...
এরোলিন

17

রেডিস সার্ভারটি একটি ডিরেক্টরিতে শুরু করুন যেখানে রেডিসের লেখার অনুমতি রয়েছে

উপরের উত্তরগুলি অবশ্যই আপনার সমস্যার সমাধান করবে, তবে এখানে আসলে কী চলছে:

rdb.dumpফাইল সঞ্চয় করার জন্য ডিফল্ট অবস্থান হ'ল ./(বর্তমান ডিরেক্টরি চিহ্নিত করা)। আপনি এটি আপনার redis.confফাইলটিতে যাচাই করতে পারেন । অতএব, আপনি redis সার্ভারটি যেখান থেকে শুরু করবেন সেই ডিরেক্টরিটিই একটি dump.rdbফাইল তৈরি এবং আপডেট করা হবে।

দেখে মনে হচ্ছে আপনি রেডিস সার্ভারটি কোনও ডিরেক্টরিতে চালানো শুরু করেছেন যেখানে রেডিসের কাছে dump.rdbফাইল তৈরির সঠিক অনুমতি নেই ।

বিষয়টিকে আরও খারাপ করার জন্য, রেডিস সম্ভবত ডেটা যথাযথ সংরক্ষণ নিশ্চিত করার জন্য আরডিবি ফাইল তৈরি করতে সক্ষম না হওয়া পর্যন্ত আপনাকে সার্ভারটি বন্ধ করতে দেয় না।

এই সমস্যাটি সমাধান করার জন্য, আপনাকে অবশ্যই সক্রিয় পুনরায় ক্লায়েন্ট পরিবেশে যেতে redis-cliহবে এবং dirকীটি আপডেট করতে হবে এবং এর মানটি আপনার প্রকল্প ফোল্ডারে বা কোনও ফোল্ডারে সেট করতে হবে যেখানে নন-রুটের সংরক্ষণের অনুমতি রয়েছে। তারপরে ফাইলটি BGSAVEতৈরি করতে অনুরোধ করুন rundump.rdb

CONFIG SET dir "/hardcoded/path/to/your/project/folder"
BGSAVE

(এখন, আপনি যদি প্রয়োজন ডিরেক্টরির মধ্যে dump.rdb ফাইল সংরক্ষণ করতে যাতে আপনি সম্ভবত সার্ভার শুরু হয়, তাহলে আপনি ডিরেক্টরির জন্য অনুমতি পরিবর্তন যাতে redis এটা লিখতে পারেন প্রয়োজন হবে। তুমি কিভাবে যে জন্য Stackoverflow অনুসন্ধান করতে পারেন )।

আপনার এখন রেডিস সার্ভারটি বন্ধ করতে সক্ষম হওয়া উচিত। মনে রাখবেন যে আমরা পথটি হার্ডকোড করেছি। Hardcoding খুব কমই একটি ভাল অভ্যাস এবং আমি অত্যন্ত আপনার প্রকল্পের ডিরেক্টরি থেকে redis সার্ভার শুরু এবং পরিবর্তন সুপারিশ dir key back to। / `।

CONFIG SET dir "./"
BGSAVE

এইভাবে যখন আপনাকে অন্য প্রকল্পের জন্য পুনরায় দরকার হয় তখন ডাম্প ফাইলটি আপনার বর্তমান প্রকল্পের ডিরেক্টরিতে তৈরি করা হবে হার্ডকডযুক্ত পথের প্রকল্প ডিরেক্টরিতে নয়।


ডাম্প ফাইলটি যে ডিরেক্টরিতে জমা হবে সেই ডিরেক্টরিটির জন্য আপনি নন-রুট ব্যবহারকারীকে অনুমতি দিয়েছেন তা নিশ্চিত করুন my আমার ক্ষেত্রে আমার এমন একটি ব্যবহারকারী আছে যা redisআমি করি: sudo chown redis:redis /var/lib/redis
রাউন্ডআউটটুসুন

13

আপনি যদি ম্যাকোএস চালাচ্ছেন এবং সম্প্রতি কাতালিনায় আপগ্রেড করেছেন, তবে এই সমস্যাটিরbrew services restart redis পরামর্শ অনুসারে আপনাকে চালনার দরকার হতে পারে ।


12

এই ত্রুটির মুখোমুখি হয়েছিলেন এবং লগ থেকে বের করতে সক্ষম হন যে ডিস্কের স্থান পর্যাপ্ত না হওয়ায় ত্রুটি is আমার ক্ষেত্রে যে সমস্ত ডেটা inোকানো হয়েছিল সেগুলির আর কোনও প্রয়োজন নেই। তাই আমি ফ্লুশল করার চেষ্টা করেছি। যেহেতু redis-rdb-bgsave প্রক্রিয়া চলছে তাই এটি ডেটাও ফ্লাশ করতে দিচ্ছে না। আমি নীচের পদক্ষেপগুলি অনুসরণ করেছি এবং চালিয়ে যেতে সক্ষম হয়েছি।

  1. Redis ক্লায়েন্ট লগইন করুন
  2. সম্পাদন কোন কনফিগ সেট স্টপ লিখেছেন-অন-bgsave-ত্রুটি
  3. সম্পাদন FLUSHALL (ডেটা সংরক্ষণ প্রয়োজন না হয়)
  4. হ্যাঁ, কনফিগার সেট-স্টপ-রাইটিং-অন-ব্লগসভে-ত্রুটি সম্পাদন করুন

প্রক্রিয়া redis-rdb-bgsave উপরের পদক্ষেপের পরে আর চলছিল না।


7

আমি অনুরূপ সমস্যার মুখোমুখি হয়েছিলাম, এর পিছনে মূল কারণ ছিল রেডিসের দ্বারা মেমরি (র‌্যাম) খরচ। আমার ইসি 2 মেশিনটিতে 8 গিগাবাইট র‍্যাম ছিল (ভোগের জন্য 7.4 টি উপলব্ধ)

যখন আমার প্রোগ্রামটি চলছিল তখন র‌্যামের ব্যবহারটি .2.২ গিগাবাইটে চলে গেছে, র‌্যামে খুব কমই M ১০০ এমবি রেখেছিল, এটি সাধারণত MISCONF Redis error ...

আপনি htopকমান্ডটি ব্যবহার করে র‌্যামের ব্যবহার নির্ধারণ করতে পারেন । দেখুন মেম htop কমান্ড চলমান পরে অ্যাট্রিবিউট। যদি এটি উচ্চ ব্যয় দেখায় (যেমন আমার ক্ষেত্রে এটি 7.2 গিগাবাইট / 7.4 গিগাবাইট ছিল) বৃহত্তর মেমরির সাহায্যে উদাহরণটি আপগ্রেড করা ভাল। এই দৃশ্যে ব্যবহার config set stop-writes-on-bgsave-error noকরা সার্ভারের জন্য একটি দুর্যোগ হতে পারে এবং এর ফলে সার্ভারে চলমান অন্যান্য পরিষেবাদি বিঘ্নিত হতে পারে (যদি থাকে)। সুতরাং, কনফিগার কমান্ডটি এড়ানো এবং আপনার রেডিস মেশিন আপগ্রেড করা ভাল ।

এফওয়াইআই: এই কাজটি করতে আপনাকে হ্যাপ ইনস্টল করতে হতে পারে :sudo apt-get install htop

এর আরও একটি সমাধান হ'ল আপনার সিস্টেমে চলমান কিছু র‌্যাম ভারী পরিষেবা হতে পারে, আপনার সার্ভার / মেশিন / ইনস্ট্যান্সে চলমান অন্য পরিষেবাদির জন্য পরীক্ষা করুন এবং এটির প্রয়োজনীয় না হলে এটি বন্ধ করুন। আপনার মেশিন ব্যবহার করে চলমান সমস্ত পরিষেবা পরীক্ষা করতেservice --status-all

এবং কনফিগারেশন কমান্ডটি সরাসরি আটকানো লোকদের জন্য একটি পরামর্শ, দয়া করে কিছুটা পুনরায় অনুসন্ধান করুন এবং এ জাতীয় আদেশ ব্যবহার করার আগে কমপক্ষে ব্যবহারকারীকে সতর্ক করুন। এবং যেমন @ রদ্রিগো তাঁর মন্তব্যে উল্লেখ করেছেন: "ত্রুটিগুলি উপেক্ষা করা মোটেই ভাল লাগে না।"

---হালনাগাদ---

এছাড়াও আপনি কনফিগার করতে পারেন maxmemoryএবং maxmemory-policyযখন মেমরি একটি নির্দিষ্ট সীমাতে পৌঁছেছেন হয় Redis আচরণ সংজ্ঞায়িত করতে। উদাহরণস্বরূপ, আমি যদি 6 গিগাবাইটের মেমরির সীমাটি রাখতে চাই এবং ডিবি থেকে কমপক্ষে সম্প্রতি ব্যবহৃত কীগুলি মুছে ফেলতে চাই যাতে রেডিস মেমের ব্যবহার 6 গিগাবাইটের বেশি না হয়, তবে আমরা এই দুটি পরামিতি সেট করতে পারি (redis.conf বা কনফিগ সেটে) কমান্ড):

maxmemory 6gb
maxmemory-policy allkeys-lru

এই দুটি প্যারামিটারের জন্য আপনি সেট করতে পারেন এমন আরও অনেক মান রয়েছে যা আপনি এখান থেকে পড়তে পারেন: https://redis.io/topics/lru-cache


6

আরও স্থায়ী সমাধান হ'ল 200-250 লাইনের আশেপাশে /etc/redis/redis.conf এ দেখার জন্য আরডিবি বৈশিষ্ট্যগুলির জন্য সেটিংস রয়েছে, যা ২.x দিনগুলিতে পুনরায় redis এর অংশ ছিল না।

লক্ষণীয়ভাবে

dir ./

থেকে পরিবর্তন করা যেতে পারে

dir /home/someuser/redislogfiledirectory

বা আপনি সমস্ত সংরক্ষণের লাইন মন্তব্য করতে পারেন, এবং অধ্যবসায়ের বিষয়ে চিন্তা করবেন না। (/Etc/redis/redis.conf এ মন্তব্যগুলি দেখুন)

এছাড়াও, ভুলবেন না

service redis-server stop
service redis-server start

6

এই উত্তরগুলির মধ্যে সমস্ত কেন rdb সংরক্ষণ ব্যর্থ হয়েছে তা ব্যাখ্যা করে না।


আমার হিসাবে, আমি redis লগ পরীক্ষা করে খুঁজে পেয়েছি:

14975: এম 18 জুন 13: 23: 07.354 # পটভূমি সংরক্ষণ 9 সিগন্যাল দ্বারা সমাপ্ত

টার্মিনালে নিম্নলিখিত কমান্ড চালান:

sudo egrep -i -r 'killed process' /var/log/

এটি প্রদর্শিত:

/var/log/kern.log.1: জুন 18 13:23:07 10-10-88-16 কার্নেল: [28152358.208108] নিহত প্রক্রিয়া 28416 (redis-server) মোট-ভিএম: 7660204 কেবি, আনন-আরএসএস: 2285492 কেবি, ফাইল-আরএসএস: 0kB

হ্যাঁ, ওটাই! এই প্রক্রিয়াটি (redis save rdb) দ্বারা নিহত হয় ঘাতক

বোঝায়:

https://github.com/antirez/redis/issues/1886

লিনাক্স ওওএম ঘাতক দ্বারা কোন প্রক্রিয়াটিকে হত্যা করা হয়েছিল তা সন্ধান করে


3

এফডাব্লুআইডাব্লু, আমি এটিতে ছুটে এসেছি এবং সমাধানটি ছিল কেবলমাত্র বাক্সে একটি সোয়াফিল ফাইল যুক্ত করা। আমি এই পদ্ধতিটি ব্যবহার করেছি: https://www.digitalocean.com/commune/tutorials/how-to-add-swap-on-ubuntu-14-04


সমস্যাটি কীভাবে আপনি মেমরির ওভারফ্লো বুঝতে পেরেছিলেন? আমি একই সমস্যা হতে পারে।
ডারথস্পিডিয়াস

পছন্দ করেছেন যদি আমার অনুমান করতে হয় তবে আমি বলব যে লগগুলিতে কোনও কিছু মেমরি বরাদ্দ করতে সক্ষম না হওয়ায় অভিযোগ করছিল। দুঃখিত আমি আরও সহায়ক হতে পারে না।
রায়ান অ্যাঞ্জিলি

প্রথমত আমি ভেবেছিলাম এটি অদলবদল এবং রেডিস সমন্বিত কাজ করার দুর্দান্ত সমাধান হবে তবে আমি কিছু গবেষণা করেছি এবং এই নিবন্ধটি পৌঁছেছি anteryz.com নিউজ / ৫২ , যা দাবি করে যে এটি রেডিস ব্যবহারের ভুল উপায়, যাইহোক আমি নই 100% এটির সাথে একমত, আপনি অদলবদলের সাথে redis ব্যবহারের পারফরম্যান্সে খুশি?
তালসিবনি

1
@ ডার্থস্পিডিয়াস আপনার রেডিস লগটিতে আপনি " মেমরি বরাদ্দ করতে পারবেন না " ত্রুটি দেখতে পাবেন। লগ ফাইলটি কীভাবে দেখুন তা এখানে দেখুন: stackoverflow.com/questions/16337107/…
ব্রুনো পেরেস

3

আমিও একই সমস্যার মুখোমুখি ছিলাম। উভয় উত্তর (সর্বাধিক উত্সাহিত এক এবং স্বীকৃত উত্তর) কেবল একইটির জন্য একটি অস্থায়ী স্থিরতা দেয়।

তবুও, config set stop-writes-on-bgsave-error noএই ত্রুটিটি দেখার জন্য এটি একটি ভয়ঙ্কর উপায়, যেহেতু এই বিকল্পটি যা করে তা হ'ল লেখাগুলি থামানো হয়েছে এবং স্ন্যাপশটে ডেটা না লিখেই অগ্রসর হওয়া move এটি কেবল এই ত্রুটিটিকে উপেক্ষা করছে। এটি উল্লেখ করুন

সেটিং হিসাবে dirমধ্যে configredis-CLI মধ্যে, একবার আপনি redis সেবা পুনরায় চালু, এই খুব পরিষ্কার হইবে এবং একই ভুল আবার পপ আপ করবে। ডিফল্ট মান dirমধ্যে redis.confহয় ./, এবং যদি আপনি root পরিচয়ে redis শুরু, তারপর ./হয়/ ত্রুটি ঘটেছে, যা লেখার অনুমতি মঞ্জুর করা হয় না, তাই।

সর্বোত্তম উপায় হ'ল dirredis.conf ফাইলে প্যারামিটার সেট করা এবং সেই ডিরেক্টরিতে সঠিক অনুমতি সেট করা। বেশিরভাগ ডিবিয়ান ডিস্ট্রিবিউশনের মধ্যে এটি থাকবে/etc/redis/redis.conf


3

আজকাল রেডিস রাইটিং-অ্যাক্সেস সমস্যাগুলি যা ক্লায়েন্টকে এই ত্রুটি বার্তা দেয় সেগুলি অফিসিয়ায় আবার প্রকাশিত হয়েছে redis ডকার পাত্রে ।

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

একঘন্টা নিষ্ক্রিয়তার এক ঘন্টা পরে, আপনি যদি নিজের ধারকটিকে redisএকটি নন-রুট ব্যবহারকারী হিসাবে চালিত করেন (উদাহরণস্বরূপ docker run -u 1007ডিফল্টের পরিবর্তে docker run -u 0), আপনি আপনার সার্ভারে একটি সুন্দর বিশদ ত্রুটি পেয়ে যাবেন লগে (দেখুন docker logs redis):

1:M 29 Jun 2019 21:11:22.014 * 1 changes in 3600 seconds. Saving...
1:M 29 Jun 2019 21:11:22.015 * Background saving started by pid 499
499:C 29 Jun 2019 21:11:22.015 # Failed opening the RDB file dump.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Jun 2019 21:11:22.115 # Background saving error

সুতরাং আপনার যা করা দরকার তা হ'ল ধারকটির মানচিত্র /data ফোল্ডারটি একটি বাহ্যিক স্থানে (যেখানে নন-রুট ব্যবহারকারী, এখানে: 1007 এর লেখার অ্যাক্সেস রয়েছে যেমন /tmpহোস্ট মেশিনে), যেমন:

docker run --rm -d --name redis -p 6379:6379 -u 1007 -v /tmp:/data redis

সুতরাং এটি অফিসিয়াল ডকার চিত্রের একটি ভুল কনফিগারেশন (যা লিখতে হবে /tmpনা /data) যা এই "টাইম বোমা" তৈরি করে যা সম্ভবত আপনি কেবল উত্পাদনেই মুখোমুখি হবেন ... বিশেষত কিছু শান্ত ছুটির সপ্তাহান্তে রাতারাতি: /


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

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

ধন্যবাদ, এটি একটি ভাল পয়েন্ট। কেবল কৌতূহলী, তবে কীভাবে কোনও আরডিবি ফাইল হোস্টের উপর চালিত হবে, বিশেষত একটি উইন্ডোজ? আমি মনে করি এটি ধারকটির মধ্যেই কার্যকর করা যেতে পারে। তবে এটি এই বিশেষ ধারকটির সাথে নির্দিষ্ট নয়।
ট্রেভরবি

1
ঠিক আছে, পে-লোড সম্ভবত উইন্ডোজে এক্সিকিউট করতে ব্যর্থ হবে, যদি না পুরোপুরি লুয়াতে লেখা হয় এবং এভাবে রেডিসের মতো ক্রস-প্ল্যাটফর্ম হিসাবে ... ইভাল কমান্ডটি ভাষা নির্বিশেষে একটি শয়তানের আবিষ্কার
মাইরেকএফডি

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

3

আমার জন্য

config set stop-writes-on-bgsave-error no

এবং আমি আমার ম্যাক পুনরায় লোড করি, এটি কাজ করে


1

এএফএস ডিস্ক স্পেস সহ একটি সার্ভারে কাজ করার সময় আমি এই সমস্যার কারণ হয়েছি কারণ আমার প্রমাণীকরণের Permission Deniedটোকেনটির মেয়াদ শেষ হয়ে গেছে, যা রেডিস-সার্ভার সংরক্ষণের চেষ্টা করার সময় প্রতিক্রিয়া পেয়েছিল। আমি আমার টোকেনটি রিফ্রেশ করে এটি সমাধান করেছি:

kinit USERNAME_HERE -l 30d && aklog


1

আপনি যদি ডকার / ডকার-কমপোজ ব্যবহার করছেন কমপোজ এবং redis কে ফাইল থেকে লিখতে বাধা দিতে চান, আপনি একটি redis কনফিগারেশন তৈরি করতে পারেন এবং একটি ধারক মধ্যে মাউন্ট করতে পারেন

docker.compose.override.yml

  redis:¬
      volumes:¬
        - ./redis.conf:/usr/local/etc/redis/redis.conf¬
      ports:¬
        - 6379:6379¬

আপনি এ থেকে ডিফল্ট কনফিগারেশন ডাউনলোড করতে পারেন এখান

redis.conf ফাইলটিতে নিশ্চিত করুন যে আপনি এই 3 টি লাইন মন্তব্য করেছেন

save 900 1
save 300 10
save 60 10000

myou এখানে অবিরাম ডেটা অপসারণের জন্য আরও সমাধান দেখতে পারেন


1

আমার ক্ষেত্রে এটি ঘটেছিল কারণ আমি কেবল redisদ্রুত উপায়টি ব্যবহার করে ইনস্টল করেছি । সুতরাং redis মূল হিসাবে চলছে না। আমি Installing Redis more properlyতাদের কুইক স্টার্ট গাইডের বিভাগের অধীনে নির্দেশাবলী অনুসরণ করে এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি । এটি করার পরে, সমস্যাটি সমাধান হয়ে গেছে এবং redisএখন মূল হিসাবে চলছে। এটা দেখ.


1

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

sudo su - redis -s /bin/bash
mkdir redis_dir
redis-cli CONFIG SET dir $(realpath redis_dir)
exit # to logout from redis user (optional)

0

আমার ক্ষেত্রে এটি ডিস্ক ফ্রি স্পেসের সাথে সম্পর্কিত ছিল। (আপনি এটি df -hবাশ কমান্ড দিয়ে পরীক্ষা করতে পারেন ) যখন আমি কিছু স্থান খালি করি তখন এই ত্রুটিটি অদৃশ্য হয়ে যায়।


0

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

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

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

আপনি এটি খুলতে redis.windows.confএবং নিম্নলিখিত কনফিগারেশনটি অনুসন্ধান করে সমাধান করতে পারেন :

    # The working directory.
    #
    # The DB will be written inside this directory, with the filename specified
    # above using the 'dbfilename' configuration directive.
    #
    # The Append Only File will also be created inside this directory.
    #
    # Note that you must specify a directory here, not a file name.
    dir ./

dir ./আপনার নিয়মিত পড়ার / লেখার অনুমতি থাকা কোনও পথে পরিবর্তন করুন

আপনি কেবলমাত্র রেডিস ফোল্ডারটি সম্পূর্ণরূপে একটি ফোল্ডারে সরিয়ে নিতে পারেন আপনার জানা ফোল্ডারে ডান অনুমতি রয়েছে।


0

আমার জন্য এটি অবিরাম redis ডেটা ফোল্ডারে অনুমতিগুলির এক সমস্যা ছিল। আমি এটি দিয়েছি:

chmod 777 -Rf data/

এবং এটি কাজ করে! এটি সমস্যার সমাধান বলার তাড়াতাড়ি হতে পারে। কারণ আমিও সন্দেহ করি যে রেডিস রুট হিসাবে চালাচ্ছে না তাই আরও জানার জন্য আমার ডকারফাইলে পরিদর্শন করা দরকার।


0

কোনও পদক্ষেপ নেওয়ার আগে আপনার রেডিস লগটি পরীক্ষা করুন। এই থ্রেডের কয়েকটি সমাধান আপনার রেডিস ডেটা মুছে ফেলতে পারে, তাই আপনি কী করছেন সে সম্পর্কে সতর্ক হন।

আমার ক্ষেত্রে, মেশিনটি র‍্যামের বাইরে চলে গেছে । হোস্টে আর ফ্রি ডিস্কের জায়গা না থাকলে এটিও ঘটতে পারে ।


0

দয়া করে সচেতন হন, যখন আপনার সার্ভারের আক্রমণে থাকে তখন এই ত্রুটিটি উপস্থিত হয়। সবেমাত্র পাওয়া গেছে যে redis '/etc/cron.d/web' লিখতে ব্যর্থ হয়েছে যেখানে অনুমতিগুলি সংশোধন করার পরে, কিছু গোপন বিকল্পের সাথে খনির অ্যালগরিদমের সমন্বিত একটি নতুন ফাইল যুক্ত করা হয়েছিল।


0
# on redis 6.0.4 
# if show error 'MISCONF Redis is configured to save RDB snapshots'
# Because redis doesn't have permissions to create dump.rdb file
sudo redis/bin/redis-server 
sudo redis/bin/redis-cli

-1

@ ক্রিস দ্বারা চিহ্নিত হিসাবে সমস্যাটি কম স্মৃতিশক্তি হওয়ার সম্ভাবনা রয়েছে। আমরা যখন মাইএসকিউএলকে অত্যধিক র‍্যাম বরাদ্দ করি তখন আমরা এটির অভিজ্ঞতা অর্জন শুরু করি (innodb_buffer_pool_size ) ।

রেডিস এবং অন্যান্য পরিষেবার জন্য পর্যাপ্ত র‌্যাম রয়েছে তা নিশ্চিত করার জন্য আমরা innodb_buffer_pool_sizeমাইএসকিউএলে হ্রাস পেয়েছি ।


-1

আমার ক্ষেত্রে, কারণটি ছিল ডিস্কে খুব কম ফাঁকা জায়গা (কেবল 35 এমবি)। আমি নিম্নলিখিতটি করেছি -

  1. রেডিস সম্পর্কিত সমস্ত প্রক্রিয়া বন্ধ করে দিয়েছে
  2. পর্যাপ্ত ফাঁকা জায়গা তৈরি করতে ডিস্কে কিছু ফাইল মুছুন
  3. রেডিস ডাম্প ফাইল মুছুন (যদি বিদ্যমান ডেটার প্রয়োজন না হয়)

    sudo rm /var/lib/redis/*

  4. বিদ্যমান সমস্ত ডাটাবেসের সমস্ত কী মুছুন

    sudo redis-cli flushall

  5. সমস্ত সেলারি কাজ পুনরায় চালু করুন এবং যে কোনও সমস্যার জন্য সংশ্লিষ্ট লগগুলি চেক করুন

1
আপনি অবশ্যই এটি আপনার ডেভ দৃষ্টান্তে করেছেন। ডেটা কেন্দ্রিক অ্যাপ্লিকেশনগুলির সাথে ডিল করার সময় সঠিক সমাধান নয়।
নিকেশ দেবকী

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