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’ در تمام نقاط ایجاد کنید.

useradd -m -s /bin/bash cephuser
passwd cephuser

پس از ساخت این کاربر جدید، باید cephuser را برای دسترسی بدون‌ پسورد sudo تنظیم کنیم. به این معنا که کاربر cephuser خواهد توانست بدون نیاز به پسورد، دسترسی‌های sudo را در اختیار داشته باشد.

برای این منظور، فرمان‌های زیر را اجرا نمایید.

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

نصب و تنظیمات NTP

نصب NTP  برای هماهنگ‌سازی تاریخ و زمان در تمام نقاط انجام می‌گیرد. از فرمان ntpdate برای تنظیم تاریخ و زمان با NTP استفاده کنید. در اینجا از سرورهای US pool NTP برای این منظور بهره می‌گیریم. سپس سرور NTP را راه‌اندازی و آن را برای راه‌اندازی در شروع به کار سیستم تنظیم کنید.

sudo apt-get install -y ntp ntpdate ntp-doc

ntpdate 0.us.pool.ntp.org

hwclock --systohc

systemctl enable ntp

systemctl start ntp

نصب Open-vm-tools

اگر تمام نقاط را درون VMware اجرا می‌کنید، نیاز به این ابزار شبیه‌سازی خواهید داشت.


sudo apt-get install -y open-vm-tools

نصب پایتون و parted

در این ‌آموزش برای ساخت ceph-cluster به بسته‌های پایتون احتیاج خواهیم داشت. با کمک فرمان زیر پایتون و python-pip را نصب کنید.


sudo apt-get install -y python python-pip parted

تنظیم فایل hosts

ویرایش فایل hosts به کمک ادیتور vim برای تمام نقاط صورت می‌گیرد.


vim /etc/hosts

تنظیمات زیر را در فایل وارد کنید.

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

حالا فایل hosts را ذخیره کرده و از ادیتور vim خارج شوید.

سپس می‌توانید عمل ping را بین عناویت هاست سرور انجام دهید و از ارتباط شبکه مطمئن شوید.


ping -c 5 mon1

نصب کلاستر Ceph در اوبونتو 18.04

نصب کلاستر Ceph در اوبونتو 18.04

گام ۲) تنظیم سرور SSH

در این مرحله، نقطه ceph-admin را تنظیم می‌کنیم. نقطه ادمین برای تنظیمات نقطه پایش (monitor) و نقاط osd مورد استفاده قرار می‌گیرد. برای این منظور به نقطه ceph-admin وارد شوید و به کاربر ‘cephuser’ دسترسی پیدا کنید.

ssh root@ceph-admin
su - cephuser

نقطه ادمین برای نصب و تنظیمات تمام نقاط کلاستر استفاده می‌شود. بنابراین کاربر نقطه ceph-admin می‌بایست تمام دسترسی‌های لازم برای ارتباط بدون پسورد با تمام نقاط را داشته باشد. بر این اساس، باید دسترسی بدون پسورد SSH کاربر ‘cephuser’ را در نقطه ‘ceph-admin’ تنظیم کنیم.

تولید کلیدهای ssh برای ‘cephuser’

ssh-keygen

عبارت کلمه عبور یا passphrase را به صورت خالی باقی بگذارید.

سپس یک فایل تنظیمات برای ssh config بسازید.

vim ~/.ssh/config

خطوط زیر را در این فایل کپی کنید.

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

حالا فایل را ذخیره کرده و از vim خارج شوید.

تنظیمات Ceph-admin

تنظیمات Ceph-admin

مجوّز فایل تنظمیات را به 644 تغییر دهید.


chmod 644 ~/.ssh/config

حالا با استفاده از فرمان ssh-copy-id، کلید را به تمام نقاط کپی کنید.


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

در هنگام درخواست سیستم، کلمه عبور cephuser را وارد کنید.

انتقال کلید ssh توسط Ceph-admin به تمام نقاط کلاستر Ceph

انتقال کلید ssh توسط Ceph-admin به تمام نقاط کلاستر

اکنون سعی کنید از طریق نقطه ادمین به سرور osd1 دسترسی پیدا کنید و به این وسیله ورود بدون پسورد را تست نمایید.

ssh ceph-osd1
ورود SSH بدون پسورد از طریق ceph-admin به تمام نقاط کلاستر

ورود SSH بدون پسورد از طریق ceph-admin به تمام نقاط کلاستر

گام ۳) تنظیمات فایروال اوبونتو

فعال‌کردن فایروال در سرورها به دلایل امنیتی ضروری خواهد بود. برای این منظور، ترجیحاً از ابزار UFW، فایروال پیش‌فرض اوبونتو استفاده می‌کنیم. در این مرحله، UFW را در تمام نقاط فعال و سپس پورت‌های موردنیاز ceph-admin، ceph-mon و ceph-osd را باز می‌کنیم.

به نقطه ceph-admin وارد شوید و بسته‌های UFW را نصب کنید.

ssh root@ceph-admin
sudo apt-get install -y ufw

پورت‌های 80، 2003 و 4505-4506 را باز کنید و سپس فایروال را دوباره راه‌اندازی نمایید.

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 2003/tcp
sudo ufw allow 4505:4506/tcp

UFW را اجرا و آن را به گونه‌ای تنظیم کنید که در آغاز به کار سیستم فعال شود.

sudo ufw enable
فایروال UFW همراه با سرویس Ceph

فایروال UFW همراه با سرویس Ceph

از نقطه ceph-admin، وارد نقطه مانیتورینگ mon1 شوید و UFW را نصب کنید.

ssh mon1
sudo apt-get install -y ufw

پورت‌های نقطه ceph monitor را باز کرده و UFW را اجرا کنید.

sudo ufw allow 22/tcp
sudo ufw allow 6789/tcp
sudo ufw enable

نهایتاً هر کدام از این پورت‌ها را در نقاط osd باز کنید:

ceph-osd1, ceph-osd2 and ceph-osd3 - port 6800-7300

از نقطه ادمین به هر کدام از نقاط ceph-osd وارد شوید و UFW را نصب کنید.

ssh ceph-osd1
sudo apt-get install -y ufw

پورت‌ها را در نقاط osd باز کنید و فایروال را دوباره اجرا نمایید.


sudo ufw allow 22/tcp

sudo ufw allow 6800:7300/tcp

sudo ufw enable

در نتیجه، تنظیمات فایروال ufw به اتمام می‌رسد.

گام ۴) تظیمات نقاط Ceph OSD

در این آموزش ما سه نقطه OSD داریم که هر کدام از آنها شامل دو پارتیشن دیسک سخت است.


/dev/sda for root partition

/dev/sdb is empty partition - 20GB

از /dev/sdb به عنوان دیسک ceph استفاده خواهیم کرد. برای این منظور، از نقطه ceph-admin به تمام نقاط OSD وارد می‌شویم و پارتیشن /dev/sdb را به صورت فایل سیستم XFS فرمت می‌کنیم.


ssh ceph-osd1

ssh ceph-osd2

ssh ceph-osd3

پارتیشن‌‌بندی را با کمک فرمان fdisk بررسی می‌کنیم.

sudo fdisk -l /dev/sdb

پارتیشن /dev/sdb را به صورت فایل سیستم XFS و همراه با جدول پارتیشن GPT با استفاده از فرمان parted فرمت می‌کنیم.

sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%

سپس پارتیشن را با کمک فرمان mkfs به صورت XFS فرمت می‌کنیم.


sudo mkfs.xfs -f /dev/sdb

حالا با بررسی مجدد، یک پارتیشن XFS /dev/sdb مشاهده خواهید کرد.


sudo fdisk -s /dev/sdb

sudo blkid -o value -s TYPE /dev/sdb

فرمت پارتیشن نقاط ceph OSD

فرمت پارتیشن نقاط ceph OSD

گام ۵)  ایجاد کلاستر Ceph

در این مرحله، از طریق سیستم ceph-admin در تمام نقاط Ceph را نصب می‌کنیم. برای شروع این کار، به نقطه ceph-admin وارد می‌شویم.

ssh root@ceph-admin
su - cephuser

نصب ceph-deploy در نقطه ceph-admin

در گام ۱، ابزارهای پایتون و python-pip را در سیستم نصب کردیم. حالا باید ابزار بکارگیری Ceph، یعنی ‘ceph-deploy’ را از منبع pypi python نصب کنیم.

نصب ceph-deploy در نقطه ceph-admin با فرمان pip


sudo pip install ceph-deploy

نکته: حتماً دقت کنید که تمام نقاط بروزرسانی شده باشند.

پس از نصب ابزار ceph-deploy، یک دایرکتوری جدید برای تنظیمات کلاستر Ceph ایجاد کنید.

ایجاد یک کلاستر جدید

ایجاد یک دایرکتوری کلاستر جدید

mkdir cluster
cd cluster/

سپس با استفاده از فرمان ceph-deploy  و تعریف نقطه مانیتورینگ mon1، یک کلاستر جدید بسازید.


ceph-deploy new mon1

در نتیجه، یک فایل تنظیمات کلاستر Ceph با نام ‘ceph.conf’ در دایرکتوری تولید می‌شود.

ساخت یک کلاستر Ceph جدید

ساخت یک کلاستر Ceph جدید

ویرایش فایل ceph.conf که با کمک ابزار vim صورت می‌گیرد.


vim ceph.conf

در زیر بلوک [global]، خطوط زیر را وارد کنید.


# Your network address

public network = 10.0.15.0/24

osd pool default size = 2

حالا فایل را ذخیره کرده و از ویرایشگر خارج شوید.

نصب Ceph در تمام نقاط

حالا با یک فرمان از نقطه ceph-admin، ابزار Ceph را در تمام نقاط نصب می‌کنیم.


ceph-deploy install ceph-admin ceph-osd1 ceph-osd2 ceph-osd3 mon1

در نتیجه، عمل نصب به صورت اتوماتیک در تمام نقاط کلاستر Ceph صورت می‌گیرد. این نصب ممکن است اندکی زمان نیاز داشته باشد.

حالا باید نقطه پایش را در mon1 به کار بگیرید.

ceph-deploy mon create-initial

این فرمان موجب تولید یک کلید مانیتورینگ خواهد شد. این کلید را با استفاده از این فرمان ceph بررسی کنید.


ceph-deploy gatherkeys mon1

تولید کلید مانیتورینگ

تولید کلید مانیتورینگ

اضافه‌کردن OSD ها به کلاستر

پس از نصب Ceph در کلیه نقاط، اکنون می‌توانیم OSD ها نیز به کلاستر اضافه کنیم. OSD ها پارتیشن‌های دیتا و جورنال را در دیسک /dev/sdb ایجاد می‌کنند.

بررسی وضعیت دیسک /dev/sdb در تمام نقاط OSD


ceph-deploy disk list ceph-osd1 ceph-osd2 ceph-osd3

لیست دیسک‌های نقاط OSD

لیست دیسک‌های نقاط OSD

در اینجا /dev/sdb را با فرمت XFS مشاهده می‌کنیم که قبلاُ آن را ایجاد کرده بودیم.

سپس با گزینه zap، جداول پارتیشن را در تمام نقاط حذف می‌کنیم.


ceph-deploy disk zap ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb

این فرمان تمام داده‌های /dev/sdb را در نقاط Ceph OSD پاک می‌کند.

حالا تمام نقاط OSD را آماده کنید و حتماً دقت کنید که هیچ‌گونه خطایی در نتایج وجود نداشته باشد.


ceph-deploy osd prepare ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb

پس از مشاهده وضعیت آماده ceph-osd1-3 برای استفاده به عنوان OSD، می‌توانید مطمئن باشید که فرمان را با موفقیت اجرا کرده‌اید.

آماده‌سازی نقاط ceph-osd

آماده‌سازی نقاط ceph-osd

فعال‌سازی OSD ها با کمک فرمان زیر صورت می‌گیرد.


ceph-deploy osd activate ceph-osd1:/dev/sdb ceph-osd2:/dev/sdb ceph-osd3:/dev/sdb

اکنون می‌توانید دوباره دیسک sdb را در نقاط OSD بررسی کنید.

ceph-deploy disk list ceph-osd1 ceph-osd2 ceph-osd3
فعال‌سازی نقاط Ceph osd

فعال‌سازی نقاط Ceph osd

در نتیجه، /dev/sdb دارای دو پارتیشن به صورت زیر خواهد بود.

/dev/sdb1 - Ceph Data
/dev/sdb2 - Ceph Journal

همچنین می‌توانید این بررسی را به صورت مستقیم از نقطه OSD انجام دهید.

ssh ceph-osd1
sudo fdisk -l /dev/sdb
در نتیجه، نقاط Ceph OSD ایجاد شدند.

در نتیجه، نقاط Ceph OSD ایجاد شدند.

حالا کلید management را برای تمام نقاط کلاستر Ceph به کار می‌گیریم.


ceph-deploy admin ceph-admin mon1 ceph-osd1 ceph-osd2 ceph-osd3

با استفاده از فرمان زیر، مجوّز فایل کلید را تغییر می‌دهیم.


sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

در نتیجه، کلاستر Ceph در اوبونتو 18.04 ایجاد شد.

گام ۶) تست Ceph

در گام چهارم، یک کلاستر Ceph جدید ایجاد و نقاط OSD را به آن اضافه کردیم. حالا نوبت آن است که این کلاستر را آزمایش کرده و از درستیِ عملکرد آن مطمئن شویم.

برای این منظور، از نقطه ceph-admin به سرور مانیتورینگ mon1 وارد شوید.


ssh mon1

فرمان زیر را اجرا کنید تا از سلامت کلاستر اطمینان حاصل کنید.


sudo ceph health

حالا وضعیت کلاستر Ceph را بررسی کنید.


sudo ceph -s

نتایج را به صورت زیر می‌توانید مشاهده کنید.

وضعیت کلاستر Ceph

وضعیت کلاستر Ceph

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

نهایتاً یک کلاستر Ceph جدید در اوبونتو 18.04 ساخته‌ایم و امیدواریم که این آموزش مورد توجه شما قرار گرفته باشد.