Điều kiện tiên quyết
- Một cụm Cassandra mà CloudThinker truy cập được qua cổng CQL native transport, mặc định là
9042. - Quyền tạo login role, hoặc một role do người khác tạo sẵn cho bạn.
- Hai hoặc ba địa chỉ node trong cùng một datacenter. Driver tự khám phá phần còn lại của ring từ đó.
Kết nối này chỉ nói CQL.
nodetool chạy qua JMX trên một cổng khác, nên trạng thái repair, hàng đợi compaction và dung lượng đĩa nằm ngoài phạm vi agent đọc được ở đây.Thiết lập
1
Tạo login role
Kết nối bằng một superuser sẵn có và tạo role riêng:Đừng dùng lại superuser
cassandra mặc định.2
Cấp quyền đọc
Đọc
system và system_schema không cần grant nào, nên việc liệt kê keyspace, kiểm tra schema và xem sức khỏe ring hoạt động ngay khi role đăng nhập được. Chỉ thêm quyền đọc row trên đúng những keyspace mà agent cần chạm tới:3
Cấp quyền thay đổi (tùy chọn)
Bỏ qua bước này nếu bạn muốn một kết nối chỉ đọc. Cấp theo từng keyspace khi bạn muốn agent đề xuất thay đổi:
4
Mở truy cập mạng
Cho phép kết nối vào cổng
9042 từ CloudThinker tới các contact point bạn định nhập. Amazon Keyspaces dùng 9142 và bắt buộc TLS.5
Thêm kết nối trong CloudThinker
Vào Connections → Cassandra và nhập:
- Contact points: các hostname hoặc IP cách nhau bằng dấu phẩy, không kèm cổng, ví dụ
10.0.1.10,10.0.1.11 - Native transport port:
9042cho hầu hết cụm,9142cho Amazon Keyspaces - Role name:
cloudthinker - Password: mật khẩu bạn đặt ở trên
- Local datacenter: tùy chọn; đặt giá trị này để giữ các lệnh đọc trong một datacenter trên ring nhiều DC
- Use TLS: giữ ở
Yestrừ khi cụm của bạn đã tắtclient_encryption_options - Verify the TLS certificate: giữ ở
Yes; chỉ tắt khi dùng chứng chỉ tự ký hoặc do CA nội bộ cấp
Chi tiết kết nối
Quyền cần thiết
Tối thiểu
Không cần grant nào. Một role đăng nhập được đã đọcsystem và system_schema, đủ cho việc liệt kê keyspace, replication factor, TTL, compaction, index, hình dạng primary key và trạng thái node mà driver nhìn thấy.
Đọc row
Thay đổi
Năng lực của agent
Sau khi kết nối, Tony có thể:Kiểm tra kết nối
Ví dụ prompt
Thay đổi có phê duyệt
Thay đổi không phải là CQL tùy ý. Kết nối mang một tập thao tác cố định, và mọi thứ nằm ngoài tập đó bị từ chối thay vì được đưa ra phê duyệt.
Bốn điều cần biết trước khi bạn phê duyệt:
- Mọi thay đổi đều báo cáo thứ nó đã đo. Agent hiển thị giá trị nó đọc được trước khi thay đổi, kết quả, và đúng lệnh để đảo ngược. Chạy lệnh đảo ngược đó là một thay đổi thứ hai và cần phê duyệt riêng.
TRUNCATE,DROP TABLE,DROP KEYSPACE,ALTER KEYSPACE,GRANTvàALTER ROLEkhông có mặt. Chúng là từ chối, không phải phê duyệt đang chờ được cấp. Hỏi agent thì nó nêu tên thao tác và nói operator sẽ chạy gì thay thế.- Không thể đặt điều kiện cho thay đổi thiết lập bảng. Cassandra không có
ALTER TABLEcó điều kiện, nên agent đọc giá trị hiện tại, thay đổi nó, rồi đọc lại và báo cáo giá trị của chính nó có còn không. Một writer chen vào khoảng trống đó sẽ ghi đè mà không bị phát hiện, và kết quả in ra nói rõ điều này. - Không có gì được rollback. Cassandra không có transaction. Một lệnh xóa ghi ra tombstone, nên row đọc lại là không tồn tại ngay lập tức còn dung lượng chỉ trả về sau
gc_grace_secondsvà compaction. Một TTL mới áp dụng cho các row ghi sau khi thay đổi, không bao giờ cho các row đã lưu.
Xử lý sự cố
Kết nối hỏng ngay lập tức
Kết nối hỏng ngay lập tức
- Kiểm tra Contact points không kèm cổng và không kèm scheme. Cổng có trường riêng của nó.
- Xác nhận Native transport port là cổng CQL.
7199là JMX và7000là internode; cả hai đều không trả lời ở đây.
Xác thực thất bại
Xác thực thất bại
- Xác nhận role tồn tại và đăng nhập được:
LIST ROLES; - Một role tạo ra mà không có
WITH LOGIN = truethì không xác thực được ở đâu cả. Hãy tạo lại hoặc chạyALTER ROLE cloudthinker WITH LOGIN = true;
Đã kết nối, nhưng một keyspace trông rỗng
Đã kết nối, nhưng một keyspace trông rỗng
Chưa chắc đã là lỗi. Metadata của keyspace và bảng đến từ
system_schema và không cần grant, nên danh sách bảng rỗng nghĩa là keyspace đó không chứa bảng nào. Một lệnh đọc row rỗng nghĩa là role thiếu SELECT trên keyspace đó, hoặc partition thực sự không chứa gì.Bắt tay TLS thất bại
Bắt tay TLS thất bại
- Amazon Keyspaces bắt buộc TLS trên cổng
9142. Hãy đặt cả hai cùng lúc. - Với chứng chỉ tự ký hoặc do CA nội bộ cấp, giữ Use TLS ở
Yesvà đặt Verify the TLS certificate thànhNo. Phiên làm việc vẫn được mã hóa; nó chỉ không còn chứng minh được server nào đã trả lời.
Một thay đổi bị timeout
Một thay đổi bị timeout
Cassandra trả về timeout cả trước lẫn sau khi một lệnh ghi được commit, nên kết quả thực sự không xác định và không có gì được thử lại tự động. Hãy yêu cầu agent đọc lại row hoặc thiết lập đó, rồi quyết định dựa trên những gì lần đọc ấy báo cáo. Đừng bao giờ chạy lại thay đổi để xem nó đã áp dụng chưa.
Index đã được tạo nhưng truy vấn vẫn lỗi
Index đã được tạo nhưng truy vấn vẫn lỗi
Một secondary index mới chỉ trả lời truy vấn sau khi quá trình build hoàn tất trên mọi node. Hãy cho nó thời gian, rồi hỏi lại.
Bảo mật
- Quyền tối thiểu — chỉ cấp các quyền mà agent cần cho trường hợp sử dụng của bạn; bắt đầu với quyền chỉ đọc và mở rộng sau.
- Chỉ đọc theo mặc định — sử dụng thông tin xác thực chỉ đọc trừ khi bạn muốn agent thực hiện thay đổi qua kết nối này.
- Xoay vòng thông tin xác thực — xoay vòng khóa và token theo lịch trình thông thường của bạn; CloudThinker sẽ lấy giá trị mới khi bạn cập nhật kết nối.
- Thu hồi khi bàn giao — xóa thông tin xác thực tại nhà cung cấp khi bạn xóa một kết nối hoặc khi đồng nghiệp rời nhóm.
- TLS mang theo mật khẩu — kết nối này gửi tên role và mật khẩu qua cùng socket với truy vấn. Giữ Use TLS bật cho mọi thứ nằm ngoài mạng riêng.
- Role đặc quyền tối thiểu — một login role không có grant nào đã trả lời được các câu hỏi về liệt kê, schema và sức khỏe. Chỉ thêm
SELECT,MODIFYvàALTERtheo từng keyspace khi bạn thực sự cần, và đừng bao giờ dùng superusercassandramặc định.
Liên quan
Tony Agent
Agent tối ưu cơ sở dữ liệu
Phê duyệt
Cách CloudThinker hỏi trước khi thay đổi