آموزش نصب و تنظیم کلاستر پایگاه داده Redis در CentOS 7

redis_cluster_install_1

آموزش نصب و تنظیم کلاستر پایگاه داده Redis در CentOS 7

How to setup a Redis Cluster on CentOS 7

مقدمه

Redis یک برنامه متن باز برای ذخیره داده ها بر اساس کلید-مقدار است ، که از مدل ذخیره سازی در حافظه استفاده می کند و برای سپس برای نگهداری داده ها آن ها را در دیسک ذخیره می کند و در واقع یک پایگاه داده پرسرعت است. از ویژگی های مهم این پایگاه داده transactions ، pub/sub و automatic failover است. برای کاربردهای تجاری پیشنهاد می شود که حتما از محیط لینوکسی برای نصب و استفاده از این برنامه استفاده کنید ، هرچند توسعه دهندگان این برنامه اعلام کرده که Redis در محیط OS X توسعه و آزمایش شده است.

برای کاربرد تجاری ، و بهترین حالت برای تکرار یا Replicate کردن داده ها فقط نیاز به دو سرور است که به عنوان گره یا Node استفاده می شوند. افزونگی یا Redundancy برای بهبود سیستم در مواردی که سیستم دچار مشکل می شود بسیار ضروری است ، به ویژه برای کاربرانی که از پایه بر روی سیستم و برنامه شما رشد می کنند.

در انتهای این آموزش دو سرور مجازی را به صورت زیر تنظیم می کنیم :

  • یک سرور به عنوان سرور Redis master
  • یک سرور به عنوان سرور Redis slave

همچنین در این آموزش خواهیم گفت که چطور به صورت موقت سرور slave را به سرور master تبدیل کنید.

برای سرور slave محدودیتی نیست و می توانید تعداد زیادی سرور slave را تنظیم کنید.

در این آموزش بر روی تنظیم کلاستر Redis به صورت master-slave تمرکز می کنیم و اگر می خواهید که از Redis به صورت عمومی و عادی استفاده کنید از این آموزش استفاده کنید.

پیش نیازها

این برنامه بر روی توزیع های مختلف لینوکس نصب می شود، ولی پیشنهاد می کنیم از CentOS 7 استفاده کنید. برای آموزش و آزمایش از سرور ها ساده که بار کاری (workload) واقعی ندارند استفاده می کنیم ، که برای شرایط تجاری و محیط واقعی باید از سرور های قوی تر و مناسب استفاده کنید :

  • دو سرور مجازی ، یکی برای master و یک یا بیشتر از یک سرور برای سرور slave با سیستم عامل CentOS 7.
  • دسترسی به ماشین مجازی از طریق SSH و با کاربر non-root ولی با دسترسی sudo

مرحله اول – نصب Redis

با سرور مجازی master شروع می کنیم و redis را بر روی این سرور نصب می کنیم. در ابتدا باید مخازن EPEL را به سرور اضافه کنید. مخزن EPEL مخفف Extra Packages for Enterprise Linux است که توسط پروژه فدورا توسعه داده شده و با هدف ارائه پکیج های شخص ثالث (third-party) با کیفیت برای کاربران سازمانی توزیع های بر پایه Redhat است.

اگر خطای ناشناخته بودن دستور wget را مشاهده کردید با دستور زیر wget را نصب کنید ، سپس دستور بالا را مجددا اجرا کنید :  

سپس دستور زیر را وارد کنید :

اکنون دستور بروز رسانی را برای اعمال تغییرات وارد کنید :

ممکن است اجرای این دستور کمی طول بکشد. بعد اجرا شدن دستور ، دستور زیر را برای نصب Redis وارد کنید :

بعد از اتمام فرآیند نصب ، دستور زیر را برای راه اندازی سرویس Redis اجرا کنید :

برای بررسی وضعیت سرویس Redis نیز از دستور زیر استفاده کنید :

که باید خروجی مشابه زیر را نمایش دهد :

در انتها برای آزمایش نصب Redis دستور زیر را وارد کنید :

در پاسخ این دستور باید مقدار pong نمایش داده شود. تا اینجا Redis را بر روی سرور نصب و اجرا کردید و اکنون می توانیم آن را پیکربندی کنیم. دستور زیر نیز برای آزمایش نصب است :

این دستور می گوید که ما می خواهیم redis-benchmark را در حالت بی صدا (quite) ، با ۱۰۰۰ هزار درخواست ، ۱۰ اتصال همزمان و ۵ درخواست pipeline اجرا کنیم. برای اطلاعات بیشتر در زمینه benchmark ها دستور redis-benchmark –help را وارد کنید تا اطلاعات کامل همراه با مثال را مشاهده کنید.

اکنون دستور را اجرا کنید ، بعد از اجرا شدن دستور خروجی مشابه زیر را مشاهده می کنید :

اکنون همین مراحل نصب را بر روی سرور های مجازی slave اجرا کنید. اگر سرور های مجازی بیشتری دارید باید بر روی همه آن ها این مراحل نصب را انجام دهید.

در اینجا Redis را بر روی هر دو سرور مجازی نصب و راه اندازی کردیم. اگر خروجی هر کدام از سرور ها مشابه خروجی های نشان داده شده در بالا نبودند ، به مراحل قبل برگردید و آنها را دوباره اجرا کنید و در انتها از نصب صحیح و برآورده شدن تمام پیش نیاز ها مطمئن شوید.

مرحله دوم – پیکربندی سرور Redis Master

تا الان Redis را بر روی هر دو سرور مجازی نصب و راه اندازی کردیم و در ادامه باید آنها را پیکربندی کنیم. همانطور که در ادامه خواهید دید بین تنظیمات سرور های master و slave تفاوت زیادی وجود ندارد.

در ابتدا با تنظیمات master شروع می کنیم.

فایل etc/redis.conf/ را با یک ویرایشگر متن باز کنید :

خط زیر را ویرایش کنید و یک زمان منطقی برای بررسی سلامت اتصال TCP تعیین کنید :

خط زیر را نیز از حالت توضیح خارج کنید تا سرور در دسترسی همه قرار گیرد :

با توجه به این که Redis از سرعت بسیار بالایی برخوردار است ، ممکن است یک مهاجم بدون مشکل خاصی اقدام به حمله brute force رمز عبور کند. به همین دلیل پیشنهاد می کنیم که خطر requirepass را از حالت توضیح خارج کنید و یک رمز پیچیده برای آن تعیین کنید.

خط زیر را می توانید نسبت به سناریویی که دارید تغییر دهید. در این آموزش هدف ما این است که هیچ حذف کلیدی نباید رخ دهد. این خط را از حالت توضیح خارج می کنیم و به صورت زیر تنظیم می کنیم :

در انتها برای پشتیبان گیری از داده نیاز است که تغییرات زیر را انجام دهیم. خطوط زیر را از حالت توضیح خارج کنید یا به صورت زیر تنظیم کنید :

تغییرات را ذخیره کنید و خارج شوید.

برای اعمال تغییرات انجام شده سرویس  Redis را مجددا راه اندازی کنید :

الان سرور master آماده است و باید سرور slave را تنظیم کنیم.

مرحله سوم – پیکربندی سرور Redis Slave

در سرور slave باید تغییراتی را انجام دهیم تا به عنوان یک نمونه یا گره Node به سرور master متصل شود.

فایل تنظیمات etc/redis.conf/ را با یک ویرایشگر دلخواه باز کنید :

خطوطی که باید تغییر کنند شبیه به master هستند. خط زیر را برای دسترسی همه به سرور از حالت توضیح خارج کنید :

مانند سرور slave نیز برای امنیت بیشتر خط زیر را از حالت توضیح خارج کرده و یک رمز عبور مناسب انتخاب کنید :

برای دسترسی به سرور master ، خط زیر از حالت توضیح خارج کرده و آدرس IP سرور master را به همراه پورت تعیین شده قرار دهید. شماره پورت پیش فرض ۶۳۷۹ هست :

خط masterauth را نیز از حالت توضیح خارج کنید و مقدار رمز عبور که برای سرور master که به تازگی آن را در مرحله قبل تعیین کردید را قرار دهید :

اکنون تغییرات را ذخیره کنید و خارج شوید ، سپس برای اعمال تغییرات سرویس redis را مجددا راه اندازی کنید :

سرویس redis مجددا مقدار دهی شده و تغییرات انجام شده بارگذاری می شوند.

با این دستور به redis متصل شوید :

برای احراز هویت دستور زیر را با رمز عبور تعین شده وارد کنید :

اگر مشکلی نبود یعنی تا اینجا سرور های master و slave را تنظیم کردیم و ماشین ها نیز به درستی کار می کنند.

مرحله چهارم – آزمایش صحت عملکرد فرآیند تکرار (Replication) در سرور های Master و Slave

آزمایش صحت عملکرد فرآیند نصب ، باعث می شود تا درک بهتری از نحوه رفتار و عملکرد سرور های Redis داشته باشیم. کاری که می خواهیم انجام دهیم ، اطمینان از صحت عملکرد تنظیماتی که انجام دادیم است و اینکه سرور master می تواند به درستی با سرور slave ارتباط برقرار کند.

در ابتدا به سرور master بوسیله ارتباط SSH متصل می شویم.

به صورت local و با پورت پیش فرض ۶۳۷۹ به Redis متصل می شویم. اگر پورت را تغییر دادید ، شماره پورت صحیح را وارد کنید :

اکنون برای احراز هویت ، دستور زیر را همراه با رمز عبوری که در قسمت تنظیمات سرور master تعیین کردید را وارد کنید :

در پاسخ باید مقدار OK را مشاهده کنید. اکنون فقط باید دستور زیر را وارد کنید :

هر چیزی که درباره سرور master را باید بدانید ، نمایش داده می شود. قسمت Replication# مورد توجه ما است ، که خروجی آن باید مشابه زیر باشد :

با توجه به خط connected_slaves:1 ، مشخص می شود که یک سرور slave در حال صحبت با سرور master می باشد. همچنین آدرس IP سرور و پورت مورد استفاده و وضعیت سرور و اطلاعات دیگر را نیز مشاهده می کنید.

اکنون باید به قسمت Replication# در سرور slave نگاهی بیاندازیم. همین مراحل را که برای سرور master انجام دادید در سرور slave نیز انجام دهید و دستور INFO را اجرا کنید و خروجی را بررسی کنید.

همانطور که مشاهده می کنید نقش (role) سرور به صورت slave تعریف شده و در حال ارتباط با سرور master می باشد.

مرحله پنجم – تبدیل به Slave

معماری کاری که می خواهیم انجام دهیم به این صورت است که اگر دچار خطا یا مشکلی شدیم ، زمان کوتاهی برای حفظ یکپارچگی داده ها برنامه مان داشته باشیم. هر slave ای می تواند به master تبدیل شود. در ابتدا به صورت دستی این کار را انجام می دهیم.

در سرور slave به redis متصل می شویم :

سپس احراز هویت را با قرار دادن رمز عبور در دستور زیر انجام می دهیم :

حالت slave را غیر فعال کنید :

باید پاسخ OK را دریافت کنید. اکنون دستور زیر را وارد کنید :

قسمت Replication# را در خروجی پیدا کنید :

همانطور که انتظار داشتیم سرور slave به master تبدیل شد ، و اکنون آماده قبول ارتباطات از دیگر سرور ها می باشد. اکنون می توانیم از این سرور به صورت موقت به عنوان پشتیبان استفاده کنیم تا مشکل سرور اصلی را رفع کنیم.

نکته : اگر از چندین سرور slave استفاده می کنید که به سرور master وابسته هستند ، همه آنها باید به سرور master جدید متصل شوند.

برای این کار با استفاده از مراحل زیر می توانید این روند را به صورت خودکار اجرا کنید :

  • همه درخواست ها از برنامه کاربردی به سمت Redis را به یک سرور slave دیگر ارسال کنید
  • در سرور slave دستور SLAVEOF NO ONE را اجرا کنید. سرویس redis را مجدد راه اندازی کنید. با این کار عملیات تکرار (Replication) داده متوقف شده و سرور به master تبدیل می شود.
  • در بقیه سرور های Slave دستور SLAVEOF hostname port را وارد کنید و به جای hostname آدرس سرور master جدید و شماره پورت مناسب را قرار دهید. اجرای این دستور عملیات تکرار (Replication) را متوقف کرده ، سپس داده های فعلی که معلق مانده اند را به صورت کامل حذف کرده و مجددا عملیات تکرار (Replication)را با سرور master جدید آغاز می کنند.
  • بعد از بررسی مشکل ممکن است که به خاطر تنظیمات خاص سرور master قبلی ، مجددا همان سرور را به عنوان master داشته باشید

راه های زیادی برای انجام دادن مراحلی که گفتیم وجود دارد. به هر حال شما به یک راه حل مناسب برای زیرساخت خود نیاز دارید و هر راهی را که انتخاب می کنید ، قبل از وقوع شکست واقعی آن را آزمایش کنید.

مرحله ششم – اتصال مجدد به سرور Master

برای بازگشت به سرور master قبلی ، در سرور slave بعد از اتصال به Redis و وارد کردن رمز عبور ، دستور زیر را وارد کنید :

اگر مجددا دستور INFO را اجرا کنید ، باید خروجی تنظیمات اصلی که انجام دادیم را مشاهده کنید.

پایان

ما در این آموزش زیرساختی را برای کلاسترینگ Redsi با دو سرور ، که یکی نقش master و دیگری نقش slave را بازی می کند تنظیم کردیم. همینطور دیدیم که اگر سرور master دچار مشکل شد ، چگونه یک سرور slave را به master تبدیل کنیم تا مشکل رفع شود.

قسمت بعدی شامل خودکار سازی فرآیند تحمل خطا است. همچنین برای ارتباط بین سرور ها از راه حل های VPN مانند OpenVPN برای امنیت داده ها استفاده کنید. دقت کنید که آزمایش صحت عملکرد پیکربندی و تنظیمات فرآیند ها و اسکریپت ها بسیار حیاتی است.

Leave a Reply