وقتی سه سرور داشته باشید که هر کدام از آنها برای مثال سه ترابایت فضای ذخیره داشته باشند و بخواید همه این فضاها رو یکی کنید و به یک استوریج نه ترابایتی برسید یکی از گزینههای خوب گلاسترافاس است. در سنتاواس به راحتی میشه ورژنهای مختلف این برنامه رو نصب کرد. حالا فرض رو بگذارید که زمان گذشته و قصد کردیم سرور چهارم (s4) رو به کلاستر (s1,s2,s3) اضافه کنیم. برای اینکار باید در یکی از سرورهایی که از قبل عضو کلاستر بودند، کامند زیر رو اجرا کنید.
1 |
root@s2:~# gluster peer probe s4.storage |
اما اگر مثل من بدشانس باشید همین دستور خیلی ساده مشکل ساز میشه و عضو جدید به درستی کار نخواهد کرد.
1 2 3 4 5 |
gluster peer status Hostname: s4.storage Uuid: 7b4hf063–f234–4422–9ebc–53254bab90535 State: Peer Rejected (Disconnected) |
وقتی لاگ مربوط به گلاستر در سرور s4 رو ببینید همچین پیغامی خواهید دید.
1 |
0–glusterd: Unable to find peerinfo for host: s2.storage (24007) |
که با زبون سربسته داره میگه نود جدید که قصد اضافه کردن اون رو به کلاستر داشتیم نتونسته اطلاعات لازم رو از نود s2 بگیرد! نود s2 همون نودی بوده که از قبل عضو کلاستر بوده و از داخل اون قصد داشتیم نود جدید رو عضو کلاستر کنیم.
دلیل این اتفاق این بود که همه نودهای کلاستر ورژن 3.12.5 بودند اما در زمانیکه قصد اضافه کردن عضو جدید به کلاستر رو داشتم، گلاستر centos به نسخه 3.12.6 آپگرید شده و دقیقا همین موضوع باعث مشکل میشه. برای اضافه کردن نود جدید به کلاستر باید دقت کنید که ورژن گلاستر سرور جدید و قدیم دقیقا یکی باشد.
پروسهی دانگرید در centos برخلاف اوبونتو میتونه آدمیزاد رو زخم کنه و اساسا بخاطر همین موضوع شروع به نوشتن این راهنما کردم.
کاری که برای حل این مشکل انجام دادم این بود که پکیجهای rpm گلاستر رو از مسیر یکی از نودهایی که عضو کلاستر بود (s2) رو به سرور جدید انتقال دادم.
1 2 3 |
cd /var/cache/yum/x86_64/7/centos–gluster312/packages scp *3.12.5* storage@s4.storage:/home/storage/repo |
بعد در سرور جدید (s4) به شکل زیر یک مخزن لوکال ساختم.
1 2 3 4 5 |
yum install createrepo –y createrepo /home/storage/repo/ chmod –R o–w+r /home/storage/repo/ |
و بعد مخزن رو باید به سنتاواس به شکل زیر معرفی کنیم.
1 2 3 4 5 6 7 |
vi /etc/yum.repos.d/gluster3125.repo [local] name=gluster3512 baseurl=file:///home/storage/repo enabled=1 gpgcheck=0 |
قبل از نصب گلاستر ورژن قدیمی، بایستی اول اون رو از کلاستر حذف کنیم
برای اینکار کافیه از یکی از سرورها که عضو کلاستر هستند (s2) کامند زیر رو بزنید.
1 |
root@s2:~# gluster peer detach s4.storage |
بعد در سرور s4 که قراره ورژن اون رو دانگرید کنیم بعد از استاپ سرویس گلاستر در مسیر زیر هر چی فایل هست رو پاک کنیم.
1 2 3 4 5 |
systemctl stop glusterd cd /var/lib/glusterd rm –rf ./* |
گلاستر برای نصب نیاز به یک پکیج به اسم userspace-rcu داره که ورژن اون باید 0.10 به بالا باشد. برای نصب این پکیج بهتره از همونی که داخل مخزن گلاستر 3.12.6 موجوده بهره ببریم.
وقتی که میخوایم پکیج های گلاستر 3.12.6 رو پاک کنیم یادمون نمیره که userspace-rcu رو نگه داریم وگرنه به مشکل خواهیم خورد.
1 |
[root@s4 ~]# yum list installed | grep gluster | grep -v userspace | cut -d ‘ ‘ -f 1 | xargs yum remove -y |
حالا نوبت به نصب دوباره گلاستر میرسد. چون یک مخزن اضافه کردیم که پکیجهای گلاستر 3.12.5 داخلش موجوده اینبار ورژن قدیمی نصب خواهد شد.
1 |
yum install glusterfs–server –y |
و دوباره نود رو به کلاستر جوین میکنیم.
1 |
gluster peer probe s4.storage |
و در آخر مطمئن میشیم که همه چیز خوب پیش رفته باشد.
1 2 3 |
gluster peer status State: Peer in Cluster (Connected) |