آنچه در این مقاله میخوانید
نحوه نصب Cassandra و راهاندازی کلاستر چند نوده در اوبونتو Ubuntu
۱۵ اردیبهشت ۱۴۰۴
Cassandra یک پایگاهداده توزیعشده از نوع NoSQL است که بدون نیاز به سرور اصلی طراحی شده و بیشتر برای برنامههای حساس و مقیاسپذیر استفاده میشود، بهطوریکه ویژگی مقیاسپذیری و تحمل خطای آن، باعث شده که این پایگاهداده برای استقرارهای چند نوده انتخاب بسیار مناسبی باشد. در Cassandra، هر نود بهطور مستقل کار میکند و در نهایت همه نودها داخل یک کلاستر توزیع شده با هم هماهنگ میشوند.
در این آموزش از لیارا به شما نشان میدهیم که چگونه Cassandra را نصب کرده و یک کلاستر چند نوده را روی اوبونتو 22.04 راهاندازی کنید.
پیشنیازها
برای دنبال کردن این آموزش به موارد زیر نیاز خواهید داشت:
- حداقل دو سرور اوبونتو 24.04 رو روی سرور مجازی خود نصب و پیکربندی کرده باشید، با یک کاربر غیر روت (non-root) دارای دسترسی sudo، فایروال فعال و حداقل 2 گیگابایت رم (توجه: Cassandra روی سرورهایی که فقط 1 گیگابایت رم دارند نصب نمیشود.) اگر سرور اوبونتو را روی سرور مجازی خود نصب نکردهاید، مقاله نحوه راهاندازی اولیه سرور مجازی با اوبونتو Ubuntu را بخوانید.
- نصب Java runtime روی سرور مجازی اوبونتو، برای راهنمای نصب این مقاله را مطالعه کنید.
- نصب Cassandra روی هر دو سرور مجازی اوبونتو

همچنین بخوانید:
- مرحله اول: پیکربندی فایروال برای مجاز کردن ترافیک 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 را استارت کنید.