عمل تکثیر در MongoDB
عمل تکثیر (Replication) به فرآیند همزمان سازی داده در میان چند سرور گفته میشود. تکثیر، افزونگی را فراهم میآورد و دسترسی پذیری دادهها را توسط کپی داده در چندین سرور مختلف افزایش میدهد. این کار، یک پایگاه داده را در مقابل از دسترس خارج شدن یک سرور مفرد، محافظت میکند. همچنین امکان بازیابی از خرابی سخت افزار و وقفههای سرویس را به کاربر میدهد. توسط کپی برداری از اطلاعات، میتوانید یکی از آنها را برای بازیابی، گزارشگیری و پشتیبان گیری اختصاص دهید.
چرا تکثیر؟
- برای ایمن نگه داری اطلاعات
- دسترسی پذیری بالای اطلاعات (شبانه روزی)
- بازیابی اطلاعات
- نیازی به از کار افتادن هنگام انجام عملیات نگهداری ندارد
- مقایس پذیری خواندن دادهها (کپی برداریهای اضافه برای عمل خواندن)
- کپی اطلاعات برای نرم افزارها شفاف و قابل دستیابی است.
تکثیر در MongoDB چگونه کار میکند
MongoDB عمل تکثیر را با استفاده از مجموعه کپی یا المثنی (Replica set) انجام میدهد. مجموعه کپی یک گروه از نمونههای mongodb هستند که مجموعه داده یا دیتاست مشابهی را میزبانی (Host) میکنند. در یک کپی داده، یک گره، گره اصلی است که تمام عملیات نوشتن را دریافت میکند. بقیهی نمونههای ثانویه، عملیات را از گره اصلی، دریافت و اعمال میکنند؛ بنابراین آنها هم دیتاست مشابهی دارند. مجموعهی کپی تنها میتواند یک گرهی اصلی داشته باشد.
- یک مجموعهی کپی، یک گروه از دویا چند گره است. (عموما حداقل 3 گره نیاز است.)
- در یک مجموعهی کپی، یک گره، گره اصلی است و بقیه گرهها گرههای ثانویه هستند.
- همهی دادهها از گرهی اصلی به گرههای ثانویه تکثیر میشوند.
- هنگام انجام عملیات نگه داری یا ازدسترس خارج شدن سرور، گزینش برای گره اصلی و انتخاب گره اصلی جدید آغاز میشود.
- گره از کار افتاده، بعد از بازیابی دوباره، به مجموعه کپی ملحق میشود و بعنوان یک گره ثانویه کار میکند.
در زیر یک نوع دیاگرام از تکثیر در MongoDB نشان داده شده است که در آن برنامهی سمت کلاینت همیشه با گرهی اصلی در ارتباط است و گرهی اصلی، دادهها را گرههای ثانویه تکثیر میکند.
ویژگیهای مجموعهی کپی
- یک کلاستر از N عدد گره
- هر گرهایی میتواند گره اصلی باشد
- همهی عملیات نوشتن بر روی گره اصلی انجام میشود
- عمل ازدسترس خارج شدن سرور و جایگزین شدن یک گره بصورت اتوماتیک
- بازیابی بصورت اتوماتیک
- همراهی و توافق در گزینش گره اصلی
ساختن یک مجموعه کپی
در اینجا میخواهیم یک نمونه از mongodb را به یک مجموعهی کپی تبدیل کنیم. برای این کار مراحل زیر را انجام دهید:
- همهی نمونههای در حال اجرای mongod را در سمت سرور، متوقف کنید.
- اکنون mongod سمت سرور را با سوئیچ –replSet راه اندازی کنید.
گرامر پایه --replSet به شکل زیر است:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
مثال mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
دستور فوق یک نمونه از mongod را با نام rs0، روی پورت 27017 راه اندازی میکند. اکنون command prompt را باز کنید و به این نمونه mongod متصل شوید. در سمت کلاینت، دستور ()rs.initiate را برای شروع کردن یک مجموعهی کپی جدید صادر کنید. برای چک کردن تنظیمات مجموعهی کپی، دستور ()rs.conf را صادر کنید. برای چک کردن وضعیت مجموعه کپی نیز دستور ()rs.status را صادر کنید.
افزودن اعضا به مجموعهی کپی
برای افرودن اعضا به مجموعهی کپی، چند نمونه mongodb را در چندین کامپیوتر راه اندازی کنید. اکنون برنامهی سمت کلاینت را اجرا و دستور ()rs.add را اجرا کنید.
گرامر
گرامر پایه دستور ()rs.add به شکل زیر است:
فرض کنید نام نمونهی mongodb شما mongod1.net و بر روی پورت 27017 در حال اجراست. برای افزودن این نمونه به مجموعه کپی، دستور () rs.add را در سمت کلاینت اجرا کنید.
>rs.add("mongod1.net:27017")
>
توجه کنید که فقط وقتی میتوانید یک نمونه mongodb را برای مجموعه کپی اضافه کنید که به گره اصلی متصل باشید. برای چک کردن اینکه به گره اصلی متصل هستید، دستور ()db.isMaster را در سمت کلاینت صادر کنید.