Ceph یک پلتفرم ذخیرهسازی متنباز است که سطح بالایی از عملکرد، اطمینان و مقیاسپذیری را در خود دارد. این در واقع، یک سیستم ذخیرهسازی گسترده رایگان است که یک رابط کاربری برای ذخیره فایل، آبجکت و بلوک فراهم میکند و میتواند عملکردی بدون توقف داشته باشد. در این آموزش، نحوه نصب کلاستر Ceph را در اوبونتو 18.04 بررسی خواهیم کرد. با ما همراه باشید.
یک کلاستر Ceph متشکل از بخشهای زیر است:
- Ceph OSD یا ceph-osd – برای مدیریت ذخیره داده، تکرار داده و بازیابی آنها. یک کلاستر Ceph حداقل به دو سرور Ceph OSD احتیاج خواهد داشت. در اینجا ما از سه سرور اوبونتو 04 برای این منظور استفاده خواهیم کرد.
- Ceph Monitor یا ceph-mon – برای پایش وضعیت کلاستتر اجرای مپهای OSD و CRUSH. در اینجا از یک سرور برای این منظور استفاده میکنیم.
- سرور Ceph Meta Data یا ceph-mds – در صورتی که بخواهید از Ceph به عنوان فایل سیستم استفاده کنید، به این بخش احتیاج پیدا میکنید.
پیشنیازها
- ۶ نقطه سرور همراه با نصب اوبونتو 04
- دسترسی روت در تمام نقاط
در اینجا از هاستها و IP های زیر استفاده میکنیم.
| هاست | آدرس IP |
| ceph-admin | 10.0.15.10 |
| mon1 | 10.0.15.11 |
| osd1 | 10.0.15.21 |
| osd2 | 10.0.15.22 |
| osd3 | 10.0.15.23 |
| client | 10.0.15.15 |
گام ۱) تنظیم تمام نقاط
در این مرحله، تمام نقاط را برای نصب نرمافزار Ceph Cluster آماده میکنیم. فرمانهایی که در ادامه میآیند، باید برای تمام نقاط اجرا شوند. همچنین بایستی از نصب سرور ssh در تمام نقاط اطمینان حاصل کنید.
ایجاد کاربر Ceph
یک کاربر جدید با نام ‘cephuser’ در تمام نقاط ایجاد کنید.
[php]
useradd -m -s /bin/bash cephuser
passwd cephuser
[/php]
پس از ساخت این کاربر جدید، باید cephuser را برای دسترسی بدون پسورد sudo تنظیم کنیم. به این معنا که کاربر cephuser خواهد توانست بدون نیاز به پسورد، دسترسیهای sudo را در اختیار داشته باشد.
برای این منظور، فرمانهای زیر را اجرا نمایید.
[php]
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s’/Defaults requiretty/#Defaults requiretty’/g /etc/sudoers
[/php]
نصب و تنظیمات NTP
نصب NTP برای هماهنگسازی تاریخ و زمان در تمام نقاط انجام میگیرد. از فرمان ntpdate برای تنظیم تاریخ و زمان با NTP استفاده کنید. در اینجا از سرورهای US pool NTP برای این منظور بهره میگیریم. سپس سرور NTP را راهاندازی و آن را برای راهاندازی در شروع به کار سیستم تنظیم کنید.
[php]
sudo apt-get install -y ntp ntpdate ntp-doc
ntpdate 0.us.pool.ntp.org
hwclock –systohc
systemctl enable ntp
systemctl start ntp
[/php]
نصب Open-vm-tools
اگر تمام نقاط را درون VMware اجرا میکنید، نیاز به این ابزار شبیهسازی خواهید داشت.
[php]
sudo apt-get install -y open-vm-tools
[/php]
نصب پایتون و parted
در این آموزش برای ساخت ceph-cluster به بستههای پایتون احتیاج خواهیم داشت. با کمک فرمان زیر پایتون و python-pip را نصب کنید.
[php]
sudo apt-get install -y python python-pip parted
[/php]
تنظیم فایل hosts
ویرایش فایل hosts به کمک ادیتور vim برای تمام نقاط صورت میگیرد.
[php]
vim /etc/hosts
[/php]
تنظیمات زیر را در فایل وارد کنید.
[php]
10.0.15.10 ceph-admin
10.0.15.11 mon1
10.0.15.21 ceph-osd1
10.0.15.22 ceph-osd2
10.0.15.23 ceph-osd3
10.0.15.15 ceph-client
[/php]
حالا فایل hosts را ذخیره کرده و از ادیتور vim خارج شوید.
سپس میتوانید عمل ping را بین عناویت هاست سرور انجام دهید و از ارتباط شبکه مطمئن شوید.
[php]
ping -c 5 mon1
[/php]

نصب کلاستر Ceph در اوبونتو 18.04
گام ۲) تنظیم سرور SSH
در این مرحله، نقطه ceph-admin را تنظیم میکنیم. نقطه ادمین برای تنظیمات نقطه پایش (monitor) و نقاط osd مورد استفاده قرار میگیرد. برای این منظور به نقطه ceph-admin وارد شوید و به کاربر ‘cephuser’ دسترسی پیدا کنید.
[php]
ssh root@ceph-admin
su – cephuser
[/php]
نقطه ادمین برای نصب و تنظیمات تمام نقاط کلاستر استفاده میشود. بنابراین کاربر نقطه ceph-admin میبایست تمام دسترسیهای لازم برای ارتباط بدون پسورد با تمام نقاط را داشته باشد. بر این اساس، باید دسترسی بدون پسورد SSH کاربر ‘cephuser’ را در نقطه ‘ceph-admin’ تنظیم کنیم.
تولید کلیدهای ssh برای ‘cephuser’
[php]
ssh-keygen
[/php]
عبارت کلمه عبور یا passphrase را به صورت خالی باقی بگذارید.
سپس یک فایل تنظیمات برای ssh config بسازید.
[php]
vim ~/.ssh/config
[/php]
خطوط زیر را در این فایل کپی کنید.
[php]
Host ceph-admin
Hostname ceph-admin
User cephuser
Host mon1
Hostname mon1
User cephuser
Host ceph-osd1
Hostname ceph-osd1
User cephuser
Host ceph-osd2
Hostname ceph-osd2
User cephuser
Host ceph-osd3
Hostname ceph-osd3
User cephuser
Host ceph-client
Hostname ceph-client
User cephuser
[/php]
حالا فایل را ذخیره کرده و از vim خارج شوید.

تنظیمات Ceph-admin
مجوّز فایل تنظمیات را به 644 تغییر دهید.
[php]
chmod 644 ~/.ssh/config
[/php]
حالا با استفاده از فرمان ssh-copy-id، کلید را به تمام نقاط کپی کنید.
[php]
ssh-keyscan ceph-osd1 ceph-osd2 ceph-osd3 ceph-client mon1 >> ~/.ssh/known_hosts
ssh-copy-id ceph-osd1
ssh-copy-id ceph-osd2
ssh-copy-id ceph-osd3
ssh-copy-id mon1
[/php]
در هنگام درخواست سیستم، کلمه عبور cephuser را وارد کنید.

انتقال کلید ssh توسط Ceph-admin به تمام نقاط کلاستر
اکنون سعی کنید از طریق نقطه ادمین به سرور osd1 دسترسی پیدا کنید و به این وسیله ورود بدون پسورد را تست نمایید.
[php]
ssh ceph-osd1
[/php]

ورود SSH بدون پسورد از طریق ceph-admin به تمام نقاط کلاستر
گام ۳) تنظیمات فایروال اوبونتو
فعالکردن فایروال در سرورها به دلایل امنیتی ضروری خواهد بود. برای این منظور، ترجیحاً از ابزار UFW، فایروال پیشفرض اوبونتو استفاده میکنیم. در این مرحله، UFW را در تمام نقاط فعال و سپس پورتهای موردنیاز ceph-admin، ceph-mon و ceph-osd را باز میکنیم.
به نقطه ceph-admin وارد شوید و بستههای UFW را نصب کنید.
[php]
ssh root@ceph-admin
sudo apt-get install -y ufw
[/php]
پورتهای 80، 2003 و 4505-4506 را باز کنید و سپس فایروال را دوباره راهاندازی نمایید.
[php]
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 2003/tcp
sudo ufw allow 4505:4506/tcp
[/php]
UFW را اجرا و آن را به گونهای تنظیم کنید که در آغاز به کار سیستم فعال شود.
[php]
sudo ufw enable
[/php]

فایروال UFW همراه با سرویس Ceph
از نقطه ceph-admin، وارد نقطه مانیتورینگ mon1 شوید و UFW را نصب کنید.
[php]
ssh mon1
sudo apt-get install -y ufw
[/php]
پورتهای نقطه ceph monitor را باز کرده و UFW را اجرا کنید.
[php]
sudo ufw allow 22/tcp
sudo ufw allow 6789/tcp
sudo ufw enable
[/php]
نهایتاً هر کدام از این پورتها را در نقاط osd باز کنید:
[php]
ceph-osd1, ceph-osd2 and ceph-osd3 – port 6800-7300
[/php]
از نقطه ادمین به هر کدام از نقاط ceph-osd وارد شوید و UFW را نصب کنید.
[php]
ssh ceph-osd1
sudo apt-get install -y ufw
[/php]
پورتها را در نقاط osd باز کنید و فایروال را دوباره اجرا نمایید.
[php]
sudo ufw allow 22/tcp
sudo ufw allow 6800:7300/tcp
sudo ufw enable
[/php]
در نتیجه، تنظیمات فایروال ufw به اتمام میرسد.
گام ۴) تظیمات نقاط Ceph OSD
در این آموزش ما سه نقطه OSD داریم که هر کدام از آنها شامل دو پارتیشن دیسک سخت است.
[php]
/dev/sda for root partition
/dev/sdb is empty partition – 20GB
[/php]
از /dev/sdb به عنوان دیسک ceph استفاده خواهیم کرد. برای این منظور، از نقطه ceph-admin به تمام نقاط OSD وارد میشویم و پارتیشن /dev/sdb را به صورت فایل سیستم XFS فرمت میکنیم.
[php]
ssh ceph-osd1
ssh ceph-osd2
ssh ceph-osd3
[/php]
پارتیشنبندی را با کمک فرمان fdisk بررسی میکنیم.
[php]
sudo fdisk -l /dev/sdb
[/php]
پارتیشن /dev/sdb را به صورت فایل سیستم XFS و همراه با جدول پارتیشن GPT با استفاده از فرمان parted فرمت میکنیم.
[php]
sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
[/php]
سپس پارتیشن را با کمک فرمان mkfs به صورت XFS فرمت میکنیم.
[php]
sudo mkfs.xfs -f /dev/sdb
[/php]
حالا با بررسی مجدد، یک پارتیشن XFS /dev/sdb مشاهده خواهید کرد.
[php]
sudo fdisk -s /dev/sdb
sudo blkid -o value -s TYPE /dev/sdb
[/php]

فرمت پارتیشن نقاط ceph OSD
گام ۵) ایجاد کلاستر Ceph
در این مرحله، از طریق سیستم ceph-admin در تمام نقاط Ceph را نصب میکنیم. برای شروع این کار، به نقطه ceph-admin وارد میشویم.
[php]
ssh root@ceph-admin
su – cephuser
[/php]
نصب ceph-deploy در نقطه ceph-admin
در گام ۱، ابزارهای پایتون و python-pip را در سیستم نصب کردیم. حالا باید ابزار بکارگیری Ceph، یعنی ‘ceph-deploy’ را از منبع pypi python نصب کنیم.
نصب ceph-deploy در نقطه ceph-admin با فرمان pip
[php]
sudo pip install ceph-deploy
[/php]
نکته: حتماً دقت کنید که تمام نقاط بروزرسانی شده باشند.
پس از نصب ابزار ceph-deploy، یک دایرکتوری جدید برای تنظیمات کلاستر Ceph ایجاد کنید.
ایجاد یک کلاستر جدید
ایجاد یک دایرکتوری کلاستر جدید
[php]
mkdir cluster
cd cluster/
[/php]
سپس با استفاده از فرمان ceph-deploy و تعریف نقطه مانیتورینگ mon1، یک کلاستر جدید بسازید.
[php]
ceph-deploy new mon1
[/php]
در نتیجه، یک فایل تنظیمات کلاستر Ceph با نام ‘ceph.conf’ در دایرکتوری تولید میشود.

ساخت یک کلاستر Ceph جدید
ویرایش فایل ceph.conf که با کمک ابزار vim صورت میگیرد.
[php]
vim ceph.conf
[/php]
در زیر بلوک [global]، خطوط زیر را وارد کنید.
[php]
# Your network address
public network = 10.0.15.0/24
osd pool default size = 2
[/php]
حالا فایل را ذخیره کرده و از ویرایشگر خارج شوید.
نصب Ceph در تمام نقاط
حالا با یک فرمان از نقطه ceph-admin، ابزار Ceph را در تمام نقاط نصب میکنیم.
[php]
ceph-deploy install ceph-admin ceph-osd1 ceph-osd2 ceph-osd3 mon1
[/php]
در نتیجه، عمل نصب به صورت اتوماتیک در تمام نقاط کلاستر Ceph صورت میگیرد. این نصب ممکن است اندکی زمان نیاز داشته باشد.
حالا باید نقطه پایش را در mon1 به کار بگیرید.
[php]
ceph-deploy mon create-initial
[/php]
این فرمان موجب تولید یک کلید مانیتورینگ خواهد شد. این کلید را با استفاده از این فرمان ceph بررسی کنید.
[php]
ceph-deploy gatherkeys mon1
[/php]

تولید کلید مانیتورینگ
اضافهکردن OSD ها به کلاستر
پس از نصب Ceph در کلیه نقاط، اکنون میتوانیم OSD ها نیز به کلاستر اضافه کنیم. OSD ها پارتیشنهای دیتا و جورنال را در دیسک /dev/sdb ایجاد میکنند.
بررسی وضعیت دیسک /dev/sdb در تمام نقاط OSD
[php]
ceph-deploy disk list ceph-osd1 ceph-osd2 ceph-osd3
[/php]

لیست دیسکهای نقاط OSD
در اینجا /dev/sdb را با فرمت XFS مشاهده میکنیم که قبلاُ آن را ایجاد کرده بودیم.
سپس با گزینه zap، جداول پارتیشن را در تمام نقاط حذف میکنیم.
[php]
ceph-deploy disk zap ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb
[/php]
این فرمان تمام دادههای /dev/sdb را در نقاط Ceph OSD پاک میکند.
حالا تمام نقاط OSD را آماده کنید و حتماً دقت کنید که هیچگونه خطایی در نتایج وجود نداشته باشد.
[php]
ceph-deploy osd prepare ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb
[/php]
پس از مشاهده وضعیت آماده ceph-osd1-3 برای استفاده به عنوان OSD، میتوانید مطمئن باشید که فرمان را با موفقیت اجرا کردهاید.

آمادهسازی نقاط ceph-osd
فعالسازی OSD ها با کمک فرمان زیر صورت میگیرد.
[php]
ceph-deploy osd activate ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb
[/php]
اکنون میتوانید دوباره دیسک sdb را در نقاط OSD بررسی کنید.
[php]
ceph-deploy disk list ceph-osd1 ceph-osd2 ceph-osd3
[/php]

فعالسازی نقاط Ceph osd
در نتیجه، /dev/sdb دارای دو پارتیشن به صورت زیر خواهد بود.
[php]
/dev/sdb1 – Ceph Data
/dev/sdb2 – Ceph Journal
[/php]
همچنین میتوانید این بررسی را به صورت مستقیم از نقطه OSD انجام دهید.
[php]
ssh ceph-osd1
sudo fdisk -l /dev/sdb
[/php]

در نتیجه، نقاط Ceph OSD ایجاد شدند.
حالا کلید management را برای تمام نقاط کلاستر Ceph به کار میگیریم.
[php]
ceph-deploy admin ceph-admin mon1 ceph-osd1 ceph-osd2 ceph-osd3
[/php]
با استفاده از فرمان زیر، مجوّز فایل کلید را تغییر میدهیم.
[php]
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
[/php]
در نتیجه، کلاستر Ceph در اوبونتو 18.04 ایجاد شد.
گام ۶) تست Ceph
در گام چهارم، یک کلاستر Ceph جدید ایجاد و نقاط OSD را به آن اضافه کردیم. حالا نوبت آن است که این کلاستر را آزمایش کرده و از درستیِ عملکرد آن مطمئن شویم.
برای این منظور، از نقطه ceph-admin به سرور مانیتورینگ mon1 وارد شوید.
[php]
ssh mon1
[/php]
فرمان زیر را اجرا کنید تا از سلامت کلاستر اطمینان حاصل کنید.
[php]
sudo ceph health
[/php]
حالا وضعیت کلاستر Ceph را بررسی کنید.
[php]
sudo ceph -s
[/php]
نتایج را به صورت زیر میتوانید مشاهده کنید.

وضعیت کلاستر Ceph
از عملکرد کلاستر Ceph مطمئن شوید و همینطور دقت کنید که نقطه مانیتورینگ mon1 با IP آدرس ‘10.0.15.11’ وجود داشته باشد. همچنین سه سرور OSD در حال اجرا و فضای دیسکی به اندازه ۴۵ گیگابایت یا سه پارتیشن ۱۵ گیگابایتی Ceph Data OSD در دسترس باشند.
نهایتاً یک کلاستر Ceph جدید در اوبونتو 18.04 ساختهایم و امیدواریم که این آموزش مورد توجه شما قرار گرفته باشد.