تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه نصب Cassandra و راه‌اندازی کلاستر چند نوده در اوبونتو Ubuntu


۱۵ اردیبهشت ۱۴۰۴

Cassandra یک پایگاه‌داده توزیع‌شده از نوع NoSQL است که بدون نیاز به سرور اصلی طراحی شده و بیشتر برای برنامه‌های حساس و مقیاس‌پذیر استفاده می‌شود، به‌طوری‌که ویژگی مقیاس‌پذیری و تحمل خطای آن، باعث شده که این پایگاه‌داده برای استقرارهای چند نوده انتخاب بسیار مناسبی باشد. در Cassandra، هر نود به‌طور مستقل کار می‌کند و در نهایت همه نودها داخل یک کلاستر توزیع شده با هم هماهنگ می‌شوند.

در این آموزش از لیارا به شما نشان می‌دهیم که چگونه Cassandra را نصب کرده و یک کلاستر چند نوده را روی اوبونتو 22.04 راه‌اندازی کنید.

پیش‌نیازها

برای دنبال کردن این آموزش به موارد زیر نیاز خواهید داشت:

  • حداقل دو سرور اوبونتو 24.04 رو روی سرور مجازی خود نصب و پیکربندی کرده باشید، با یک کاربر غیر روت (non-root) دارای دسترسی sudo، فایروال فعال و حداقل 2 گیگابایت رم (توجه: Cassandra روی سرورهایی که فقط 1 گیگابایت رم دارند نصب نمی‌شود.) اگر سرور اوبونتو را روی سرور مجازی خود نصب نکرده‌اید، مقاله نحوه راه‌اندازی اولیه سرور مجازی با اوبونتو Ubuntu را بخوانید.
  • نصب Java runtime روی سرور مجازی اوبونتو، برای راهنمای نصب این مقاله را مطالعه کنید.
  • نصب Cassandra روی هر دو سرور مجازی اوبونتو
نحوه نصب Cassandra و راه‌اندازی کلاستر چند نوده در اوبونتو Ubuntu

همچنین بخوانید:

  • مرحله اول: پیکربندی فایروال برای مجاز کردن ترافیک Cassandra
  • مرحله دوم: حذف داده‌های از پیش‌نصب شده Cassandra
  • مرحله سوم: پیکربندی کلاستر Cassandra
  • مرحله چهارم: راه‌اندازی مجدد Cassandra
  • مرحله پنجم: اتصال به کلاستر چند نوده Cassandra
  • جمع‌بندی
  • سوالات متداول

مرحله اول: پیکربندی فایروال برای مجاز کردن ترافیک Cassandra

برای اینکه کلاستر چند نوده Cassandra درست کار کند، همه نودها باید بتوانند با هم ارتباط برقرار کنند. برای این‌کار فایروال باید طوری تنظیم شود که اجازه دهد ترافیک Cassandra بین نودها رد و بدل شود. پس بیایید فایروال را برای مجاز کردن ترافیک تنظیم کنیم.

پورت‌های مورد نیاز برای هر نود:

  • پورت 7000: این پورت TCP برای ارسال دستورات و داده‌ها بین نودها استفاده می‌شود.
  • پورت 9042: این پورت TCP برای ارتباط سرور انتقال بومی است. ابزار خط فرمان Cassandra، یعنی cqlsh از این پورت برای اتصال به کلاستر استفاده می‌کند.

حالا، برای اجرای دستورات روی نود اول (node1) در کلاستر Cassandra، از دستور زیر استفاده کنید:

sudo ufw allow from node2-internal-ip-address to node1-internal-ip-address proto tcp port 7000,9042

برای معکوس کردن آدرس‌های IP روی نود دوم، دستور زیر را اجرا کنید:

sudo ufw allow from node1-internal-ip-address to node2-internal-ip-address proto tcp port 7000,9042

دستور بالا را برای تعداد نودهای موجود در کلاستر خود، تکرار کنید. فقط ترتیب آدرس‌های IP را تغییر دهید. اگر N نود در کلاستر دارید. باید دستور بالا را N-1 بار روی هر نود اجرا کنید.

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

sudo ufw status numbered

خروجی دستور، قوانین جدیدی که اضافه کردید را به شما نمایش می‌دهد:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere                  
[ 2] 10.124.0.3 7000,9042/tcp  ALLOW IN    10.124.0.2                
[ 3] OpenSSH (v6)               ALLOW IN    Anywhere (v6)

با فایروال تنظیم شده، باید بتوانید از یک نود به نود دیگر ping بزنید. برای ارسال سه بسته از یک نود به نود دیگر از دستور زیر استفاده کنید:

ping -c 3 internal-ip-address-of-other-node

اگر بسته‌ها از فایروال عبور کرده باشند، خروجی باید به شکل زیر باشد:

PING internal-ip-address-of-other-node (internal-ip-address-of-other-node) 56(84) bytes of data.
64 bytes from internal-ip-address-of-other-node: icmp_seq=1 ttl=64 time=0.043 ms
64 bytes from internal-ip-address-of-other-node: icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from internal-ip-address-of-other-node: icmp_seq=3 ttl=64 time=0.066 ms

--- internal-ip-address-of-other-node ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2036ms
rtt min/avg/max/mdev = 0.043/0.056/0.066/0.009 ms

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

برای آموزش کامل و کاربردی import و export کردن پایگاه داده MongoDB در اوبونتو 24.04 مقاله زیر را می‌توانید مطالعه کنید.
نحوه import و export کردن پایگاه داده MongoDB
برای تجربه‌ای سریع، مقیاس‌پذیر و امن در پایگاه داده‌های MongoDB، هاست ابری MongoDB لیارا را امتحان کنید.
✅ عملکرد پایدار ✅ شبکه خصوصی ✅منابع اختصاصی
خرید هاست ابری MongoDB

مرحله دوم: حذف داده‌های از پیش‌نصب شده Cassandra

در این مرحله هر سرور، یک کلاستر تک نوده دارد که قرار است به بخشی از کلاستر چند نوده تبدیل شود. در اینجا باید نودها را طوری تنظیم کنید که با هم کار کرده و به‌عنوان یک کلاستر چند نوده Cassandra عمل کنند.

دستورات این مرحله را باید روی هر نود اجرا کنید که قرار است داخل کلاستر باشد. پس به تعداد نودهایی که دارید ترمینال shell باز کنید.

اولین دستوری که باید روی هر نود اجرا کنید، متوقف کردن دیمون Cassandra است:

sudo systemctl stop cassandra

حالا باید داده‌های پیش‌فرضی که همراه هر نصب Cassandra آمده را با دستور rm حذف کنید:

sudo rm -rf /var/lib/cassandra/*

آپشن r به‌صورت بازگشتی تمام فایل‌ها و پوشه‌های ساب‌دایرکتوری هدف را حذف می‌کند. آپشن f هم یعنی هیچ‌وقت از کاربر درخواست ورودی نکند.

وقتی این‌کار را روی تمام نودهایی که قرار است بخشی از کلاستر باشند، انجام دادید، حالا نودها آماده هستند که به عنوان اعضای کلاستر پیکربندی شوند. در مرحله بعد این کار را انجام می‌دهیم.

مرحله سوم: پیکربندی کلاستر Cassandra

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

برای تحمل خطا، ممکن است چندین نود seed داشته باشید، اما در این آموزش فقط از یک نود seed استفاده می‌کنیم.

فایل پیکربندی /etc/cassandra/cassandra.yaml دستورات زیادی دارد و بصورت کامل کامنت‌گذاری شده است. از نود seed مشخص شده خود (در این آموزش node1 است) شروع کنید و فایل پیکربندی را با دستور زیر برای ویرایش باز کنید:

sudo nano /etc/cassandra/cassandra.yaml

در فایل باز شده فقط باید دستورات زیر را تغییر دهید تا کلاستر چند نوده Cassandra را راه‌اندازی کنید:

...
cluster_name: 'CassandraDOCluster'
...
seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
         - seeds: "node1-internal-ip-address"
...
listen_address: "targetnode-internal-ip-address"
...
rpc_address: "targetnode-internal-ip-address"
...
endpoint_snitch: GossipingPropertyFileSnitch
...
auto_bootstrap: false

1. بروزرسانی نام کلاستر (cluster_name)

اولین کاری که باید انجام دهید این است که در بخش cluster_name نام کلاستر خود را وارد کنید. مثلا در این مثال از نام CassandraDOCluster استفاده کرده‌ایم.

2. تنظیم آی‌پی‌های نود Seed در بخش seeds

در قسمت seed_provider لیستی به‌نام seeds می‌باشد که باید آی‌پی‌های داخلی نودهای seed کلاستر را در این قسمت وارد کنید. برای هر نود در کلاستر، باید آی‌پی نود seed اولین نودی باشد که Cassandra را روی آن راه‌اندازی می‌کنید.

4. تنظیم endpoint_snitch برای مسیریابی

در بخش endpoint_snitch، باید کلاسی را وارد کنید که برای پیدا کردن نودها و مسیریابی درخواست‌ها داخل کلاستر استفاده می‌شود. به طور پیش‌فرض این مقدار SimpleSnitch هست که فقط برای کلاسترهای Cassandra در یک دیتاسنتر کار می‌کند. برای کلاسترهای تولیدی بهتر است از GossipingPropertyFileSnitch استفاده کنید.

5. اضافه کردن و تنظیم auto_bootstrap

دستور auto_bootstrap در فایل کانفیگ وجود ندارد، پس باید خودتان آن را اضافه کنید و مقدارش را روی false تنظیم کنید. این تنظیم برای زمانی که دارید نودها را به کلاستری که داده دارد، اضافه می‌کنید اختیاری است، اما برای راه‌اندازی کلاستر جدید (بدون داده) ضروری است.

بعد از انجام تنظیمات فایل را ذخیره کرده و خارج شوید.

این تغییرات را برای همه سرورهایی که می‌خواهید در کلاستر قرار دهید، تکرار کنید.

در آخر مطمئن شوید که لیست seed در همه نودها یکسان است و آدرس‌های listen_address و rpc_address با آی‌پی داخلی نود مورد نظرتان مطابقت دارد.

آموزش جامع و کاربری بکاپ‌گیری از PostgreSQL در اوبونتو 24.04 را در مقاله زیر بخوانید.
بکاپ‌گیری از PostgreSQL

مرحله چهارم: راه‌اندازی مجدد Cassandra

تا اینجا کار، با انجام تمام تنظیمات حالا وقت آن است که سرویس Cassandra را مجددا روی هر نود راه‌اندازی کنید، دقت کنید که باید از نود seed این‌کار را شروع کنید.

برای این‌کار دستور زیر را در ترمینال نود seed اجرا کنید:

sudo systemctl start cassandra

بررسی کنید که سرویس فعال باشد:

● cassandra.service - LSB: distributed storage system for structured data
     Loaded: loaded (/etc/init.d/cassandra; generated)
     Active: active (running) since Sat 2022-07-09 22:43:19 UTC; 22h ago
       Docs: man:systemd-sysv-generator(8)
      Tasks: 70 (limit: 2327)
     Memory: 1.2G
        CPU: 44min 311ms
     CGroup: /system.slice/cassandra.service
             └─18800 /usr/bin/java -ea -da:net.openhft... -XX:+UseThreadPriorities -XX:+HeapDumpOnOutOfMemoryError -Xss256k -XX:+A>

Jul 09 22:43:19 cassa-1 systemd[1]: Starting LSB: distributed storage system for structured data...
Jul 09 22:43:19 cassa-1 systemd[1]: Started LSB: distributed storage system for structured data.

حالا با استفاده از همان دستورات، سرویس Cassandra را روی سایر نودها (سرورها) نیز راه‌اندازی کرده و بررسی کنید که سرویس روی هر نود در حال اجرا است.

تبریک:) در این مرحله، سرویس‌های Cassandra را روی تمام نودها راه‌اندازی کردید. در مرحله بعدی وضعیت کلاستر را چک می‌کنید و به‌آن متصل می‌شوید.

اگر به دنبال آموزش بکاپ‌گیری از دیتابیس MySQL در سرور مجازی اوبونتو 24.04 هستید، پیشنهاد می‌کنیم مقاله زیر را مطالعه کنید.
بکاپ‌گیری از دیتابیس MySQL

مرحله پنجم: اتصال به کلاستر چند نوده Cassandra

در نهایت که تمام مراحل لازم برای راه‌اندازی کلاستر چند نوده را انجام دادید، حالا باید به کلاستر وصل شوید.

اول از همه با دستور زیر بررسی کنید که آیا نودها با هم در حال ارتباط هستند یا خیر:

sudo nodetool status

خروجی باید اینطور باشد:

Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load        Tokens  Owns (effective)  Host ID                               Rack 
UN  10.124.0.3  991.64 KiB  256     100.0%            9ab882d9-b408-4e75-bd00-79f278e81277  rack1
UN  10.124.0.2  413.57 KiB  256     100.0%            92fc1d95-cf4e-4a68-b1cf-d7e2507fc003  rack1

اکنون، اگر بتوانید همه نودهایی که تنظیم کرده‌اید را ببینید، یعنی کلاستر چند نودی Cassandra را با موفقیت راه‌اندازی کرده‌اید.

حالا برای اتصال به کلاستر، ازcqlsh استفاده کنید، فقط کافیست آدرس IP یکی از نودهای کلاستر را به دستور cqlsh بدهید تا به شبکه وصل شده و بتوانید با Cassandra کار کنید:

cqlsh server-internal-ip-address 9042

پورت 9042 همان پورتی است که cqlsh از آن برای اتصال به کلاستر استفاده می‌کند. اگه همه موارد درست پیش‌رفته باشد و سرویس Cassandra روی نود مورد نظر بالا باشد، با اجرای دستور زیر:

cqlsh 192.168.0.10

بدون خطا به کلاستر وصل می‌شوید و خروجی شبیه به این خواهید دید:

Connected to CassandraDOCluster at 10.124.0.2:9042
[cqlsh 6.0.0 | Cassandra 4.0.4 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
cqlsh>

با یک کوئری ساده، اطلاعات کلی از کلاستر را مشاهده کنید:

describe cluster

خروجی:

Cluster: CassandraDOCluster
Partitioner: Murmur3Partitioner
Snitch: DynamicEndpointSnitch

برای خروجی exit را اجرا کنید:

exit

اکنون شما می‌توانید به کلاستر چند نودی خود متصل شده و از آن استفاده کنید.

با سرور مجازی ابری لیارا، سرور خود را با بالاترین عملکرد و امنیت، به‌راحتی مدیریت کنید!
✅ مقیاس‌پذیری بالا ✅ منابع اختصاصی و قابل تنظیم ✅ پشتیبانی 24/7 ✅ هزینه به‌صرفه ✅ استقرار سریع
خرید سرور مجازی ابری لیارا

جمع‌بندی

شما با موفقیت یک کلاستر چندنودی Cassandra راه‌اندازی کردید. در این مسیر، مراحل مختلفی از جمله تنظیم قوانین فایروال، حذف داده‌های پیش‌فرض، پیکربندی فایل‌های تنظیمات و راه‌اندازی سرویس‌ها را به‌درستی طی کردید. با این ساختار شما می‌توانید، داده‌ها را در چندین نود ذخیره و بین آن‌ها تبادل کنید، بدون آن‌که نگرانی‌ای بابت محل فیزیکی ذخیره‌سازی آن‌ها داشته باشید. با استفاده از ابزار cqlsh نیز می‌توانید به کلاستر چند نودی خود متصل شوید.

سوالات متداول

کاساندرا (Cassandra) چیست؟

Cassandra یک دیتابیس NoSQL توزیع‌شده‌ است که برای مدیریت حجم زیادی از داده طراحی شده است.

چطور می‌توانم مطمئن شوم که نودها واقعاً به هم وصل شدند؟

برای بررسی اتصال نودها به هم، از دستور nodetool status استفاده کنید. این دستور لیست نودها، وضعیت‌شان(مثل UN، DN)، آی‌پی و اطلاعاتی مثل درصد استفاده از فضای دیسک را نشان می‌دهند.

در صورتی خاموش شدن یکی از نودها چه اتفاقی می‌افتد؟

Cassandra به‌صورت توزیع‌شده طراحی شده، بنابراین اگه نودی از دسترس خارج شود، بقیه نودها همچنان به کارشان ادامه می‌دهند.

بعدا می‌توانم نود جدید به کلاستر اضافه کنم؟

بله، فقط کافیست فایل کانفیگ cassandra.yaml نود جدید را تنظیم کنید، آی‌پی نود Seed را به آن بدهید، auto_bootstrap را روی true بگذارید و بعد سرویس Cassandra را استارت کنید.

به اشتراک بگذارید