Giới Thiệu
Trong bài này, Tôi sẽ hướng dẫn cách cài đặt Apache Cassandra Cluster có thể được sử dụng luôn trên môi trường Production với 3 Nodes.
Trong bài này là phần mở rộng của bái post trước, Hướng dẫn cài đặt Cassandra trên Ubuntu 18.04. Khi cài Cassandra được cài đặt và cấu hình chỉ trên một server. Vấn đề ở đây là mô hình này không tốt cho môi trường Production, và không thể nào lưu trữ được số lượng dữ liệu lớn. Để có thể lưu trữ nhiều dữ liệu hơn, ví dụ hơn 1TB. Vì vậy trong Cluster của chúng ta sẽ phải cần 3 nodes, mỗi node có khoảng 500Gb ổ cứng.
Cassandra là gì?
Cassandra là một cơ sở dữ liệu phân tán có tính sẵn sàng cao, nó có thể lưu trự một lượng lớn dữ liệu. Một công ty lớn đang sử dụng Cassandra như Netflix, Apple và cả eBay để quản lý dữ liệu của họ với hàng tỉ truy cập mỗi ngày.
Cassandra có tính chịu lỗi rất tốt. Nó dễ dàng mở rộng đến hàng trăm, hàng nghìn node để dữ liệu có thể tự động nhân bản. Thậm chí, nếu bạn mất toàn bộ dữ liệu ở data center thì dữ liệu của bạn vẫn được đảm bảo. Việc nhân rộng dữ liệu giữa các Data Center với nhau cũng được hỗ trợ bởi Cassandra. Trên hết, Cassandra có kiểu dữ liệu phi tập trung, điều này có nghĩa là nó sẽ không có điểm lỗi nào. Các Node bị lỗi có thể được thay thế mà không gây ra tình trạng downtime hệ thống.
Cài đặt Cassandra Cluster
Trong bài này, tôi sử dụng 3 VM với 4 CPU, 4GB Ram và 500Gb ổ cứng cho mỗi con.
Để cài đặt Cluster, chúng ta cần cài đặt Cassandra trên tất cả server. Sau đó, start serivce và join mỗi Node vào trong Cluster. Chúng ta sẽ kết thúc bài Post bằng việc tạo một key và table cho Cassandra.
Cài đặt Cassandra trên Ubuntu 18.04
Đầu tiên, tiến hành cập nhật lại Ubuntu và cài đặt Java.
apt update -y && apt upgrade -y apt install openjdk-8-jdk -y apt install python -y
Download Cassandra
Chúng ta sẽ tìm và tải về bản mới nhất của Cassanra, ở đây chúng tôi ví dụ 3.11.2
Lưu ys: Những phiên bản này sẽ thường xuyên thay đổi, bạn có thể truy cập link http://apache.claz.org/cassandra để chọn bản mới nhất.
# wget http://apache.claz.org/cassandra/3.11.2/apache-cassandra-3.11.2-bin.tar.gz
# tar -xzvf apache-cassandra-3.11.2-bin.tar.gz
# mv apache-cassandra-3.11.2 /usr/local/cassandra
Tạo một user mới cho Cassandra.
Cassanra không thực thi với quyền root, chính vì vậy chúng ta cần một User và Group Cassandra mới và phân quyền cho user này.
# useradd cassandra # groupadd cassandra # usermod -aG cassandra cassandra # chown root:cassandra -R /usr/local/cassandra/ # chmod g+w -R /usr/local/cassandra/
Tạo systemd service cho Cassandra.
Tạo một tệp /etc/systemd/system/cassandra.service và thêm vào những dòng sau:
[Unit] Description=Cassandra Database Service After=network-online.target Requires=network-online.target [Service] User=cassandra Group=cassandra ExecStart=/usr/local/cassandra/bin/cassandra -f [Install] WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable cassandra.service
Cấu hình Cassandra.
Để kết nối tới Cassandra server, chúng ta sẽ cấu hình một vài thông số tại /usr/local/cassandra/conf/cassandra.yaml.
Đầu tiên, chúng ta sẽ thay đổi tham số listening address cho Cassandra. Thiết lập địa chỉ IP của server, ví dụ : 192.168.1.47.
listen_address102.168.1.47
rpc_address192.168.1.47
cluster_name: 'AdminTome Cluster'
Trong bài này, chúng ta giả định việc cài đặt Cassandra Cluster trong một Data Center. Seed sẽ quản lý Cluster và dùng để bootstrap cho những Node khác trong Cassandra Cluster. Thông thường, chúng ta sẽ cần ít nhất 1 seed trên mỗi Data Center, và không nên cấu hình seed cho tất cả các Node.
Trong trường hợp này, sẽ dùng Node đầu tiền làm seed Node, chúng ta sẽ dùng IP ( 192.168.1.47 ) cho tất cả 3 server Node còn lại.
seed_provider # Addresses of hosts that are deemed contact points.
# Cassandra nodes use this list of hosts to find each other and learn
# the topology of the ring. You must change this if you are running
# multiple nodes!
- class_nameorg.apache.cassandra.locator.SimpleSeedProvider
parameters - seeds"192.168.1.47"
Lưu và thoát.
Cassandra Performance Tuning
Hiện tại, Cơ bản chúng ta đã cấu hình hoàn tất, tuy nhiên, chúng ta cần điều chỉnh một vài thứ để cải thiện performance trên hệ thống.
Tắt Swap
Đầu tiên, chúng ta cần làm là tắt swap với câu lệnh :
# swapoff -a
# /swap.imgnoneswapsw00
Cấu hình Limit
Chúng ta cần thiết lập limit cho hệ thống để Cassandra chạy mượt hơn :
Tạo một file /etc/security/limits.d/cassandra.conf và thêm vào các nội dung :
cassandra - memlock unlimited cassandra - nofile 100000 cassandra - nproc 32768 cassandra - as unlimited
Lưu và thoát
Cấu hình Heap
Mở file etc/sysctl.conf và thêm vào các dòng sau:
vm.max_map_count = 131072
Lưu và thoát
Sau khi cấu hình xong, không cần phải reboot lại, chạy luôn câu lệnh sau để cập nhật trực tiếp :
sysctl vm.max_map_count=131072
Khởi động Cassandra Cluster
Sử dụng câu lệnh của systemd để tiến hành khởi động dịch vụ :
# systemctl start cassandra
# systemctl status cassandra
# journalctl -f -u cassandra.service
bin/cqlsh cassandra.admintome.lab
select cluster_name, listen_address from system.local;
/usr/local/cassandra/bin/nodetool status
Một khi các dịch vụ đã được start lên hết, kiểm tra trạng thái của Cluster:
/usr/local/cassandra/bin/nodetool status
Mở CQLSH và chạy câu lệnh:
CREATE KEYSPACE admintome WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
CREATE TABLE admintome.logs ( id UUID, datetime text, source text, type text, log text, PRIMARY KEY (id) );
cqlsh> create keyspace admintome with replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
cqlsh> create table admintome.logs ( id UUID, datetime text, source text, type text, log text, PRIMARY KEY (id) );
cqlsh> select * from admintome.logs;
Đối với một cơ sở dữ liệu RDBM thông thường, thì table trên làm việc ổn. Thế nhưng Cassandra thì không phải vậy, nó là cơ sở dữ liệu phân tán, chính do cách cách tạo và làm việc với table cũng có đôi chút khác biệt. Giờ chúng ta sẽ thay đổi lại cách tạo table trong Cassandra một cách chuẩn hơn.
DROP TABLE admintome.logs;
CREATE TABLE admintome.logs (
log_source text,
log_type text,
log_id timeuuid,
log text,
log_datetime text,
PRIMARY KEY ((log_source, log_type), log_id)
) WITH CLUSTERING ORDER BY (log_id DESC)
Nguồn:
Nhấn Subcribe để nhận thêm nhiều bài viết mới Like Facebook
[maxbutton id=”2″ ] [maxbutton id=”3″ ]
Đăng ký liền tay Nhận Ngay Bài Mới
Subscribe ngay
Cám ơn bạn đã đăng ký !
Lỗi đăng ký !
Add Comment