- vừa được xem lúc

Cassandra DB - P2 - Installation and Configuration

0 0 34

Người đăng: Trịnh Quốc Việt

Theo Viblo Asia

Chào mọi người, trong phần 1 chúng ta đã hiểu được sơ bộ các thành phần của Cassandra và cơ chế hoạt động của nó. Trong phần này mình sẽ giới thiệu cách triển khai một cụm database Casssandra với các bước cài đặt và cấu hình chi tiết.

Môi trường triển khai

Trong phạm vi series này, mình sẽ triển khai Cụm Cassandra trên 3 máy chủ Centos 7 là 3 máy ảo VMWare. Cassandra sẽ được cài dưới dạng OS Service (cài qua gói của yum trên Centos). Các bạn hoàn toàn có thể thử cài trên docker hoặc K8S tuy nhiên trong phạm vi bài viết này thì mình không đề cập tới Và để việc cài đặt được thuận tiện thì bước planning cũng là rất quan trọng, dù là hệ thống lab. Các bạn cần chuẩn bị sẵn các thông tin sau trước khi thực hiện cài đặt:

  • Hostname/IP của các node
  • Phân vùng lưu trữ dữ liệu Trong bài lab này, mình đã chuẩn bị các máy chủ như sau:
STT
Máy chủ
IP
Port
Thư mục data
Thư mục cấu hình
1
cassandra1 192.168.10.31 9042 /data/cassandra/ /etc/cassandra/conf/ (mặc định của cassandra)
2
cassandra2 192.168.10.32 9042 /data/cassandra/ /etc/cassandra/conf/ (mặc định của cassandra)
3
cassandra3 192.168.10.33 9042 /data/cassandra/ /etc/cassandra/conf/ (mặc định của cassandra)

Yêu cầu cài đặt

Các máy chủ này cần có kết nối Internet, và bạn phải có quyền sudo để thực hiện cài đặt và cấu hình các service và các file cấu hình. Các máy chủ đã được cài đặt Centos7, đặt hostname và IP theo quy hoạch.

Cài đặt service (trên cả 3 máy chủ)

Cài đặt java

sudo dnf update -y
sudo dnf install java-1.8.0-openjdk-devel
java -version

Thêm cassandra package vào yum repo

sudo tee /etc/yum.repos.d/cassandra.repo <<EOF
[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS
EOF

Download và cài đặt cassandra package

sudo dnf -y install cassandra

Cấu hình OS service cho cassandra

sudo tee /etc/systemd/system/cassandra.service<<EOF
[Unit]
Description=Apache Cassandra
After=network.target
[Service]
PIDFile=/var/run/cassandra/cassandra.pid
User=cassandra
Group=cassandra
ExecStart=/usr/sbin/cassandra -f -p /var/run/cassandra/cassandra.pid
Restart=always
[Install]
WantedBy=multi-user.target
EOF

Lưu ý:

Trong cấu hình trên tham số ExecStart không set thư mục cấu hình thì cassandra là sẽ tự động tìm tới file cassandra.yml trong thư mục mặc định: /etc/cassandra/conf/ Nếu bạn muốn đổi thư mục cài đặt khác mặc định thì cần chỉ định thêm tham số "-d /path-to-config-file" trong ExecStart

Tạo thư mục lưu data và phân quyền

sudo mkdir -p /data/cassandra/ sudo mkdir -p /data/cassandra/commitlog sudo mkdir -p /data/cassandra/data
sudo mkdir -p /data/cassandra/hints
sudo mkdir -p /data/cassandra/saved_caches
sudo chown -R cassandra:cassandra /data/cassandra/

Cấu hình một số tham số quan trọng trong file /etc/cassandra/conf/cassandra.yaml

Note: Nếu bạn sử dụng file cấu hình khác với mặc định thì cập nhật lại đường dẫn tương ứng

cluster_name: mycluster #Tên cluster của bạn. Tham số này cần cài giống nhau trên tất cả các node
num_tokens: 256 #Hiểu đơn giản là số lượng partition của mỗi node
hints_directory: /data/cassandra/hints
data_file_directories: - /data/cassandra/data
commitlog_directory: /data/cassandra/commitlog
saved_caches_directory: /data/cassandra/saved_caches
seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: - seeds: "192.168.10.31,192.168.10.32,192.168.10.33" #List các IP của các node trong cluster
listen_address: 192.168.10.31 # Là IP của node tương ứng.
rpc_address: 192.168.10.31 # Là IP của node tương ứng.
endpoint_snitch: GossipingPropertyFileSnitch
broadcast_rpc_address: 192.168.10.31 # Là IP của node tương ứng.
authenticator: PasswordAuthenticator
authorizer: org.apache.cassandra.auth.CassandraAuthorizer
role_manager: CassandraRoleManager

Cấu hình thông tin rack trong file /etc/cassandra/conf/cassandra-rackdc.properties

dc=mydc #Điền thông tin tên DC của bạn vào đây
rack=myrack #Điền thông tin tên Rack của bạn vào đây
prefer_local=true

Start cassandra service

sudo systemctl daemon-reload
sudo systemctl start cassandra

Sau khi start trên tất cả các node thì kiểm tra trạng thái các node bằng lệnh sau trên máy chủ bất kỳ:

[_@.com ~]# nodetool status
Datacenter: mydc
================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.10.31 4.71 MiB 256 100.0% 96ac2d78-ac2f-439b-87b3-f306396da4ff myrack
UN 192.168.10.32 4.72 MiB 256 100.0% 3e5e7407-444f-4f5a-832d-f58e121220a1 myrack
UN 192.168.10.33 4.71 MiB 256 100.0% ceda5c0b-7dde-4c48-be0f-58e14d30672b myrack

Kết nối vào Cassandra database

Để kết nối vào DB thì các nhanh và đơn giản nhất là dùng cqlsh để kết nối, mặc định đã được cài đặt khi bạn cài Cassandra. User/pass mặc định khi cài là cassandra/cassandra, bạn có thể đổi và cấu hình bảo mật theo nhu cầu. Phần này mình sẽ có topic riêng để nói chi tiết hơn.

[_@.com ~]$ sudo cqlsh 192.168.10.31 -u cassandra -p cassandra
Connected to CassandraCluster at 192.168.10.31:9042.
[cqlsh 5.0.1 | Cassandra 3.11.12 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
_@.com>

Tại đây bạn có thể xem thông tin các keyspace:

cassandra@cqlsh> SELECT * FROM system_schema.keyspaces; keyspace_name | durable_writes | replication
--------------------+----------------+------------------------------------------------------------------------------------- system_auth | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '1'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} ks1 | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'} system_distributed | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} system_traces | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '2'} ks2 | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'} (7 rows)

Để tạo mới một keyspace:

CREATE KEYSPACE ks1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'} AND durable_writes = true;

Trong đó eplicationfactor là số replica cho partition.

Xem thông tin chi tiết của một keyspace:

cassandra@cqlsh> DESCRIBE KEYSPACE "ks1"; CREATE KEYSPACE ks1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'} AND durable_writes = true; CREATE TABLE ks1.mytbl1 ( id int PRIMARY KEY, address text, firstname text, hobby text, lastname text
) WITH bloom_filter_fp_chance = 0.01 AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} AND comment = '' AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND crc_check_chance = 1.0 AND dclocal_read_repair_chance = 0.1 AND default_time_to_live = 0 AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair_chance = 0.0 AND speculative_retry = '99PERCENTILE';

Tạo một table trong keyspace vừa tạo bên trên:

CREATE TABLE ks1.mytbl1 ( id int PRIMARY KEY, firstname text, lastname text, address text,
hobby text,
);

Xem danh sách các table trong một keyspace:

cassandra@cqlsh> SELECT keyspace_name,table_name,bloom_filter_fp_chance,compaction,memtable_flush_period_in_ms FROM system_schema.tables WHERE keyspace_name = 'ks1'; keyspace_name | table_name | bloom_filter_fp_chance | compaction | memtable_flush_period_in_ms
---------------+------------+------------------------+---------------------------------------------------------------------------------------------------------------------------+----------------------------- ks1 | mytbl1 | 0.01 | {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} | 0 (1 rows)

Xem thông tin thống kê của một table:

[_@.com ~]# nodetool tablestats ks1.mytbl1
Total number of tables: 38
----------------
Keyspace : ks1 Read Count: 1 Read Latency: 1.127 ms Write Count: 0 Write Latency: NaN ms Pending Flushes: 0 Table: mytbl1 SSTable count: 1 Space used (live): 223473 Space used (total): 223473 Space used by snapshots (total): 0 Off heap memory used (total): 7096 SSTable Compression Ratio: 0.4088160049960831 Number of partitions (estimate): 5000 Memtable cell count: 0 Memtable data size: 0 Memtable off heap memory used: 0 Memtable switch count: 0 Local read count: 1 Local read latency: NaN ms Local write count: 0 Local write latency: NaN ms Pending flushes: 0 Percent repaired: 0.0 Bloom filter false positives: 0 Bloom filter false ratio: 0.00000 Bloom filter space used: 6416 Bloom filter off heap memory used: 6408 Index summary off heap memory used: 640 Compression metadata off heap memory used: 48 Compacted partition minimum bytes: 61 Compacted partition maximum bytes: 86 Compacted partition mean bytes: 84 Average live cells per slice (last five minutes): NaN Maximum live cells per slice (last five minutes): 0 Average tombstones per slice (last five minutes): NaN Maximum tombstones per slice (last five minutes): 0 Dropped Mutations: 0
----------------

Tổng kết: Qua topic này các bạn đã có thể dựng cho mình một cụm Cassandra database gồm 3 node chạy replica với nhau để tăng tính dự phòng. Ngoài ra cũng đang biết cách để bước đầu tạo các keyspace, table và các thao tác kiểm tra các thông tin cơ bản của hệ thống.

Trong bài tiếp theo mình sẽ tiếp tục hướng dẫn các thao tác sử dụng và quản trị chi tiết hơn

Bình luận

Bài viết tương tự

- vừa được xem lúc

Create local develop environment Lavarel by Docker (Apache version)

Repository. https://github.com/ucan-lab/docker-laravel-apache. Cách dùng.

0 0 46

- vừa được xem lúc

Xử lý Apache Access logs với LogStash trong ELK Stack

Mở đầu. Xin chào các bạn, nhân dịp đang có cơ hội được tìm hiểu về ELK Stack mình muốn chia sẻ với các bạn một số thứ mà mình mò mẫm và học được từ công nghệ đang khá hot này.

0 0 42

- vừa được xem lúc

13 mẹo bảo mật server web Apache

Chào mọi người . Chắc hẳn ai học lập trình web đều rất quen thuộc với server web Apache, nó là một máy chủ web rất phổ biến để lưu trữ các trang web của bạn trên web.

0 0 79

- vừa được xem lúc

Lỗ hổng bảo mật Log4Shell(CVE-2021-4428) của thư viện Apache Log4j2

Giới thiệu. Tóm tắt câu chuyện làm chấn động giới IT mấy ngày gần đây đó chính là, có một lỗ hổng bảo mật vô cùng nghiêm trọng liên quan đến thư viện Log4j2 được cung cấp bởi Apache khiến hacker có th

0 0 36

- vừa được xem lúc

Hướng dẫn đọc và ghi file excel trong Java sử dụng thư viện Apache POI

Excel là định dạng file rất phổ biến được tạo ra bởi Microsoft. Thông thường, các ứng dụng Java sử dụng thư viện Apache POI để đọc và ghi tập tin Excel.

0 0 36

- vừa được xem lúc

PHP websites sử dụng Docker Containers với PHP, Apache2 và MySQL

Xem lại series về các lệnh cơ bản trong docker: PHẦN 1, PHẦN 2, PHẦN 3. Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng dễ dàng hơn bằng cách sử dụng các containers.

0 0 49