پایگاه داده توزیع یافته کلاستر MySQL امکان دسترسی و بازده بالایی برای سیستم مدیریت پایگاه داده MySQL فراهم می‌سازد. یک کلاستر MySQL شامل یک یا چند گره مدیریتی (ndb_mgmd) است که پیکربندی کلاستر را ذخیره کرده و گره‌های داده (ndbd) که داده‌های کلاستر در آن ذخیره می‌شوند را کنترل می‌کنند. کلاینت‌ها (کلاینت‌های MySQL، سرورها یا API های بومی) پس از ارتباط با گره مدیریت، به طور مستقیم با این گره‌های داده ارتباط می‌گیرند.

در کلاستر MySQL معمولاً هیچ رونوشتی (replication) از داده‌ها نگهداری نمی‌شود، بلکه به جای آن از همگام‌سازی گره‌های داده استفاده می‌شود. به همین منظور یک موتور داده ویژه به نام NDBCluster یا (NDB) باید مورد استفاده قرار گیرد. بهتر است تصور کنیم که کلاستر یک محیط MySQL منطقی منفرد با اجزای دارای افزونگی است. از این رو کلاستر MySQL می‌تواند در ایجاد رونوشت با کلاسترهای MySQL دیگر همکاری کند.

کلاستر MySQL در محیطی که هیچ چیز به اشتراک گذاشته نشود، بهترین عملکرد خود را دارد. به طور ایده‌آل، هیچ دو جزئی در این کلاستر نباید در هیچ سخت‌افزاری شریک باشند. به منظور بیان و نمایش ساده‌تر موضوع خود را به استفاده از تنها سه سرور محدود می‌کنیم. ما دو سرور را به عنوان گره‌های داده راه‌اندازی می‌کنیم که داده‌ها بین آن‌ها همگام‌سازی می‌شوند. سرور سوم برای مدیریت کلاستر و همچنین برای سرور/کلاینت MySQL مورد استفاده قرار می‌گیرد. اگر سرورهای بیشتری در آینده به کلاستر اضافه شوند، می‌توانید گره‌های داده بیشتری به کلاستر اضافه کنید، سرور مدیر کلاستر را از سرور/کلاینت MySQL جدا کنید و سرورهای بیشتری را به عنوان مدیر کلاستر و سرور/کلاینت‌های MySQL پیکربندی نمایید.

پیش‌نیازها

برای تکمیل این راهنما باید در مجموع سه سرور داشته باشید که دو مورد از آن‌ها به عنوان گره‌های افزونگی داده‌ای MySQL یا (ndbd) و یک سرور به عنوان مدیر کلاستر (ndb_mgmd) و سرور /کلاینت MySQL به صورت (mysqld و mysql) استفاده می‌شوند.

  • سه سرور اوبونتو 18.04 که بین این سرورها باید شبکه خصوصی وجود داشته باشد.
  • یک کاربر غیر root با دسترسی‌های sudo برای هر سرور باید پیکربندی شده باشد.
    • اطمینان حاصل کنید که IP های خصوصی سرورهای خود را جایی یادداشت کرده‌اید. در این راهنما آی‌پی‌های خصوصی سرورها به شرح زیر هستند:
    • 198.51.100.0 آی‌پی گره نخست داده‌ای کلاستر MySQL است.
    • 198.51.100.1 آی‌پی گره داده‌ای دوم است
    • 198.51.100.2 آی‌پی گره مدیر کلاستر و سرور MySQL است.

زمانی که سرورها آماده شدند، کاربر غیر root پیکربندی شد و آدرس‌های آی‌پی برای هر سه گره را یادداشت کردید؛ آماده هستیم تا این راهنما را آغاز کنیم.

گام 1 – نصب و پیکربندی مدیر کلاستر (Cluster Manager)

در ابتدا کار خود را با دانلود و نصب مدیر کلاستر MySQL یا (ndb_mgmd) آغاز می‌کنیم. برای نصب مدیر کلاستر قبلاً باید برنامه نصب مناسب deb. را از صفحه دانلود کلاستر رسمی MySQL دانلود کرده باشیم. در این صفحه در بخش زیر Select Operating System، گزینه Ubuntu Linux را انتخاب کنید. سپس زیر گزینه Select OS Version، آیتم (Ubuntu Linux 18.04 (x86, 64-bit را انتخاب نمایید.

به بخش پایین صفحه مراجعه کنید تا این که گزینه DEB Package, NDB Management Server را ببینید و بر روی لینک دانلودی که شامل dbgsym نیست کلیک کنید. در صورتی که به نمادهای دیباگ نیاز دارید، می‌توانید گزینه دیگر را انتخاب کنید. سپس به صفحه آغاز دانلود هدایت می‌شوید. در این جا بر روی گزینه No thanks, just start my download کلیک کرده و لینک فایل deb. را کپی کنید. اینک وارد سرور مدیر کلاستر خود شده (در این راهنما آی‌پی 198.51.100.2 است) و این فایل deb. را دانلود کنید:

cd ~
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-community-management-server_7.6.6-1ubuntu18.04_amd64.deb

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

sudo dpkg -i mysql-cluster-community-management-server_7.6.6-1ubuntu18.04_amd64.deb

اینک باید پیش از اجرا، ndb_mgmd را پیکربندی کنیم، چون پیکربندی صحیح تضمین می‌کند که همگام‌سازی صحیح و توزیع بار مناسبی بین گره‌های داده وجود دارد. مدیر کلاستر باید نخستین جزئی باشد که در کلاستر MySQL راه‌اندازی می‌شود. این مدیر نیازمند یک فایل پیکربندی است که به صورت یک آرگومان به فایل اجرایی ارسال می‌شود. ما فایل پیکربندی زیر را ایجاد و استفاده خواهیم کرد: var/lib/mysql-cluster/config.ini/. در سرور مدیر کلاستر دایرکتوری var/lib/mysql-cluster/ را به طور مستقیم در جایی که فایل قرار خواهد گرفت ایجاد کنید:

sudo mkdir /var/lib/mysql-cluster

سپس فایل پیکربندی را با استفاده ویرایشگر متنی مورد علاقه خود ایجاد و ویرایش کنید:

sudo nano /var/lib/mysql-cluster/config.ini

متن زیر را در ویرایشگر وارد کنید:

[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2  # Number of replicas

[ndb_mgmd]
# Management process options:
hostname=198.51.100.2 # Hostname of the manager
datadir=/var/lib/mysql-cluster  # Directory for the log files

[ndbd]
hostname=198.51.100.0 # Hostname/IP of the first data node
NodeId=2            # Node ID for this data node
datadir=/usr/local/mysql/data   # Remote directory for the data files

[ndbd]
hostname=198.51.100.1 # Hostname/IP of the second data node
NodeId=3            # Node ID for this data node
datadir=/usr/local/mysql/data   # Remote directory for the data files

[mysqld]
# SQL node options:
hostname=198.51.100.2 # In our case the MySQL server/client is on the same Droplet as the cluster manager

پس از چسباندن متن فوق، مطمئن شوید که مقادیر hostname با آی‌پی‌های صحیح سرورهایی که پیکربندی خواهند شد جایگزین شده است. تنظیم پارامتر hostname یک معیار امنیتی مهم است که از اتصال سرورهای دیگر به مدیر کلاستر جلوگیری می‌کند. فایل را ذخیره کرده و از ویرایشگر متنی خارج شوید.

فایل فوق یک فایل پیکربندی کمینه برای کلاستر MySQL محسوب می‌شود. شما می‌توانید پارامترهای این فایل را بسته به نیازهای محیط production تغییر دهید. برای این که با یک فایل پیکربندی نمونه کاملاً تنظیم شده ndb_mgmd آشنا شوید، می‌توانید از مستندات کلاستر MySQL استفاده کنید.

در فایل فوق می‌توانید اجزای دیگری مانند گره‌های داده (ndbd) یا گره‌های سرور MySQL یعنی (mysqld) را با اضافه کردن آدرس‌ها به بخش مربوطه تنظیم کنید. اینک می‌توانیم مدیر کلاستر را با اجرای فایل باینری ndb_mgmd و تعیین فایل پیکربندی با استفاده از فلگ f- آغاز کنیم:

sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini

در این مرحله خروجی زیر را می‌بینید:

MySQL Cluster Management Server mysql-5.7.22 ndb-7.6.6
2018-07-25 21:48:39 [MgmtSrvr] INFO-- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2018-07-25 21:48:39 [MgmtSrvr] INFO-- Successfully created config directory

این مسئله نشان می‌دهد که سرور مدیریت کلاستر MySQL با موفقیت نصب شده و بر روی سرور دبیان ما در حال اجرا است. به طور ایده‎آل، دوست داریم که سرور مدیریت کلاستر به طور خودکار در زمان بوت آغاز شود. برای این وضعیت باید یک سرویس سیستمی را ایجاد و فعال کنیم. پیش از ایجاد چنین سرویسی باید سرور در حال اجرا را متوقف کنیم:

sudo pkill -f ndb_mgmd

اینک فایل واحد systemd را با استفاده از ویرایشگر مورد علاقه خود باز کنید:

sudo nano /etc/systemd/system/ndb_mgmd.service

کد زیر را در آن بچسبانید:

[Unit]
Description=MySQL NDB Cluster Management Server
After=network.target auditd.service

[Service]
Type=forking
ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

در این بخش مجموعه کمی از گزینه‌ها را برای آموزش شیوه آغاز، توقف و ری‌استارت کردن پروسه ndb_mgmd به system معرفی کرده‌ایم. برای یادگیری موارد بیشتر در مورد نقش این گزینه‌ها در فایل پیکربندی واحد سیستمی به راهنمای آن مراجعه کنید. فایل را ذخیره کرده و خارج شوید. اینک پیکربندی مدیر system را با استفاده از دستور مجدداً بارگذاری کنید:

sudo systemctl daemon-reload

ما سرویسی که اخیراً ایجاد کرده بودیم را فعال نمودیم به طوری که مدیر کلاستر MySQL در هنگام ریبوت شدن سیستم مجدداً آغاز می‌شود.

sudo systemctl enable ndb_mgmd

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

sudo systemctl start ndb_mgmd

می‌توانید عملکرد صحیح سرویس مدیریت کلاستر NDB را با دستور زیر بررسی کنید:

sudo systemctl status ndb_mgmd

می‌بایست خروجی زیر را ببینید:

● ndb_mgmd.service - MySQL NDB Cluster Management Server
   Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-07-26 21:23:37 UTC; 3s ago
  Process: 11184 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS)
 Main PID: 11193 (ndb_mgmd)
    Tasks: 11 (limit: 4915)
   CGroup: /system.slice/ndb_mgmd.service
           └─11193 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

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

sudo ufw allow from 198.51.100.0
sudo ufw allow from 198.51.100.1

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

Rule added

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

گام 2 – نصب و پیکربندی گره‌های داده‌ای

توجه کنید که همه دستورها در این بخش باید بر روی هر دو گره داده‌ای اجرا شوند. در این مرحله ما daemon گره داده‌های کلاستر MySQL به نام ndbd را نصب می‌کنیم و گره‌ها را طوری پیکربندی می‌کنیم که بتوانند با مدیر کلاستر ارتباط داشته باشند.

برای فایل‌های باینری روی گره‌های داده‌های در ابتدا باید فایل‌های نصبی deb. مناسب را از صفحه دانلود رسمی MySQL دانلود کنیم. بدین منظور در زیر بخش Select Operating System، گزینه buntu Linux را انتخاب کنید. سپس زیر عنوان Select OS Version، گزینه (Ubuntu Linux 18.04 (x86, 64-bit را انتخاب نمایید.

به بخش پایین اسکرول کنید تا گزینه DEB Package, NDB Data Node Binaries را ببینید و بر روی لینک Download برای فایلی که شامل dbgsym نیست کلیک کنید. بدین ترتیب به صفحه Begin Your Download می‌روید که با راست کلیک روی گزینه No thanks, just start my download می‌توانید لینک فایل deb. را کپی کنید. اینک وارد سرور گره داده‌ای شوید و فایل deb. را دانلود کنید.

cd ~
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster-community-data-node_7.6.6-1ubuntu18.04_amd64.deb

پیش از آن که فایل باینری گره داده‌ای را نصب کنیم باید وابستگی libclass-methodmaker-perl را نصب نماییم:

sudo apt update
sudo apt install libclass-methodmaker-perl

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

sudo dpkg -i mysql-cluster-community-data-node_7.6.6-1ubuntu18.04_amd64.deb

گره‌های داده‌ای پیکربندی خود را از مکان استاندارد MySQL یعنی (etc/my.cnf/) می‌گیرند. این فایل را با استفاده از ویرایشگر متنی ایجاد کرده و ویرایش می‌کنیم:

sudo nano /etc/my.cnf

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

mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=198.51.100.2 # location of cluster manager

معرفی مکان گره مدیر کلاستر تنها نیازمندی پیکربندی است که برای آغاز ndbd لازم است، چون باقی پیکربندی‌ها به طور مستقیم از مدیر کلاستر دریافت خواهد شد. فایل را ذخیره کرده و خارج شوید. در این مثال، گره داده‌ای درمی‌یابد که دایرکتوری داده بر اساس پیکربندی مدیر در مکان usr/local/mysql/data/ است. پیش از آغاز daemon این دایرکتوری را روی گره ایجاد می‌کنیم:

sudo mkdir -p /usr/local/mysql/data

اینک می‌توانیم گره داده را با استفاده از دستور زیر آغاز کنیم:

sudo ndbd

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

2018-07-18 19:48:21 [ndbd] INFO-- Angel connected to '198.51.100.2:1186'
2018-07-18 19:48:21 [ndbd] INFO-- Angel allocated nodeid: 2

daemon گره داده NDB به طور موفقیت‌آمیزی نصب شده و اینک روی سرور در حال اجرا است. همچنین باید امکن دریافت اتصال‌های ورودی از گره‌های کلاستر MySQL بر روی شبکه خصوصی را فعال کنیم. اگر فایروال ufw را در زمان راه‌اندازی سرور پیکربندی نکرده باشید، می‌توانید از بخشی که در ادامه معرفی می‌کنیم بگذرید و به بخش راه‌اندازی سرویس system برای ndbd بروید. در این بخش قواعدی برای اتصال‌های ورودی از مدیر کلاستر و دیگر گره‌های داده‌ای تعریف می‌کنیم:

sudo ufw allow from 198.51.100.0
sudo ufw allow from 198.51.100.2

پس از وارد کردن دستورهای فوق باید خروجی زیر را ببینید:

Rule added

سرورهای گره داده‌ای MySQL اینک می‌توانند با مدیر کلاستر و دیگر گره‌های داده بر روی شبکه خصوصی ارتباط بگیرند. در نهایت بهتر خواهد بود که از یک daemon برای گره داده استفاده کنیم تا زمانی که سرور بوت می‌شود به طور خودکار این پروسه آغاز شود. در این جا نیز از همان رویه‌ای که برای مدیر کلاستر استفاده کردیم بهره می‌گیریم و یک سرویس systemd ایجاد می‌کنیم. پیش از ایجاد چنین سرویسی باید پروسه در حال اجرای ndbd را متوقف کنیم:

sudo pkill -f ndbd

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

sudo nano /etc/systemd/system/ndbd.service

کد زیر را در آن وارد کنید:

[Unit]
Description=MySQL NDB Data Node Daemon
After=network.target auditd.service

[Service]
Type=forking
ExecStart=/usr/sbin/ndbd
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

در این بخش مجموعه کمینه‌ای از گزینه‌ها وارد کردیم تا به systemd بگوییم که چگونه می‌تواند پروسه ndbd را آغاز، متوقف و ری‌استارت کند. برای دانستن موارد بیشتر در مورد این پیکربندی می‌توانید به مستندات آن مراجعه کنید. فایل را ذخیره کرده و خارج شوید. اینک پیکربندی مدیر systemd را با استفاده از دستور زیر مجدداً بارگذاری می‌کنیم:

sudo systemctl daemon-reload

در این مرحله سرویسی که ایجاد کردیم، فعال شده است و هر بار که سرور بوت شود این پروسه نیز روی گره داده آغاز می‌شود:

sudo systemctl enable ndbd

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

sudo systemctl start ndbd

می‌توانید با دستور زیر بررسی کنید که سرویس مدیریت کلاستر NDB در حال اجرا است یا نه:

sudo systemctl status ndbd

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

● ndbd.service - MySQL NDB Data Node Daemon
   Loaded: loaded (/etc/systemd/system/ndbd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-07-26 20:56:29 UTC; 8s ago
  Process: 11972 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS)
 Main PID: 11984 (ndbd)
    Tasks: 46 (limit: 4915)
   CGroup: /system.slice/ndbd.service
           ├─11984 /usr/sbin/ndbd
           └─11987 /usr/sbin/ndbd

خروجی فوق نشان می‌دهد که daemon گره داده کلاستر MySQL ndbd اینک به عنوان یک سرویس سیستمی در حال اجرا است. گره داده باید کاملاً فعال باشد و بتواند با مدیر کلاستر MySQL ارتباط بگیرد. زمانی که مراحل راه‌اندازی برای گره اول پایان یافت، همه مراحل فوق را در مورد گره داده‌ای دیگر نیز اجرا کنید.

گام 3 – پیکربندی و آغاز سرور و کلاینت MySQL

یک سرور استاندارد MySQL مانند آن که در ریپازیتوری APT اوبونتو وجود دارد، از موتور کلاینت MySQL NDB پشتیبانی نمی‌کند. این بدان معنی است که ما باید یک سرور SQL که برای نرم‌افزار کلاستر MySQL دیگری بسته‌بندی شده است نصب کنیم.

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

در این مرحله وارد سرور مدیر کلاستر شوید و این فایل فشرده را دانلود کنید. به خاطر داشته باشید که ما مشغول نصب سرور MySQL روی همان گرهی هستیم که مدیر کلاستر است؛ اما در محیط پروداکشن، این daemon ها باید روی گره‌های متفاوتی اجرا شوند.

cd ~
wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/mysql-cluster_7.6.6-1ubuntu18.04_amd64.deb-bundle.tar

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

mkdir install

سپس فایل را در این دایرکتوری از حالت فشرده خارج می‌کنیم:

tar -xvf mysql-cluster_7.6.6-1ubuntu18.04_amd64.deb-bundle.tar -C install/

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

cd install

پیش از نصب فایل‌های باینری سرور MySQL باید چند وابستگی را نصب کنیم:

sudo apt update
sudo apt install libaio1 libmecab2

سپس لازم است وابستگی‌های سرور کلاستر MySQL را که به همراه فایل فشرده بسته‌بندی شده بود نصب کنیم:

sudo dpkg -i mysql-common_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-cluster-community-client_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-client_7.6.6-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-cluster-community-server_7.6.6-1ubuntu18.04_amd64.deb

زمانی که نوبت نصب mysql-cluster-community-server می‌رسد یک اعلان پیکربندی ظاهر می‌شود که از شما می‌خواهد تا رمز عبوری برای حساب کاربری root پایگاه داده MySQL خود تعیین کنید. در این مرحله باید رمز عبور قدرتمندی وارد کرده و <ok> را بزنید. رمز عبور root را مجدداً وارد کنید و دوباره <ok> را بزنید تا نصب کامل شود. اینک می‌توانیم فایل باینری سرور MySQL را با استفاده از دستور زیر نصب کنیم:

mysql-server_7.6.6-1ubuntu18.04_amd64.deb

می‌بایست این نصب سرور MySQL را پیکربندی کنیم. فایل پیکربندی سرور MySQL به صورت پیش‌فرض در آدرس etc/mysql/my.cnf/ ذخیره می‌شود. فایل پیکربندی را در ویرایشگر متنی باز کنید:

sudo nano /etc/mysql/my.cnf

خروجی زیرا را خواهد دید:

# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL Cluster Community Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

پیکربندی‌های زیر را به آن الحاق کنید:

...
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=198.51.100.2 # location of management server

فایل را ذخیره کرده و خارج شوید. سرور MySQL را ری‌استارت کنید تا این تغییرات اعمال شوند:

sudo systemctl restart mysql

MySQL به صورت پیش‌فرض باید به طور خودکار زمانی که سرور را ریبوت می‌کنید، آغاز شود. اگر چنین نبود دستور زیر باعث اصلاح مشکل می‌شود:

sudo systemctl enable mysql

یک سرور SQL باید روی سرور مدیر کلاستر / MySQL اجرا شوند. در مرحله بعدی چند دستور وارد می‌کنیم تا مطمئن شویم که نصب کلاستر همان طور که انتظار داریم عمل می‌کند.

گام 4 – تأیید نصب صحیح کلاستر MySQL

برای این که تأیید کنیم نصب کلاستر MySQL صحیح بوده است، وارد گره مدیر کلاستر / سرور SQL می‌شویم. کلاینت MySQL را از خط فرمان باز می‌کنیم و با تایپ کردن دستور زیر به حساب root که ایجاد کردیم، وارد می‌شویم:

mysql -u root –p

رمز عبور را وارد کرده و اینتر را بزنید. خروجی در این لحظه چیزی شبیه زیر خواهد بود:

Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 3
Server version: 5.7.22-ndb-7.6.6 MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

زمانی که وارد کلاینت MySQL شدید، دستور زیر را اجرا کنید:

SHOW ENGINE NDB STATUS \G

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

*************************** 1. row ***************************
Type: ndbcluster
Name: connection
Status: cluster_node_id=4, connected_host=198.51.100.2, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0
...

این امر نشان می‌دهد که شما با موفقیت به کلاستر SQL وصل شده‌اید. توجه کنید که تعداد ready_data_nodes برابر با 2 است. این افزونگی به کلاستر MySQL اجازه می‌دهد که حتی در صورتی که یکی از گره‌های داده از کار بیفتد، به فعالیت خود ادامه دهد. همچنین به این معنی است که کوئری‌های SQL در میان دو گره داده به صورت متوازنی تقسیم می‌شوند.

برای تست پایداری کلاستر می‌توانید یکی از گره‌ها را خاموش کنید. ساده‌ترین راه برای این کار، ری‌استارت کرده سرور گره داده‌ای جهت تست کامل فرایند بازیابی است. در این حالت می‌بایست مشاهده کنید که مقدار ready_data_nodes به 1 تغییر می‌یابد و دوباره با ریبوت شدن گره و اتصال مجدد به مدیر کلاستر به 2 باز می‌گردد.

برای خروج از اعلان MySQL دستور quit را تاپ کرده و CTRL-D را بزنید. این نخست تستی است که تأیید می‌کند کلاستر MySQL، سرور و کلاینت مشغول فعالیت هستند. اینک تست دیگری را اجرا می‌کنیم تا تأیید کنیم که کلاستر به طور صحیحی فعالیت می‌کند. کنسول مدیریت کلاستر ndb_mgm را با استفاده از دستور زیر باز کنید:

ndb_mgm

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

-- NDB Cluster -- Management Client --
ndb_mgm>

زمانی که وارد کنسول شدید، دستور SHOW را وارد کرده و ENTER را بزنید:

SHOW

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

Connected to Management Server at: 198.51.100.2:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2    @198.51.100.0  (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0, *)
id=3    @198.51.100.1  (mysql-5.7.22 ndb-7.6.6, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @198.51.100.2  (mysql-5.7.22 ndb-7.6.6)

[mysqld(API)]   1 node(s)
id=4    @198.51.100.2  (mysql-5.7.22 ndb-7.6.6)

خروجی فوق نشان می‌دهد که گره‌های داده با آی‌دی‌های 2 و 3 وصل شده‌اند. تنها یک گره مدیریت با آی‌دی 1 وجود دارد و یک سرور SQL نیز با آی‌دی 4 موجود است. می‌توانید با دستور STATUS به صورت زیر اطلاعات بیشتری در این مورد مشاهده کنید:

2 STATUS

دستور فوق وضعیت، نسخه MySQL و نسخه NDB گره 2 را به شما نشان می‌دهد:

Node 2: started (mysql-5.7.22 ndb-7.6.6)

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

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

گام 5 – درج داده در کلاستر MySQL

برای نمایش کارکرد کلاستر با استفاده از موتور NDB یک جدول جدید ایجاد کرده و مقادیری داده نمونه در آن درج می‌کنیم. توجه داشته باشید که برای استفاده از کارکرد کلاستر، این موتور باید به طور صریح به صورت NDB ذکر شده باشد. اگر از InnoDB (مقدار پیش‌فرض) یا هر موتور دیگری استفاده می‌کنید، نمی‌توانید از کلاستر استفاده نمایید. ابتدا با دستور زیر یک پایگاه داده به نام clustertest ایجاد می‌کنیم:

CREATE DATABASE clustertest;

سپس به پایگاه داده جدید سوئیچ می‌کنیم:

USE clustertest;

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

CREATE TABLE test_table (name VARCHAR(20), value VARCHAR(20)) ENGINE=ndbcluster;

ما به طور صریح موتور ndbcluster را تعیین کرده‌ایم تا بتوانیم از کلاستر استفاده کنیم. اینک می‌توانیم با کوئری SQL زیر اقدام به درج داده‌ها بکنیم:

INSERT INTO test_table (name,value) VALUES('some_name','some_value');

برای تأیید این که داده‌ها به طور صحیحی در جدول مربوطه درج شده‌اند کوئری انتخاب زیر را اجرا کنید:

SELECT * FROM test_table;

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

نتیجه‌گیری

در این راهنما شیوه راه‌اندازی و پیکربندی کلاستر MySQL روی سرورهای اوبونتو 18.04 را آموزش دادیم. حتماً به خاطر داشته باشید که این معماری کاملاً کمینه است و صرفاً جهت مقاصد آموزشی در مورد رویه نصب ارائه شده است و گزینه‌ها و ویژگی‌های بسیار پیشرفته‌ای وجود دارند که هنگام توزیع کلاستر MySQL در محیط پروداکشن باید به آن‌ها توجه کنید. برای مثال یکی از این گزینه‌ها بحث پشتیبان‌گیری است.

اگر این نوشته مورد توجه شما قرار گرفته است، پیشنهاد می‌کنیم موارد زیر را نیز ملاحظه کنید:

==

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«میثم لطفی» در رشته‌های ریاضیات کاربردی و مهندسی کامپیوتر به تحصیل پرداخته و شیفته فناوری است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار با مجله فرادرس همکاری دارد.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر