Docker Swarm Volumes (ডকার সোয়ার্ম ভলিউম)
ডকার সোয়ার্মে সার্ভিস রান করার সময় ডেটা পারসিস্টেন্স বা স্টোরেজ ম্যানেজমেন্ট একটি বড় চ্যালেঞ্জ। কারণ কন্টেইনারগুলো ক্লাস্টারের যেকোনো নোডে রান করতে পারে, তাই ডেটা যাতে সবসময় পাওয়া যায় তা নিশ্চিত করতে হয়।
১. সার্ভিসে ভলিউম ব্যবহার (Volumes in Services)
সিঙ্গেল কন্টেইনারের মতো সার্ভিসের ক্ষেত্রেও ভলিউম মাউন্ট করা যায়। তবে এখানে বেস্ট প্র্যাকটিস হলো 'Volume' ব্যবহার করা, 'Bind Mount' নয়।
docker service create \
--name db-service \
--mount type=volume,source=my-data,target=/var/lib/mysql \
mariadb- সমস্যা: যদি ক্লাস্টারে ভলিউম ড্রাইভার ডিফল্ট (local) থাকে, তবে প্রতিটি নোডে আলাদা আলাদা ভলিউম তৈরি হবে। এক নোডের ডেটা অন্য নোডে পাওয়া যাবে না।
২. ভলিউম ড্রাইভার (Volume Drivers)
মাল্টি-নোড ক্লাস্টারে ডেটা শেয়ার করার জন্য আমাদের এক্সটার্নাল বা নেটওয়ার্ক ভলিউম ড্রাইভার ব্যবহার করতে হয়।
- REXRay: বিভিন্ন ক্লাউড স্টোরেজ (AWS EBS, GCE Persistent Disk) ড্রাইভ হিসেবে ব্যবহার করতে দেয়।
- Portworx: হাই-পারফরম্যান্স ডিস্ট্রিবিউটেড স্টোরেজ।
- Flocker: ডেটা এবং কন্টেইনার একসাথে মুভ করতে সাহায্য করে।
৩. শেয়ারড স্টোরেজ ও NFS (Shared Storage & NFS)
সবচেয়ে কমন এবং সহজ পদ্ধতি হলো একটি সেন্ট্রাল স্টোরেজ সার্ভার (NFS) ব্যবহার করা।
NFS ভলিউম তৈরির উদাহরণ:
১. প্রথমে একটি ভলিউম তৈরি করুন যা NFS সার্ভারে পয়েন্ট করবে:
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.1.100,rw \
--opt device=:/path/to/dir \
shared-data২. সার্ভিসে এই ভলিউমটি মাউন্ট করুন:
docker service create --name web --mount source=shared-data,target=/app nginxএর ফলে ক্লাস্টারের যেকোনো নোড এই সেন্ট্রাল স্টোরেজ থেকে ডেটা পড়তে বা লিখতে পারবে।
৪. ক্লাউড স্টোরেজ ইন্টিগ্রেশন (Cloud Storage)
আধুনিক ক্লাউড প্রোভাইডাররা (AWS, Azure, Google Cloud) নিজস্ব ড্রাইভার প্রদান করে।
- AWS EFS: সোয়ার্ম ক্লাস্টারের জন্য ম্যানেজড NFS হিসেবে কাজ করে।
- Azure Files: SMB/NFS প্রোটোকল ব্যবহার করে সব নোডে শেয়ার করা যায়।
৫. সোয়ার্ম ভলিউম টিপস
- Avoid Bind Mounts: সোয়ার্মে বাইন্ড মাউন্ট এড়িয়ে চলুন কারণ সব নোডে একই ডিরেক্টরি পাথ থাকা বাধ্যতামূলক।
- Data Locality: যদি নির্দিষ্ট কোনো নোডেই ডেটা রাখতে চান, তবে 'Placement Constraints' ব্যবহার করুন।
- Backups: সেন্ট্রাল স্টোরেজ ব্যবহারের ফলে ব্যাকআপ নেওয়া অনেক সহজ হয়।