EQVPS

VPS-এ Redis কীভাবে ইনস্টল করবেন: মেমরির সীমা, ডিস্কে সংরক্ষণ আর এমন পাসওয়ার্ড যা টিকে থাকে

Ubuntu 24.04-এ Redis ইনস্টল করুন, মেমরি সীমিত করুন যাতে পুরো সার্ভার দখল না করে, ডেটা না মুছে AOF ফাইল চালু করুন এবং এমন পাসওয়ার্ড দিন যা রিস্টার্টের পরও থাকে। এর দুটি ধাপে এমন ফাঁদ আছে যাতে আমরা নিজেরাই টেস্ট সার্ভারে পড়েছিলাম।

Redis ডেটা মেমরিতে রাখে এবং প্রায় এক মিলিসেকেন্ডে উত্তর দেয়, তাই এটি ক্যাশ, কিউ বা সেশন স্টোর হিসেবে অসংখ্য অ্যাপের পেছনে কাজ করে। ইনস্টল করা একটি কমান্ড। আসল কাজ ডিফল্ট সেটিংসে: মেমরির কোনো সীমা নেই, স্ন্যাপশট সাম্প্রতিক লেখা হারাতে পারে, আর দুটি সহজ ভুল আছে যা চুপচাপ আপনার ডেটা মুছে দেয় বা পাসওয়ার্ড বন্ধ করে দেয়। এই গাইড Ubuntu 24.04-এ সবকিছু দেখায়। প্রতিটি ধাপ আমরা আমাদের ইমেজে চালিয়েছি; সংখ্যাগুলো একটি Micro সার্ভার (2 vCPU, 2 GB) থেকে।

আপনার sudo অধিকারসহ একজন ব্যবহারকারী লাগবে। Ubuntu সেটআপ গাইড একজন তৈরি করে।

1. ইনস্টল

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

ইনস্টলে 13 সেকেন্ড লেগেছে এবং Redis 7.0.15 পেয়েছি। এটি সঙ্গে সঙ্গে এবং প্রতিটি বুটে চালু হয়, PONG উত্তর দেয় এবং শুধু সার্ভারের ভেতরেই শোনে: 127.0.0.1:6379 ও [::1]:6379, protected-mode yes সহ। ডেটা ছাড়া এটি 13.5 MB RAM নিচ্ছিল।

লগে আগে থেকেই একটি সতর্কবার্তা ছিল:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

Redis ডিস্কে সংরক্ষণ করে fork দিয়ে তৈরি নিজের একটি কপি থেকে, আর কার্নেলের ডিফল্ট সেটিংয়ে মেমরি কম থাকলে এই fork ব্যর্থ হতে পারে। একবার ঠিক করে নিন:

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

রিস্টার্টের পরে সতর্কবার্তা চলে গেছে।

2. মেমরি সীমিত করুন

শুরুতে maxmemory হলো 0, মানে কোনো সীমা নেই, আর নীতি noeviction। সার্ভারের মেমরি ফুরিয়ে না যাওয়া পর্যন্ত Redis RAM নিতে থাকবে। একটি সর্বোচ্চ সীমা দিন এবং ঠিক করুন সেখানে পৌঁছালে কী হবে:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

আমরা 64 MB সীমা আর 4,00,000 লেখা দিয়ে দুটি নীতিই পরীক্ষা করেছি:

  • noeviction (ডিফল্ট): মেমরি 63 MB-তে থেমে গেছে এবং নতুন লেখা OOM command not allowed when used memory > 'maxmemory' ত্রুটিতে ব্যর্থ হয়েছে। কিউ বা হারানো চলবে না এমন কিছুর জন্য ঠিক।
  • allkeys-lru: Redis সবচেয়ে দীর্ঘ সময় অব্যবহৃত কীগুলো, মোট 48,606টি, ফেলে দিয়েছে এবং সব লেখা সফল হয়েছে। ক্যাশের জন্য ঠিক।

CONFIG REWRITE চলমান সেটিংস /etc/redis/redis.conf-এ সংরক্ষণ করে, যাতে রিস্টার্টের পরও থাকে। এটি এমন একটি লাইনও যোগ করে যা ধাপ 4-এর আগে জানা দরকার।

3. ডিস্কে কীভাবে সংরক্ষণ করবে তা বেছে নিন

ডিফল্টভাবে Redis এক ঘণ্টায় 1টি, পাঁচ মিনিটে 100টি বা এক মিনিটে 10,000টি পরিবর্তনের পরে একটি স্ন্যাপশট (/var/lib/redis/dump.rdb) লেখে। আমরা এটি থামানোর তিনটি উপায় পরীক্ষা করেছি:

Redis কীভাবে থেমেছেশুধু স্ন্যাপশট (ডিফল্ট)AOF ফাইলসহ
systemctl restartকিছু হারায়নি: বন্ধের সময় সংরক্ষণ করেকিছু হারায়নি
kill -9 দিয়ে মারাশেষ স্ন্যাপশটের পরের কী আর ছিল না2 সেকেন্ড আগে লেখা কী ছিল

দুই ক্ষেত্রেই systemd কয়েক সেকেন্ডের মধ্যে নিজেই Redis আবার চালু করেছে।

Redis-এ যদি এমন ডেটা থাকে যার অভাব বোধ করবেন, তাহলে AOF ফাইল (append-only file) চালু করুন। এটি প্রতিটি লেখা লিপিবদ্ধ করে এবং প্রতি সেকেন্ডে একবার ডিস্কে পাঠায়। এটি চালু সার্ভারে করুন, ফাইল এডিট করে নয়:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

আমরা প্রথমে অন্য পথটি চেষ্টা করেছিলাম, আর তাতে ডেটা হারিয়েছি। redis.conf-এ appendonly no বদলে appendonly yes করে রিস্টার্ট করলাম। Redis একটি খালি AOF নিয়ে উঠল এবং স্ন্যাপশট থেকে কিছুই লোড করল না, তাই সব পুরোনো কী উধাও। এরপর বন্ধ হওয়ার সময় সে তার নতুন বিষয়বস্তু, পুরোনো কী ছাড়াই, dump.rdb-এর ওপরও লিখে দিল। CONFIG SET এটি এড়ায়: Redis আগে মেমরির ডেটা থেকে AOF লেখে। রিস্টার্টের পরে আমাদের সব কী ছিল।

Redis যদি নিছক ক্যাশ হয় যা খালি অবস্থায় শুরু হতে পারে, তাহলে উল্টোটা করুন এবং redis-cli CONFIG SET save "" দিয়ে সংরক্ষণ বন্ধ করুন।

4. পাসওয়ার্ড দিন

এটি দ্বিতীয় ফাঁদ। যেকোনো CONFIG REWRITE-এর পরে Redis 7 redis.conf-এর শেষে এই লাইনটি যোগ করে:

user default on nopass ~* &* +@all

এর মানে "ডিফল্ট ব্যবহারকারীর পাসওয়ার্ড লাগে না"। এরপর আমরা ফাইলের ওপরের দিকে requirepass যোগ করে রিস্টার্ট করলাম। Redis তবুও পাসওয়ার্ড ছাড়া PONG দিচ্ছিল, কারণ user লাইনটি একে বাতিল করে। পাসওয়ার্ড বরং Redis-এর মাধ্যমেই দিন:

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

পাসওয়ার্ড নিরাপদ জায়গায় রাখুন। Redis এখন এটি একই user default লাইনে SHA-256 হ্যাশ হিসেবে রাখে। রিস্টার্টের পরে redis-cli ping উত্তর দিল NOAUTH Authentication required., আর শুধু পাসওয়ার্ড দিয়েই কাজ হলো। redis-cli-কে এটি দিন REDISCLI_AUTH ভেরিয়েবলের মাধ্যমে। -a দিলে এটি প্রসেস তালিকায় দেখা যায়, আর redis-cli সে বিষয়ে সতর্ক করে। অ্যাপে এটি Redis-এর ঠিকানায় দিন: redis://:PASSWORD@127.0.0.1:6379/0।

5. নিজের কম্পিউটার থেকে প্রবেশ

Redis-কে 127.0.0.1-এ রাখুন এবং SSH টানেল ব্যবহার করুন। সার্ভারের SSH পোর্ট দিন; NAT প্ল্যানে এটি আপনার ব্যক্তিগত পোর্ট:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

এটি চলার সময় আপনার কম্পিউটারের redis-cli -p 6380 আর ডেস্কটপ টুলগুলো সার্ভারের Redis-এর সঙ্গে কথা বলে। ইন্টারনেটে নতুন কিছু খোলা হয় না। SSH কী গাইড মেনে চললে টানেল পাসওয়ার্ড ছাড়াই লগ ইন করে।

এটি কত দ্রুত

Micro টেস্ট সার্ভারে 50টি ক্লায়েন্ট দিয়ে redis-benchmark-এর ফল:

পরীক্ষাপ্রতি সেকেন্ডে অনুরোধমধ্যম বিলম্ব
SET30,3031.0 ms
GET35,1490.9 ms
SET, প্রতি রাউন্ড ট্রিপে 16টি কমান্ড2,72,1092.4 ms
GET, প্রতি রাউন্ড ট্রিপে 16টি কমান্ড4,14,9381.3 ms

ওয়েব অ্যাপের ক্যাশ বা জব কিউর জন্য এটি দরকারের চেয়ে অনেক বেশি। বাড়তি গতি আসে কমান্ড একসঙ্গে পাঠানো (pipelining) থেকে।

কোন প্ল্যান

Redis-এর দরকার আপনার ডেটার জন্য RAM, আর খুব কম কিছু। Nano (2 vCPU, 1 GB, মাসে $3) maxmemory 256mb দিয়ে একটি ছোট অ্যাপের পাশে Redis চালায়। Micro (2 GB, মাসে $5) বড় ক্যাশ আর অ্যাপ দুটোর জন্যই জায়গা রাখে। অন্য কিছুকে যদি সরাসরি Redis-এ যুক্ত হতে হয়, নিজস্ব IPv4 নিন (Nano-IP থেকে, মাসে $8) এবং ফায়ারওয়ালে শুধু ঐ ঠিকানাটি অনুমতি দিন। সব প্ল্যান VPS পেজে আছে, আর পেমেন্ট হয় Base, Ethereum বা Polygon নেটওয়ার্কে USDT, USDC বা ETH-এ।

FAQ

Redis-এর কত RAM লাগে?

Redis নিজে খুবই ছোট: আমাদের সার্ভারে ইনস্টলের ঠিক পরে 13.5 MB। তার দরকার আপনার ডেটার জন্য জায়গা, কারণ ডেটা মেমরিতে থাকে। maxmemory সেট করুন সার্ভার যতটা ছাড়তে পারে, যেমন 1 GB সার্ভারে 256 MB, আর বেছে নিন ভরে গেলে কী হবে।

Redis না Valkey?

Valkey হলো Redis-এর একটি ফর্ক, যা Redis 7.2 থেকে শুরু হয়েছে এবং একই প্রোটোকল ব্যবহার করে, তাই বেশিরভাগ ক্লায়েন্ট দুটোতেই চলে। Ubuntu 24.04-এ শুধু Redis 7.0.15 আছে। Debian 13-এ Redis 8.0 ও Valkey 8.1 দুটোই আছে, আর Debian 12 backports থেকে Valkey 8.0 পায়। এই গাইডের ধাপগুলো দুটোর জন্যই খাটে।

ক্র্যাশের পরে Redis কেন ডেটা হারায়?

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

redis.conf-এ requirepass যোগ করেছি, তবু Redis পাসওয়ার্ড ছাড়া কমান্ড নিচ্ছে কেন?

সম্ভবত কোনো এক সময় CONFIG REWRITE চালানো হয়েছিল। Redis 7-এ এটি redis.conf-এর শেষে user default on nopass ~* &* +@all লাইনটি যোগ করে, আর এই লাইন ওপরে লেখা requirepass বাতিল করে দেয়। পাসওয়ার্ড CONFIG SET requirepass দিয়ে দিন, তারপর CONFIG REWRITE চালান, Redis সেটি ঐ লাইনেই সংরক্ষণ করবে।

পোর্ট 6379 কি ইন্টারনেটে খুলে দিতে পারি?

খুলবেন না। খোলা Redis পোর্ট সারাক্ষণ স্ক্যান হয় এবং সার্ভারে ঢোকার একটি সাধারণ পথ। নিজের কম্পিউটার থেকে SSH টানেল দিয়ে Redis-এ যান, অথবা যে অ্যাপ এটি ব্যবহার করে সেই একই সার্ভারে রাখুন।

মন্তব্য

এখনো কোনো মন্তব্য নেই। প্রথম হোন।

একটি মন্তব্য দিন

মন্তব্য প্রকাশের আগে মডারেট করা হয়।