sajjad shahcheraghean
sajjad shahcheraghean
خواندن ۴ دقیقه·۶ سال پیش

مهاجرت از دیتابیس Mariadb به Galera Cluster

شروع قصه

با سلام به همه، ما معمولا در هر دیتاسنتری که راه اندازی می کنیم، به خاطر اهمیت و حجم بسیار زیاد اطلاعات، دیتابیس ها را در کلاسترینگ قرار می دهیم. اما به دلیل اجرای سیاست های عجولانه متأسفانه در یک دیتاسنتر این مهم اتفاق نیفتاد و خاصا با یک instace دیتابیس mariadb راه اندازی شده بود که با توجه حساسیت بالا اطلاعات ریسک زیاد داشت. پس بالاخره تصمیم بر این شد که این یک نود دیتابیس به کلاسترینگ منتقل شود. در اینجا چند مشئله بود که می توانست مشکل ساز باشه و موجب دغده گروه شده بود:

-1 ماشین های وجازی دیتابیس ها با یک دیسک معمولی کار می کردند و در کنار آن، یک هارد SSD نیز برای دیتابیس ها به آنها وصل بود که دیتابیس جاری که زیر بار بود نیز از آن استفاده می کرد. نگرانی آنجایی بود که آن دیسک باید به ماشین کلاستر شده متصل می شد. چه اتفاقی برای دیتایی که تا کنون جمع آوری شده بود می افتاد؟ 2- آیا این انتقال و مهاجرات باعث از بین رفتن اطلاعات نمی شد؟ 3- آیا راهی مطمئن برای انجام این مهم بدون هیچ گونه اشکال وجود داشت؟

اینها دغده ها و سوالاتی بود که گروه با آنها سر و کله می زد.

نوری در تاریکی

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

در کنار تمام مزیت ها و ویژگی هایی که Galera_cluster دارد، این راهم باید به آن اضافه کنیم که به شما این امکان را می دهد تا بتوانید یک نمونه از دیتابیس mariadb را به راحتی به یکی از نودهای کلاسترینگ خودش تبدیل می کند

قدم به قدم تا ریسیدن به نتیجه

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

گام اول: آماده سازی

در گام اول، ما دو ماشین مجازی دیگه نیز به عنوان نودهای دیگر کلاسترینگ گلرا نصب و آماده کردیم. در این مراحل Debian 9 بر روی تمامی ماشین های مجازی نصب گردید. سپس، بعد از انجام تنظیمات شبکه ای و نصب برنامه اولیه برنامه های مورد نیاز به صورت زیر نصب شدند:

sudo apt install software-properties-common sudo apt-key adv --recv-keys --keyserver http://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 &quotSHOW STATUS LIKE 'wsrep_cluster_size';&quot Enter password: +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

در پایان

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


برگرفته از: shgn.ir

databasemariadbmysql
Devops Engineer
شاید از این پست‌ها خوشتان بیاید