How To Create a Multi-Node MySQL Cluster on Ubuntu 18.04

MultiNodeMySQLCluster_Create_tw

آموزش ایجاد کلاستر پایگاه داده چند گره ای در Ubuntu 18.04

How To Create a Multi-Node MySQL Cluster on Ubuntu 18.04

 

معرفی

با راه اندازی کلاستر ( Cluster ) پایگاه های داده توزیع شده MySQL ، می توانید میزان کارایی و بازدهی سیستم مدیریت پایگاه داده MySQL افزایش را تا حد چشمگیری افزایش دهید. یک کلاستر MySQL شامل یک یا چند گره ( Node ) می باشد که شامل گره node مدیریتی ( ndb_mgmd ) است که تنظیمات کلاسترها ذخیره می کنند و گره های داده ( ndbd ) برای کنترل مکان سروری است که داده های کلاستر شده در آن ها ذخیره می شوند. بعد از ارتباط با گره های مدیریتی ، کاربران ( MySQL clients, servers, or native APIs ) مستقیما به گره های داده ای data nodes متصل می شوند.

معمولا در کلاستر MySQL  به دلیل استفاده از از هماهنگ سازی ( Synchronization ) ، تکرار داده ( Replication ) وجود ندارد که برای رسیدن به این هدف ، موتور ( Engine ) پایگاه داده باید از NDBCluster (NDB) استفاده کند. البته این موضوع در یک محیط کلاستر منطقی MySQL تنها با اجزای اضافی صدق می کند. به این معنی که اگر یک کلاستر MySQL داشته باشید و یک کلاستر MySQL  دیگر همزمان داشته باشید ، ممکن است که تکرار داده ایجاد کند.

در یک محیط غیر اشتراکی ، کلاستر MySQL بهترین عملکرد را دارد. در حالت ایده آل ، هیچ دو جزئی نباید سخت افزار اشتراکی یکسان داشته باشند. در این آموزش ، برای سادگی و درک راحت تر ، فقط از سه سرور استفاده می کنیم. دو سرور را برای گره های داده ای تنظیم می کنیم که داده ها بین خودشان هماهنگ ( Sync ) می کنند. سرور سوم برای مدیریت کلاستر و همچنین برای MySQL server/client استفاده می شوند. البته می توانید هر طور که بخواهید سرور ها را بچینید. همچنین می توانید گره های داده ای بیشتری اضافه کنید ، مدیریت کلاستر را از MySQL server/client جدا کنید و سرور های بیشتری را برای مدیریت کلاستر و MySQL server/client اضافه کنید.

 

پیش نیاز ها

برای این آموزش به سه سرور نیاز هست ، دو سرور برای گره های داده MySQL ( ndbd ) و یک سرور برای مدیریت ( ndb_mgmd ) و MySQL server/client (mysqld and mysql). بر روی سرور ها سیستم عامل Ubuntu 18.04 که با یک شبکه اختصاصی به یک دیگر متصل هستند باید نصب و تنظیم شده باشد.

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

  • آدرس ۱۶۸٫۱۰۰٫۰ برای اولین MySQL Cluster data node
  • آدرس ۱۶۸٫۱۰۰٫۱ برای دومین MySQL Cluster data node
  • آدرس ۱۶۸٫۱۰۰٫۲ برای Cluster Manager & MySQL server node

همچنین سطح دسترسی مورد نیاز کاربر برای اجرای دستورات و انجام تنظیمات باید در گروه Sudo یا دسترسی ریشه Root باشد.

 

مرحله اول – نصب وتنظیم مدیریت کلاستر Cluster Manager

با دانلود و نصب ( ndb_mgmd ) MySQL Cluster Manager  شروع می کنیم. برای نصب مدیریت کلاستر باید فایل نصب کننده .deb مورد نیاز را از صفحه دانلود رسمی MySQL Cluster بدست بیاوریم.

در این صفحه در قسمت سیستم عامل Ubuntu Linux را انتخاب می کنیم و در قسمت نسخه سیستم عامل گزینه Ubuntu Linux 18.04 (x86, 64-bit) را انتخاب می کنیم. کمی پایینتر در قسمت DEB Package, NDB Management Server را پیدا کرده که چند مورد تکراری وجود دارد و باید روی لینک دانلود گزینه ای که فاقد dbgsym هست، کلیک کنید. در ادامه صفحه دانلود نمایش داده می شود که بر روی گزینه No thanks, just start my download راست کلیک کنید و لینک دانلود را کپی کنید.

الان به سرور مدیریت کلاستر وارد شوید و این فایل را در سرور دانلود کنید :

نصب ndb_mgmd با استفاده از dpkg :

قبل از اولین اجرا ndb_mgmd باید آن را تنظیم و پیکربندی کنیم. انجام پیکربندی مناسب ، باعث می شود تا هماهنگ سازی درست و توزیع بار در بین گره های داده را تضمین می کند.

در کلاستر MySQL اولین قسمتی که باید نصب و تنظیم شود ، Cluster Manager می باشد که برای اجرا کردن این قسمت نیاز به یک فایل تنظیمات هست. برای این کار در مسیر /var/lib/mysql-cluster/config.ini فایل تنظیمات را قرار می دهیم.

در سرور Cluster Manager ، یک دایرکتوری در مسیر زیر ایجاد کنید تا فایل را در آن جا قرار دهید :

سپس فایل تنظیمات را ایجاد و با ویرایشگر متن پیشنهادی سیستم آن را ویرایش کنید :

متن زیر را در فایل تنظیمات کپی کنید :

بعد از کپی کردن متن ، دقت کنید که مقادیر hostname با آدرس IP سرور ها در شبکه به درستی تنظیم شده باشند. تنظیم مقدار hostname یک نکته امنیتی مهم هست که باعث می شود دیگر سرور ها به سرور Cluster Manager متصل نشوند.

فایل را ذخیره کنید و خارج شوید.

این حداقل تنظیمات برای پیکر بندی MySQL Cluster می باشد. شما باید پارامتر های این فایل را بسته به نیاز های خودتان تغییر دهید. برای مطالعه کامل تنظیمات می توانید به مستندات MySQL Cluster مراجعه کنید، که فایل تنظیمات کامل ndb_mgmd در آنجا قرار دارد.

در فایل تنظمیات بالا شما می توانید تعداد گره های داده ای data node ( ndbd ) و گره های MySQL server (mysqld) را در قسمت های مربوطه اضافه کنید.

الان می توانیم برنامه مدیریت کلاستر ( ndb_mgmd ) را با آپشن –f برای مشخص کردن فایل تنظیمات اجرا کنیم :

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

نمایش این خروجی به این معنی است که MySQL Cluster Manager بر روی سرور به درستی نصب و پیکربندی شده است. باید تنظیمات سرور نیز به نحوی تغییر کند هنگام روش شدن سیستم MySQL Cluster Manager به صورت خودکار راه اندازی شود. برای این کار باید سرویس سیستم مربوطه را ایجاد و فعال کنید.

قبل از ایجاد سرویس systemd ، سرویس در حال اجرا را باید قطع کنیم :

فایل تظیمات واحد systemd را باز و ویرایش کنید

متن زیر را کپی کنید :

تنظیماتی که در اینجا برای systemd انجام شده ، حداقل تنظیمات مورد نیاز برای start و stop و restart پردازش ndb_mgmd می باشد. برای یادگیری بیشتر در زمینه تنظیمات راه اندازی خودکار سرویس ها ، راهنمای systemd را مطالعه کنید.

در انتها نیز فایل را ذخیره کنید و خارج شوید.

برای اعمال تغییرات انجام شده در تنظیمات systemd از daemon-reload استفاده می کنیم :

برای فعال شدن خودکار سرویس MySQL Cluster Manager هنگام روشن شدن سرور ، باید سرویس آن را enable کنید :

در انتها سرویس را راه اندازی می کنیم :

با دستور زیر می توانید وضعیت فعال بودن سرویس NDB Cluster Management را بررسی کنید :

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

این خروجی نشان می دهد که سرور ndb_mgmd MySQL Cluster Management در حال اجرا به عنوان یک سرویس systemd می باشد.

در آخرین مرحله از این قسمت از تنظیمات Cluster Manager باید اجازه ورود ارتباطات از گره های MySQL Cluster دیگر به این سرور در شبکه خصوصی داده شود. با اضافه کرده رول های فایروال زیر ، اجاز ورود درخواست های شبکه از دو سرور Data Node دیگر داده می شود :

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

الان باید سرویس Cluster Manager در حال اجرا و بالا باشد ، و توانایی ارتباط با سرور های کلاستر دیگر را در شبکه خصوصی داشته باشد.

 

مرحله دوم – نصب و پیکر بندی گره های داده ای

نکته : تمام دستورات در این قسمت باید بر روی هر دو سرور data node اجرا شوند.

در این قسمت بر روی سرور data node ، سرویس ndbd MySQL Cluster را نصب کرده و پیکر بندی node ها را برای ارتباط با Cluster Manager انجام می دهیم.

برای نصب Data Node باید فایل نصب .deb مناسب را از صفحه دانلود رسمی MySQL بدست بیاوریم.

در این صفحه در قسمت انتخاب سیستم عامل Ubuntu Linux را انتخاب می کنیم و در قسمت نسخه سیستم عامل گزینه Ubuntu Linux 18.04 (x86, 64-bit) را انتخاب می کنیم. کمی پایینتر در قسمت DEB Package, NDB Management Server را پیدا کرده و روی لینک دانلود برای گزینه ای که بدون dbgsym هست، کلیک کنید. در ادامه صفحه دانلود نمایش داده می شود که بر رویی گزینه No thanks, just start my download راست کلیک کرده و لینک دانلود را کپی کنید.

الان به اولین سرور data node ( که در این آموزش ۱۹۸٫۵۱٫۱۰۰٫۰ هست ) وارد شده و فایل .deb را روی سرور دانلود می کنیم :

قبل از نصب data bode ، باید پیش نیاز های آن را نصب کنیم ، libclass-methodmaker-perl :

اکنون می توانیم data node را با استفاده dpkg نصب کنیم :

data node تنظیمات را از مسیر استاندارد MySQL ( etc/my.cnf/ ) دریافت می کند. این فایل را با یک ویرایشگر متنی ایجاد و باز کنید :

تنظیمات زیر را به فایل اضافه کنید :

در اینجا محل Cluster Manager مشخص شده است که تنظیمات مورد نیاز برای شروع ndbd هست. بقیه تنظیمات مستقیما از مدیر گرفته می شود.

فایل را ذخیره کرده و خارج شوید.

در این مثال ، data node داد ها را به ازای هر کدام از تنظیمات مدیریت ، از دایرکتوری /usr/local/mysql/data پیدا می کند. قبل از راه اندازی سرویس ، این دایرکتوری را ایجاد می کنیم  :

اکنون می توانیم سرویس data node را با دستور زیر راه اندازی کنیم :

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

این خروجی به این معنی است که سرویس NDB data node با موفقیت بر روی سرور نصب و راه اندازی شده است.

خوب ما نیاز داریم که ارتباطات ورودی از شبکه اختصاصی از گره های کلاستر MySQL دیگر اجازه ورود به سرور را داشته باشند.اگر ufw را هنگام راه اندازی سرور تنظیم نکرده باشید ، می توانید آن را برای سرویس ndbd تنظیم کنید.

با اضافه کردن رول های فایروال که در زیر آورده شده ، اجازه ارتباطات ورودی به سرور از data node ها و Cluster Manafer های دیگر داده می شود :

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

اکنون سرور MySQL data node شما می تواند با هر دو سرور Cluster Manager و سرور های data node دیگر ارتباط برقرار کند.

در انتها ، سرویس data node را برای راه اندازی خودکار بعد از روشن شدن سرور ، تنظیم می کنیم. در اینجا مانند روش استفاده شده برای Cluster Manager استفاده می کنیم و یک سرویس systemd ایجاد می کنیم .

قبل از ایجاد سرویس ، باید برنامه در حال اجرا ndbd را متوقف کنیم :

حالا فایل مربوط به تنظیمات سرویس systemd را ویرایش می کنیم :

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

نظیماتی که در اینجا برای systemd انجام شده ، حداقل تنظیمات مورد نیاز برای start و stop و restart پردازش ndbd می باشد. برای یادگیری بیشتر در زمینه تنظیمات این قسمت راهنمای systemd را مطالعه کنید.

در انتها نیز فایل را ذخیره کنید و خارج شوید.

برای اعمال تغییرات انجام شده در تنظیمات systemd از daemon-reload استفاده می کنیم :

برای فعال شدن خودکار سرویس data node هنگام روشن شدن سرور ، باید آن را enable کنید :

در انتها سرویس را راه اندازی می کنیم :

با دستور زیر می توانید وضعیت فعال بودن سرویس NDB Cluster Management را بررسی کنید :

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

این خروجی نشان می دهد که سرور ndbd MySQL Cluster data node در حال اجرا به عنوان یک سرویس systemd می باشد. سرور data node شما به MySQL Cluster Manager متصل شده و به خوبی عمل می کند.

هنگامی که این تنظیمات در سرور data node شما به پایان رسید ، همین مراحل را برای تنظیم سرور data node دیگر انجام دهید ( در این آموزش سرور ۱۹۸٫۵۱٫۱۰۰٫۱ می باشد )

 

مرحله سوم – راه اندازی و پیکربندی MySQL Server and Client

بر روی یک سرور MySQL استاندارد که به منابع APT Ubuntu دسترسی دارد ، نمی توان MySQL Cluster Engine NDB را نصب کرد. برای این کار نیاز هست که حالت شخصی سازی شده پکیج های SQL را با برنامه MySQL Cluster نصب شده در این آموزش را نصب کنیم.

مجددا باید فایل باینری MySQL Cluster Server را از صفحه رسمی دانلود MySQL دانلود کنیم.

در این صفحه از قسمت سیستم عامل ( Select Operating System ) ، گزینه Ubuntu Linux را انتخاب می کنیم. سپس در قسمت انتخاب نسخه سیستم عامل ( Select OS Version ) گزینه Ubuntu Linux 18.04 (x86, 64-bit) را انتخاب می کنیم. در ادامه صفحه را به سمت پایین بکشید تا به گزینه DEB Bundle برسید ( در اولین گزینه لیست دانلود قابل مشاهده هست ) ، سپس بر روی لینک دانلود کلیک کنید. صفحه مربوطه به دانلود برای شما نمایش داده می شود که بر روی گزینه No thanks, just start my download راست کلیک کرده و لینک دانلود را کپی کنید.

سپس به سرور مربوطه به مدیریت کلاستر ( Cluster Manager ) که در این آموزش ۱۹۸٫۵۱٫۱۰۰٫۲ می باشد وارد شوید و فایل .tar را دانلود کنید ( دقت کنید که قبلا روی مدیریت کلاستر ، MySQL را به عنوان Cluster Manager نصب کردیم و در یک طراحی واقعی و محیط تجاری  باید روی یک سرور node دیگر نصب کنید ) :

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

الان می توانید فایل را از حالت فشرده خارج کنیم ،

به مسیر دایرکتوری استخراج شده که شامل فایل های باینری MySQL Cluster هستند وارد شوید :

الان باید پیش نیاز های MySQL Cluster که همراه با فایل آرشیو .ter استخراج شده است را نصب کنیم :

هنگام نصب mysql-cluster-community-server ، تنظیماتی نمایش داده می شود که از شما برای تنظیم رمز عبور کاربر ریشه root برای پایگاه داده MySQL سئوال می شود. یک رمز عبور قوی و امن را انتخاب کنید و OK را بزنید. سپس مجددا رمز عبور را وارد کنید و OK را بزنید تا نصب کامل شود.

الان می توانیم فایل باینری نصب MySQL سرور را با استفاده از dpkg نصب کنیم :

حالا باید تنظیمات MySQL را انجام دهیم. تنظیمات MySQl Server در مسیر فایل پیش فرض /etc/mysql/my.cnf ذخیره می شود. فایل تنظیمات را با یک ویرایشگر باز کنید :

شما باید متن زیر را ببینید :

به انتهای این متن ، قسمت زیر را اضافه کنید :

فایل را ذخیره کنید و خارج شوید.

سرویس MySQL را مجددا راه اندازی کنید :

به صورت پیش فرض MySQL بعد از روشن شدن مجدد سرور راه اندازی می شود. اگر این اتفاق نیافتاد دستور زیر را وارد کنید :

شما الان بر روی سرور SQL ، Cluster Manager / MySQL Server را اه اندازی کردید.

در مرحله بعد ، چند دستور را برای بررسی نصب و عملکرد مناسب MySQL Cluster اجرا می کنیم.

 

مرحله چهارم – بررسی عملکر MySQL Cluster

برای بررسی نصب MySQL Cluster به سرور Cluster Manager / SQL Server وارد شوید. در محیط دستوری سرور ، به قسمت کاربری  MySQL Client  با کاربر ریشه root که قبلا تنظیم کردیم ، با دستور زیر وارد می شویم :

رمز عبور کاربر root را وارد کرده و کلید Enter را بزنید :

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

در محیط MySQL Client دستور زیر را وارد کنید :

شما باید اطلاعات زیر را درباره NDB مشاهده کنید که با مشخصات پارامترهای اتصال شروع می شوند :

این خروجی نشان می دهد که اتصال به MySQL Cluster به درستی انجام شده است.

نکته ای که در این جا باید به آن توجه کنید مقدار ready_data_nodes: 2 هست. این گزینه تعداد گره های شما را برای پشتیبانی پایگاه داده نشان می دهد ، و این که اگر یکی از پایگاه های داده با خطا مواجه شود MySQL Cluster به کار خود ادامه می دهد. همچنین درخواست های SQL query بین دو سرور Node تقسیم بار Load Balance می شود.

برای تست پایداری سیستم شما می توانید یکی از سرور های کلاستر را خاموش کنید. ساده ترین راه ، راه اندازی مجدد یکی از سرور های data node هست که به منظور تست کامل روند بازیابی انجام می شود. بعد از انجام تست می توانید مشاهده کنید که مقدار number_of_ready_data_nodes به یک تغییر کرده و بعد از روشن شدن و اتصال مجدد سرور data node ای که راه اندازی مجدد شده بود به مقدار آن مجددا به ۲ تغییر می کند.

برای خروج از محیط دستوری MySQL از دستور quite یا کلید ترکیبی CRTL+D استفاده کنید.

این اولین تست بود که نشان می دهد MySQL Cluster ، Server و Client به درستی کار می کنند. در ادامه تست دیگری را برای صحت عملکرد و کارایی MySQL Cluster انجام می دهیم.

کنسول مدیریت کلاستر را باز کرده و دستر ndb_mdm را وارد کنید :

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

در کنسول یک بار دستور SHOW را وارد کنید و کلید ENTER را بزنید :

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

این خروجی نشان می دهد که دو سرور data node که با node-id های ۱ و ۲ مشخص شده اند به سرور متصل شده اند. همچنین یک سرور مدیریت با node-id شماره ۱ و MySQL Server با node-id شماره ۴ نیز به متصل هستند. اطلاعات بیشتر هر node را با دستور STATUS و شماره node مربوطه می توانید مشاهده کنید :

دستور بالا وضعیت ، مشخصات نسخه MySQL و نسخه NDB مربوطه به node 2 را نمایش می دهد :

با دستور quite می توانید از محیط کنسول خارج شوید.

کنسول مدیریت بسیار قدرتمند هست و آپشن ها و گزینه های زیادی را برای مدیریت کلاستر و داده ها در اختیار شما قرار می دهد که شامل پشتیبان گیری آنلاین نیز می باشد. برای اطلاعات بیشتر مستندات رسمی MySQL را می توانید مطالعه کنید.

در این قسمت شما به طور کامل نصب MySQL Cluster را تست کردید. در آخرین مرحله تست در این آموزش داده های آزمایشی را ایجاد و به MySQL Cluster وارد می کنیم.

 

مرحله پنجم – وارد کردن داده به  MySQL Cluster

برای نمایش عملکرد واقعی کلاستر یک جدول جدید با ساتفاده از NDB ایجاد کرده و برخی داده های آزمایشی را وارد می کنیم. دقت کنید که برای استفاده از عملکرد کلاستر ، موتور ( engine ) باید به صراحت بر روی NDB تنظیم شده باشد. اگر از InnoDB ( پیش فرض ) یا هر موتور دیگر استفاده می کنید ، شما نمی توانید از این کلاستر استفاده کنید.

در ابتدا یک پایگاه داده به نام clustertest با دستور زیر ایجاد می کنیم :

سپس وارد پایگاه داده جدید می شویم :

یک جدول ساده به نام test_table ایجاد می کنیم :

در این قسمت به صراحت موتور ndbcluster برای استفاده از کلاستر مشخص شده است.

حالا می توانیم با استفاده از SQL Query داده ها را وارد کنیم :

برای بررسی صحت اطلاعات وارد شده دستور select زیر را اجرا کنید :

وقتی از طریق یک ndbcluster داده را وارد می کنید و آن را نمایش می دهید ، تقسیم کننده بار درخواست را بین data node های فعال تقسم می کند. این کار پایداری و کارایی پایگاه داده MySQL شما را افزایش می دهد.

همچنین شما می توانید موتور ذخیره سازی پیش فرض را در فایل my.cnf به ndbcluster تغییر دهید ، که این کار را قبل انجام دادیم. اگر این کار را انجام داده باشید دیگر نیازی به مشخص کردن موتور در قسمت ساخت جدول نیست. برای اطلاعات بیشتر می توانید از منبع راهنمای MySQL کمک بگیرید.

 

نتیجه گیری

در این آموزش به شما نشان دادیم که چطور یک MySQL Cluster را بر روی سرور های Ubuntu 18.04 نصب و پیکربندی کنید. حتما به این نکته توجه داشته باشید که روش بکار برده شده ، حداقل یک معماری و طراحی نصب و پیکربندی در این آموزش آورده شده و گزینه های پیشرفته زیادی وجود دارد که باید قبل از راه اندازی عملیاتی و تجاری یک MySQL Cluster یاد بگیرید ( برای مثال ، تهیه پشتیبان گیری ). برای آموزش بیشتر می توانید از مستندات رسمی MySQL Cluster استفاده کنید.

 

 

 

Leave a Reply