Node , Cluster , Shards
১️) Node কি?
Node হলো একটা সার্ভার বা মেশিন যেখানে OpenSearch চলছে।
এটি ডেটা সংরক্ষণ করে।
এটি সার্চ রিকোয়েস্ট প্রসেস করে।
এটি প্রয়োজনে ডেটা প্রিপ্রসেসিং ও ইনডেক্সিংও করতে পারে।
উদাহরণ:
তুমি যদি তোমার ল্যাপটপে OpenSearch চালাও, ল্যাপটপটা একটি নোড।
ভবিষ্যতে তুমি যদি ৫টা সার্ভার যুক্ত করো, তাহলে সেখানে ৫টি নোড থাকবে।
২️) Cluster কি?
Cluster হলো একাধিক Node এর একটি গ্রুপ, যা একসাথে কাজ করে।
Cluster একটি বড় OpenSearch সিস্টেমের “মস্তিষ্ক”।
Cluster-এর মধ্যে এক Node হয় Cluster Manager, যা সব কিছু ঠিকঠাক পরিচালনা করে।
উদাহরণ:
তোমার কাছে ১টা ল্যাপটপ আছে → এটা সিঙ্গেল-নোড ক্লাস্টার।
তোমার কাছে ১০টা সার্ভার আছে → সবগুলো মিলিয়ে একটি মাল্টি-নোড ক্লাস্টার।
৩️) Single-node vs Multi-node Cluster
| Feature | Single-node Cluster | Multi-node Cluster |
|---|---|---|
| Nodes | 1 | অনেক (5, 10, 100+) |
| কাজ | সবকিছু একটাই মেশিন করে | কাজ ভাগ করা হয় (Indexing, Searching, Cluster State Management) |
| পারফরম্যান্স | সীমিত | অনেক দ্রুত এবং স্কেলেবল |
| উদাহরণ | ল্যাপটপে OpenSearch | ডেটা সেন্টারে OpenSearch |
উদাহরণ:
ল্যাপটপে সব কাজ করে → Index করা, সার্চ করা, Cluster State দেখানো।
ডেটা সেন্টারে →
১টা Node শুধু Cluster State দেখবে
২-৩টা Node Index এবং Search করবে
১টা Node Logging বা Monitoring করবে
Node-গুলোর মধ্যে যোগাযোগ
Cluster-এর সব Node এক অন্যের সঙ্গে কথা বলে।
তুমি যদি সার্চ রিকোয়েস্ট পাঠাও কোনো Node-এ,
সেই Node অন্য Node-গুলোর কাছে রিকোয়েস্ট পাঠায়
সব Responses সংগ্রহ করে
ফাইনাল Response তোমাকে দেয়
উদাহরণ:
তুমি Student Index-এ “Ali” খুঁজছ →
Node A তোমার রিকোয়েস্ট পায়
Node A Node B এবং Node C কে বলবে খুঁজতে
সব ফলাফল A-তে এসে Aggregation হবে
তারপর A তোমাকে Final Result পাঠাবে
💡 মূল টেকঅওয়ে:
Node = সার্ভার যা ডেটা রাখে ও সার্চ করে
Cluster = একাধিক Node এর গ্রুপ
Cluster Manager Node = Cluster পরিচালনার জন্য নির্বাচিত প্রধান Node
Multi-node Cluster হলে কাজ ভাগ হয় → স্কেলিং এবং পারফরম্যান্স উন্নত হয়
Shards কি?
Shards = Index কে ছোট ছোট ভাগে ভাগ করা।
OpenSearch এ এক Index অনেক Document থাকে।
যদি Index বড় হয়, একসাথে সব Document এক Node-এ রাখা সম্ভব নয়।
তাই OpenSearch Index কে ছোট ছোট অংশে ভাগ করে, যেগুলোকে Shards বলা হয়।
উদাহরণ:
ধরো তোমার
studentsIndex এ ১০০,০০০ ডকুমেন্ট আছে।OpenSearch এই Index কে ৫টা Shard এ ভাগ করবে → প্রতি Shard এ ২০,০০০ ডকুমেন্ট।
Cluster এ ৫টা Node থাকলে, প্রতিটি Node এ ১টি Shard যেতে পারে।
Shards কেন দরকার?
ডেটা ভাগ করে রাখা:
বড় Index এক Node এ রাখতে গেলে সমস্যা হতে পারে।
Shards Node গুলোর মধ্যে ভাগ করলে বড় ডেটাও Manage করা যায়।
Parallel Processing:
প্রতিটি Shard স্বাধীনভাবে কাজ করতে পারে।
সার্চ হলে প্রতিটি Shard আলাদাভাবে খুঁজে পরে ফলাফল Aggregate হয়।
Scalability:
ভবিষ্যতে যদি Node বাড়াও, Shards সহজে নতুন Node-এ স্থানান্তর করা যায়।
উদাহরণ: Shard Distribution
ধরা যাক Cluster-এ ২টা Node আছে, এবং ২টা Index:
| Index | Shards | Distribution |
|---|---|---|
| index_1 | 2 | Node 1 = 1 Shard, Node 2 = 1 Shard |
| index_2 | 4 | Node 1 = 2 Shard, Node 2 = 2 Shard |
💡 অর্থাৎ, Index বড় হলেও Shards ভাগ করে রাখা হলে সব Node সমানভাবে কাজ করতে পারে।
প্রতিটি Shard = Lucene Index
OpenSearch প্রতিটি Shard কে Lucene Index হিসেবে ধরে।
Lucene Index রান হলে CPU ও Memory খায়।
মনে রাখার বিষয়:
বেশি Shards মানে ভালো না।
যদি ৪০০ GB Index কে ১০০০ Shard এ ভাগ করো → Cluster overstrain হবে।
সাধারণ নিয়ম:
প্রতিটি Shard এর আকার = ১০–৫০ GB
উদাহরণ:
৪০০ GB Index → ১০ Shard (প্রতি Shard ৪০ GB) → ভালো।
৪০০ GB Index → ১০০০ Shard (প্রতি Shard 0.4 GB) → খারাপ।
মূল ধারণা
Shard = Index-এর ছোট ভাগ
Shards Node-এ বিতরণ করে বড় Index ম্যানেজ করা যায়
প্রতিটি Shard CPU & RAM ব্যবহার করে → বেশি Shard ঠিক নয়
Ideal Shard size = 10–50 GB