شروع قصه
با سلام به همه، ما معمولا در هر دیتاسنتری که راه اندازی می کنیم، به خاطر اهمیت و حجم بسیار زیاد اطلاعات، دیتابیس ها را در کلاسترینگ قرار می دهیم. اما به دلیل اجرای سیاست های عجولانه متأسفانه در یک دیتاسنتر این مهم اتفاق نیفتاد و خاصا با یک instace دیتابیس mariadb
راه اندازی شده بود که با توجه حساسیت بالا اطلاعات ریسک زیاد داشت. پس بالاخره تصمیم بر این شد که این یک نود دیتابیس به کلاسترینگ منتقل شود. در اینجا چند مشئله بود که می توانست مشکل ساز باشه و موجب دغده گروه شده بود:
-1 ماشین های وجازی دیتابیس ها با یک دیسک معمولی کار می کردند و در کنار آن، یک هارد SSD
نیز برای دیتابیس ها به آنها وصل بود که دیتابیس جاری که زیر بار بود نیز از آن استفاده می کرد. نگرانی آنجایی بود که آن دیسک باید به ماشین کلاستر شده متصل می شد. چه اتفاقی برای دیتایی که تا کنون جمع آوری شده بود می افتاد؟
2- آیا این انتقال و مهاجرات باعث از بین رفتن اطلاعات نمی شد؟
3- آیا راهی مطمئن برای انجام این مهم بدون هیچ گونه اشکال وجود داشت؟
اینها دغده ها و سوالاتی بود که گروه با آنها سر و کله می زد.
نوری در تاریکی
بالاخره پس از کلی سرو کله زدن، جسجتو کردن متوجه شدیم که راهی بسیار بسیار ساده برای رفع تمامی این نگرانی های وجود دارد. راهی که موجب شد تا به راحتی بتوانیم این مهاجرت را بدون کوچکترین مشکلی انجام دهیم. در آغاز انجامش به نظر خیلی مشکل و غیر ممکن بود اما وقتی که شیرجه زدیم داخل راهکار، متوجه شدیم که خیلی هم آسان، ساده و قابل انجام هست.
در کنار تمام مزیت ها و ویژگی هایی که Galera_cluster دارد، این راهم باید به آن اضافه کنیم که به شما این امکان را می دهد تا بتوانید یک نمونه از دیتابیس mariadb
را به راحتی به یکی از نودهای کلاسترینگ خودش تبدیل می کند.
قدم به قدم تا رسیدن به نتیجه
برای رفع این مشکل و استفاده از این راهکاری باید گام به گام و با دقت خیلی زیاد جلو می رفتیم و تا از مراحل قبلی مطمئن نمی شدیم نمی توانستیم به گام های بعدی برسیم.
گام اول: آماده سازی
در گام اول، ما دو ماشین مجازی دیگه نیز به عنوان نودهای دیگر کلاسترینگ گلرا نصب و آماده کردیم. در این مراحل Debian 9
بر روی تمامی ماشین های مجازی نصب گردید. سپس، بعد از انجام تنظیمات شبکه ای و نصب برنامه اولیه برنامه های مورد نیاز به صورت زیر نصب شدند:
sudo apt install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
| نکته ای که باید در نظر داشت در دبیان ۹ به بالا لازم است تا برنامه dirmngr
نیز نصب شود.
سپس مخزن نصب برنامه Galera Cluster
به سیستم عامل اضافه گردید:
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.nodesdirect.com/mariadb/repo/10.2/debian stretch main'
sudo apt update
گام دوم: نصب و راه اندازی
در این مرحله باید برنامه Galera Cluster
را به سادگی هر چه تمام بر روی ماشین های مجازی نصب و تنظیمات لازم را انجام می دادیم:
sudo apt install -y rsync mariadb-server
البته مراحل نصب و راه اندازی Galera Cluster
در مطلبی به نام نصب Galer Cluster بر روی debian8 که قبلا نوشته شده به سادگی انجام تنظیمات در آن توضیح داد شده است.
گام سوم: انتقال نود اول
در این مرحله لازم بود که اولین و مهمتریم نود دیتابیس که حاوی تمامی اطلاعات مورد بحث بود را به کلاسترینگ اضافه نماییم. برای انجام این مهم، مراحلی نیز باید انجام می شد:
ابتدا لازم بود تا از متصل نشدن این نود به کلاسترینگ مطمئن شویم:
sudo service mysql start --wsrep_on=OFF
سپس به منظور اطمینان از این که تمامی ساختار دیتابیس در قالب کلاسترینگ گلرا قرار می گیرد باید برنامه زیر اجرا می شد:
sudo mysql_upgrade -u root -p
احتمال این که اجرای این برنامه خطاهایی را تولید کند بود، که البته ضمن توجه به آنها می توان از آنها رد شد. بعد از اجرای این برنامه باید سرویس دیتابیس متوقف می شد:
sudo service mysql stop
گام چهارم: شروع کلاسترینگ
بعد از موفقیت در طی مراحل قبلی به آخرین مرحله که راه اندازی کلاسترینگ است می رسیم. در این مرحله و برای اطمینان از راه اندازی ابتدا با نود اول که حاوی اطاعلات است شروع می کنیم:
sudo galera_new_cluster
بعد از اجرای این دستور و به منظور اطمینان از اجرای صحیح سرویس دیتابیس دستور زیر را اجرا شد:
sudo ps aux | grep mysql
که انتظار خروجی زیر می رفت:
mysql 1057 14.0 15.5 1225420 159668 ? Ssl 01:50 0:00 /usr/sbin/mysqld --wsrep-new-cluster --wsrep_start_position=00000000-0000-0000-0000-000000000000:-1
گام پنجم: راه اندازی کل کلاستر
اکنون پس از اطمیان از صحت اجرای نود اول کلاسترینگ، باید نودهای بعدی را نیز یکی یکی به کلاسترینگ اضافه می شد،پس بر روی هر کدام از نود های دستور زیر اجرا شد:
sudo service mysql start
| نکته قابل توجه این است که با توجه به حجم دیتابیس در نود اول، معمولا راه اندازی دیگر نودهای گلرا مدتی طول می کشد باید صبور باشید. زیرا گلرا در حال همسان سازی دیگر نودها با نود اصلی می باشد.
گام ششم: اطمینان از کلاسترینگ
در این مرحله و برای اطمینان کامل از کلاستر شدن تمامی نودها می توان دستور زیر را اجرا نمود:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Enter password:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
در پایان
در پایان بعد از اطمینان از صحت عملکرد تمامی مراحل برنامه اطلاعات، متوجه شدیم که بعضی وقت ها مشکلات به ظاهر بزرگ با راهکارهایی ساده و دم دستی قابل حا هستند.