فرض کنید اطلاعات یک Index درون Node های مختلف پخش است.
یعنی درصدی از اطلاعات Index درون یک Node و درصدی دیگر درون یک Node دیگر پخش شده است.
در این صورت با از دست رفتن یکی از Node ها ، بخشی و درصدی از اطلاعات درون Index نیز از بین میرود.
برای حل این مشکل نیاز به یک failover mechanism داریم که بحث و مفهوم Replication مطرح میشود.
به صورت پیشفرض به ازای هر یک از Shard ها ، یک Replica از آن درون یک Node دیگر وجود خواهد داشت.
پس به صورت پیشفرض با ساخت یک Index پنج عدد Shard نیز به وجود آماده که از این ۵ عدد Shard پنج عدد Replica نیز به وجود میآید.
Replica همان المثنی Shard میباشد.
پس به طور کلی با ساخت یک Index ده عدد Shard خواهیم داشت. (که ۵ تای آن تکراری یا کپی ۵ تای دیگر است.)
به Shard های اصلی Primary Shard گفته میشود.
به Shard های کپی Replica یا Replica Shard گفته میشود.
به کل مجموعهی این دو مدل Shard اصطلاحا Replication Group گفته میشود.
نکته : یک Primary Shard میتوان تبدیل به دو Replica Shard شود.
به کمک مبحث Replication درون مجموعه high availability خواهیم داشت. یعنی در صورتی که یکی از Node ها از مدار خارج شود ، اطلاعاتی از دست نخواهد رفت.
به کمک مبخث Replication کارایی Elasticsearch بالا خواهد رفت چرا که Query به صورت موازی و همزمان درون تمام Replica ها پردازش میشود.
نکته : یک Shard اصلی هیچ وقت به صورت همزمان همراه با Replica مربوط به خود ، درون یک Node قرار نمیگیرد. (در غیر این صورت بحث HA دیگر مطرح نمیشد.)
فرض کنید یک Query از جنس Get به سمت Elasticsearch آماده است. مجموعه ابتدا تشخیص میدهد که اطلاعات مد نظر درون کدام Shard است. یعنی سرچ صورت گرفته مشخص میشود که اطلاعات درون کدام یک از Shard ها است. (سرچ درون Shard های اصلی یا Primary Shard ها صورت میگیرد.) سپس همان مدل Operation یا همان مدل کاری که Query مد نظر داشت. (ممکن است یه سرچ ساده بوده یا یک عمل مثل ویرایش یا حذف و … ) درون Replica Shard (ها) نیز رخ میدهد و در صورتی که این عمل موفقیت آمیز باشد و نتیجهی Query با همان نتیجهی Query مربوط به Primary Shard یکی بود، جواب صحیح (اررور کد ۲۰۰) یا همان Response به کاربر داده ميشود.