Cassandra.yaml và Nodetool Utility trong Cassandra

Cassandra

Khi triển khai Cassandra cấu hình file cassandra.yaml và sử dụng công cụ Nodetool là 2 công việc hết sức quan trọng. Bài viết sau từ viblo.asia sẽ giúp các bạn hiểu rõ chi tiết  ý nghĩa các thành phần trong cassandra.yaml và công cụ Nodetool

File thiết lập cassandra.yaml

Là file chứa các thiết lập được sử dụng khi khởi tạo một cluster mới hoặc khi đưa một node mới vào cluster có sẵn. File này cần được xem xét và thay đổi phù hợp mỗi khi khởi động node lần đầu. Các thiết lập này điều khiển cách một node hoạt động trong cluster ví dụ như giao tiếp giữa các node, phân vùng dữ liệu (data partitioning), vị trí đặt bản sao dữ liệu.

Broadcast_address: Nếu cluster của bạn được deploy trên nhiều vùng của Amazon EC2 ( và bạn sử dụng EC2MultiRegionSnitch), bạn nên đặt broadcast_address là địa chỉ IP public của node ( và địa chỉ IP private cho listen_address). Nếu bạn không thiết lập broadcast_address, mặc định nó sẽ là địa chỉ giống listen_address.

Cluster_name: là tên của cluster. Giá trị này phải giống nhau đối với mọi node nằm trong cluster.

Commitlog_directory: Là đường dẫn nơi lưu giữ commit log. Để tối ưu hoá tốc độ ghi, DataStax khuyên bạn nên để commit log ở một ổ đĩa khác với ổ lưu trữ file dữ liệu ( lý tưởng là khác một cách vật lý, không phải là khách theo kiểu logic ).

Data_file_directory: Là đường dẫn tới nơi lưu giữ các dữ liệu về column family (SSTables).

Initial_token: Giá trị này gán vị trị token của node trong ring và gán một khoảng dữ liệu cho node khi nó khởi động lần đầu. Initial_token cũng có thể không cần thiết lập khi đưa một node mới vào cluster sẵn có. Nếu không, giá trị token phụ thuộc vào partitioner mà bạn đang sử dụng. Với một partitioner ngẫu nhiên, giá trị này sẽ nằm trong khoảng từ 0 tới 2 mũ 127. Với ByteOrderPreservingPartitioner, giá trị này sẽ là một mảng byte của các giá trị hex nằm trong giá trị row key thực sự của bạn. Với OrderPreservingPartitioner và CollatedOrderPreservingPartitioner, giá trị này sẽ là một chuỗi ký tự UTF-8 dựa trên giá trị row key thực sự của bạn.

Listen_address: Là địa chỉ IP hay hostname mà các Cassandra node khác sẽ sử dụng nó để kết nối tới node này. Nếu bạn để trống, bạn cần có một dải hostname được thiết lập chính xác trên tất cả các node trong cluster để các hostname đó có thể chuyển tới địa chỉ IP chính xác của node này (sử dụng /etc/hostname, /etc/hosts hoặc là DNS).

Partitioner: Đã được nhắc tới ở bài về partitioner và replication.

Rpc_address: Địa chỉ nghe của remote procedure call ( các kết nối tới client). Để nghe được tất cả các giao interface đã được thiết lập, đặt giá trị là 0.0.0.0. Nếu bạn để trống, bạn cần có một dải hostname được thiết lập chính xác trên tất cả các node trong cluster để các hostname đó có thể chuyển tới địa chỉ IP chính xác của node này (sử dụng /etc/hostname, /etc/hosts hoặc là DNS). Giá trị mặc định : localhost. Giá trị được cho phép: một địa chỉ IP, một hostname, hoặc để trông để dẫn tới một địa chỉ sử dụng hostname được thiết lập ở node.

Rpc_port: Cổng dành cho remote procedure call ( các liên kết tới client) và Thrift service. Giá trị mặc định là 9160.

Saved_caches_directory: Là đường dẫn tới nơi column family key và row cache được lưu trữ.

Seed_provider: là một pluggable interface để cung cấp một danh sách các seed node. Các seed node trong danh sách được phân cách bởi dấu phẩy.

Seeds: Khi một node tham gia vào cluster, nó sẽ liên lạc tới các seed node để quyết định cấu trúc hình học của ring và lấy thông tin gossip từ các node khác trong clustwr. Mọi node trong cluster phải có cùng một danh sách các seed node. Trong một cluster trải trên nhiều data center, mỗi data center phải bao gồm ít nhất một seed node.

Storage_port: Là cổng giao tiếp nội bộ giữa các node. Mặc định là 7000.

Endpoint_snitch: Đặt snitch để thiết lập vị trí node và tìm đường cho request. Snitch trong Cassandra gồm có các kiểu:

org.apache.cassandra.locator.SimpleSnitch

org.apache.cassandra.locator.RackInferringSnitch

org.apache.cassandra.locator.PropertyFileSnitch

org.apache.cassandra.locator.Ec2Snitch

Nodetool utility

Là một command line interface sử dụng để quản lý một cluster.

Cấu trúc câu lệnh :

nodetool –h HOSTNAME [-p JMX_PORT] COMMAND

Hầu hết các command của nodetool hoạt động trong một node nếu –h không được sử dụng để định danh một hoặc nhiều node khác. Những command sau đây hoạt động trong phạm vi toàn cluster: rebuild, repair, taketoken.

Nếu bạn thực hiện câu lệnh từ chính node mà bạn cầu điều khiển, bạn không cần đưa thêm option –h vào câu lệnh, ngược lại bạn có thể dụng –h để định danh một node khác mà bạn cần điều khiển.

cfhistograms: cung cấp thống kê về các bảng, bao gồm số lượng các SSTable, đọc/viết ngầm, kích thước phân vùng (row), và đếm số cell.

cfstats: cung cấp thống kê về một hoặc nhiều table. Bạn có thể dùng ký hiệu dot (dấu chấm) để chỉ ra một hoặc nhiều tên keyspace và table. Nếu bạn không chỉ ra một keyspace và table, Cassandra sẽ đưa ra thống kê về tất cả các table.

cleanup: sử dụng câu lệnh này để loại bỏ những dữ liệu không cần thiết sau khi thêm một node vào trong cluster. Cassandra không tự động loại bỏ các dữ liệu từ những node đã mất khoảng phân vùng của chúng tới một node mới. Chạy nodetool cleanup ở node nguồn và ở node lân cận cùng chia sẻ một khoảng con (subrange) sau khi node mới được thêm vào. Sau khi thêm node mới vào, nếu chạy câu lệnh này thất bại sẽ khiến cho Cassandra phải bao gồm cả dữ liệu cũ để load cân bằng lại ở node đó. Chạy nodetool cleanup khiến nhất thời tăng tỉ lệ sử dụng ổ đĩa đối với kích thước của SSTable lớn nhất. Xảy ra Disk I/O khi chạy câu lệnh này.

Chạy câu lệnh này ảnh hưởng tới các node có column counter ở một bảng. Cassandra gán một counter ID mới tới node.

Một cách tuỳ chọn, câu lệnh này lấy một danh sách các tên table. Nếu bạn không chỉ rõ keyspace, câu lệnh này sẽ xoá hết tất cả các keyspace mà không còn thuộc về một node.

cleansnapshot: Xoá tất cả các snapshot ở một hoặc nhiều keyspace. Để xoá tất cả các snapshot thì bỏ qua phần tên snapshot.

compact: Câu lệnh này khởi động tiến trình compaction (nén) ở các table sử dụng SizeTieredCompactionStrategy. Bạn có thể chỉ ra một keyspace cho việc nén. Nếu bạn không chỉ ra keyspace, lệnh nodetool sẽ sử dụng keyspace hiện tại. Bạn có thể chỉ chọn ra một hoặc vài table cho việc nén. Nếu bạn không chỉ ra table cụ thể, quá trình nén sẽ diễn ra với tất cả các table ở trong keyspace hiện tại. Đây được gọi là một major compaction (nén toàn bộ). Nếu bạn chỉ ra table cụ thể thì việc nén sẽ chỉ diễn ra ở table đó. Đây gọi là minor compaction (nén một phần). Một major compaction nén tất cả các SSTable đang tồn tại vào một SSTable. Trong quá trình nén, sẽ xuất hiện các điểm chóp ở phần tài nguyên đĩa sử dụng hay disk I/O. Sự xuất hiện này là nhất thời do có những thời điểm tồn tại cả SSTable mới và SSTable cũ. Một major compaction có thể gây ra những tiến trình disk I/O lớn đáng kể.

compactionhistory: Cung cấp lịch sử về các lần compaction.

compactionstats: Đưa ra các thống kê về compaction. Tổng số column cho biết tổng số byte chưa nén của SSTable đang được nén. Log hệ thống liệt kê ra tên của các SSTable bị nén.

decommission: deactive một node bằng cách stream dữ liệu của nó tới một node khác.

describering: Cung cấp các khoảng phân mảnh (partition range) của keyspace.

disableautocompaction: Vô hiệu hoá autocompaction đối với keyspace và một hoặc nhiều table. Một keyspace có thể có một hoặc nhiều table.

disablebackup: vô hiệu hoá incremental backup.

disablebinary: vô hiệu hoá giao thức nhị phân (binary protocol), còn được biết đến với cái tên native transport.

disablegossip: vô hiệu hoá giao thức gossip. Command này thường được sử dụng để giả việc một node đang bị tắt.

disablehandoff: vô hiệu hoá việc lưu trữ future hint ở node hiện tại.

disablethrift: vô hiệu hoá thrift server.

drain: fllush tất cả các memtable của một node và làm cho node ngừng các hoạt động viết. Các hoạt động đọc vẫn hoạt động bình thường. Bạn thường sử dụng lệnh này trước khi update một node lên phiên bản mới của Cassandra.

enableautocompaction, enablebackup, enablebinary, enablegossip, enablehandoff, enablethrift: ngược lại với các lệnh disableautocompaction, disablebackup, diablebinary, disablegosssip, diablehandoff, disablethrift.

flush: flush một hoặc nhiều table ở memtable.

getcompactionthreshold: cung cấp compaction thresholds (ngưỡng nén) lớn nhất và nhỏ nhất bằng đơn vị megabyte ở một table.

getendpoints: cung cấp end point chứa một partition key.

getsstable: cung cấp SSTable chứa partition key.

getstreamthroughput: cung cấp giới hạn throughput của streaming trong hệ thống ở đơn vị byte trên giây.

gossipinfo: Cung cấp thong tin gossip cho cluster.

info: cung cấp thong tin bao gồm token và thông tin về dung lượng ổ đĩa (load), thời gian bắt đầu (khởi tạo), thời gian chạy tính bằng giây (uptime in seconds), và lượng heap memory được sử dụng.

invalidatekeycache: Đặt lại các thông số global key cache về giá trị mặc định và lưu lại tất cả các key. Mặc định, key_cache_keys_to_save bị vô hiệu hoá trong cassandra.yaml. Câu lệnh này đặt lại các thông số này về mặc định.

invalidaterowcache: Đặt lại các thông số global key cache, row_cache_keys_to_save, về mặc định.

join: Cho node tham gia vào một ring (cluster), cho rằng node này ban đầu không khởi động bên trong ring sử dụng tuỳ chọn –D join_ring=false của cassandra utility. Node này cần được thiết lập chính xác về danh sách seed

Xem thêm: Cài đặt và cấu hình Cassandra


Nguồn: viblo.asia

Share: