2. Cấu hình file cassandra-rackdc.properties
Một số tùy chọn snitch sử dụng cấu hình file cassandra-rackdc.properties để xác định các datacenter và các nút cụm thuộc về rack. Thông tin về cấu trúc liên kết mạng cho phép các yêu cầu được định tuyến một cách hiệu quả và phân phối các bản sao đồng đều. Các snitches sau có thể được cấu hình tại đây:
- GossipingPropertyFileSnitch
- AWS EC2 snitch một vùng
- AWS EC2 snitch đa vùng
GossipingPropertyFileSnitch được khuyên dùng để môi trường sản phẩm. Snitch này sử dụng datacenter và thông tin rack được cấu hình trong tệp cassandra-rackdc.properties của nút cục bộ và truyền thông tin đến các nút khác bằng cách sử dụng gossip. Đây là snitch mặc định và các cài đặt trong file cấu hình này được bật.
Các snitches AWS EC2 được cấu hình cho các cụm trong AWS. Snitch này sử dụng các tùy chọn cassandra-rackdc.properties để chỉ định một trong hai quy ước đặt tên datacenter AWS EC2 và rack:
-
Kế thừa: Tên datacenter là một phần của tên vùng khả dụng đứng trước dấu “-“ cuối cùng khi vùng kết thúc bằng -1 và bao gồm số nếu không phải -1. Tên rack là một phần của tên vùng khả dụng theo sau dấu “-“ cuối cùng.
Ví dụ: us-west-1a => dc: us-west, rack: 1a; us-west-2b => dc: us-west-2, rack: 2b;
-
Tiêu chuẩn: Tên datacenter là tên vùng AWS tiêu chuẩn, bao gồm cả số. Tên rack là khu vực cộng với ký tự khu vực khả dụng.
Ví dụ: us-west-1a => dc: us-west-1, rack: us-west-1a; us-west-2b => dc: us-west-2, rack: us-west-2b;
Snitch có thể đặt để sử dụng địa chỉ IP cục bộ hoặc nội bộ khi nhiều datacenter không giao tiếp với nhau.
a. GossipingPropertyFileSnitch
dc
- Tên của datacenter. Giá trị có phân biệt chữ hoa chữ thường.
- Giá trị mặc định: DC1
rack
- Chỉ định rack. Giá trị có phân biệt chữ hoa chữ thường.
- Giá trị mặc định: RAC1
b. Snitch AWS EC2
ec2_naming_scheme
- Quy ước đặt tên datacenter và rack. Tùy chọn là legacy hoặc standard (mặc định). Tùy chọn này được nhận xét theo mặc định.
- Giá trị mặc định: standard
Ghi chú: BẠN PHẢI SỬ DỤNG GIÁ TRỊ legacy NẾU BẠN ĐANG NÂNG CẤP MỘT CỤM TRƯỚC PHIÊN BẢN 4.0.
c. Snitch
prefer_local
- Tùy chọn sử dụng địa chỉ IP cục bộ hoặc nội bộ khi giao tiếp không qua các datacenter khác nhau. Tùy chọn này được nhận xét theo mặc định.
- Giá trị mặc định: true
3. Cấu hình file cassandra-env.sh
Tập tin bash script cassandra-env.sh có thể được sử dụng để vượt qua tùy chọn bổ sung cho máy ảo Java (JVM), chẳng hạn như tối đa và tối thiểu kích thước heap, chứ không phải là thiết lập chúng trong môi trường. Nếu cài đặt JVM là tĩnh và không cần tính toán từ các đặc điểm của nút, thì các tệp tệp jvm-* sẽ được sử dụng thay thế. Ví dụ: các giá trị thường được tính toán là kích thước heap, sử dụng các giá trị hệ thống.
Ví dụ: thêm JVM_OPTS=”$JVM_OPTS -D cassandra.load_ring_state=false” vào tệp cassandra-env.sh và chạy dòng lệnh cassandra để bắt đầu. Tùy chọn được đặt từ tệp cassandra-env.sh và tương đương với việc khởi động Cassandra bằng tùy chọn dòng lệnh cassandra -D cassandra.load_ring_state=false
Tùy chọn -D xác định instance các thông số khởi động trong cả hai dòng lệnh và tập tin cassandra-env.sh. Lựa chọn tiếp theo đã khả thi:
cassandra.auto_bootstrap=false
- Tạo điều kiện thuận lợi cho việc đặt auto_bootstrap thành false khi thiết lập cụm ban đầu. Lần sau khi bạn khởi động cụm, bạn không cần phải thay đổi tệp cassandra.yaml trên mỗi nút để hoàn nguyên về “true”, giá trị mặc định.
cassandra.available_processors=<number_of_processors>
- Khi triển khai nhiều trường hợp, nhiều trường hợp Cassandra sẽ tự giả định rằng tất cả các bộ xử lý CPU đều có sẵn cho nó. Cài đặt này cho phép bạn chỉ định một bộ vi xử lý nhỏ hơn.
cassandra.config=<directory>
- Vị trí thư mục chứa tệp cassandra.yaml. Vị trí mặc định phụ thuộc vào loại cài đặt.
cassandra.ignore_dynamic_snitch_severity=true|false
- Việc đặt thuộc tính này thành true sẽ khiến dynamic snitch bỏ qua chỉ báo mức độ nghiêm trọng từ các gossip khi tính điểm các nút. Xem thêm tính năng phát hiện và khôi phục lỗi cũng như tính năng tìm kiếm động để biết thêm thông tin.
- Mặc định: false
cassandra.initial_token=<token>
- Sử dụng khi các nút ảo (vnodes) không được sử dụng. Đặt mã token phân vùng ban đầu cho một nút lần đầu tiên được khởi động. Lưu ý: Vnodes rất được khuyến khích vì chúng tự động chọn mã token.
- Mặc định: disabled
cassandra.join_ring=true|false
- Đặt thành false để khởi động Cassandra trên một nút nhưng không để nút đó tham gia cụm. Bạn có thể sử dụng nodetool join và gọi JMX để tham gia vòng sau đó.
- Mặc định: true
cassandra.load_ring_state=true|false
- Đặt thành false để xóa tất cả trạng thái gossip cho nút khi khởi động lại.
- Mặc định: true
cassandra.metricsReporterConfigFile=<filename>
- Bật báo cáo chỉ số có thể cắm vào được. Tìm hiểu báo cáo chỉ số có thể cắm thêm để biết thêm thông tin.
cassandra.partitioner=<partitioner>
- Đặt bộ phân vùng.
- Mặc định: org.apache.cassandra.dht.Murmur3Partitioner
cassandra.prepared_statements_cache_size_in_bytes=<cache_size>
- Đặt kích thước bộ nhớ cache cho các câu lệnh đã chuẩn bị.
cassandra.replace_address=<listen_address of dead node<|<broadcast_address of dead node>
- Để thay thế một nút đã chết, hãy khởi động lại một nút mới ở vị trí của nó chỉ định listen_address hoặc broadcast_address mà nút mới đang giả định. Nút mới không được có bất kỳ dữ liệu nào trong thư mục dữ liệu của nó, trạng thái giống như trước khi khởi động. Lưu ý: Giá trị broadcast_address mặc định thành listen_address ngoại trừ khi sử dụng Ec2MultiRegionSnitch.
cassandra.replayList=<table>
- Cho phép khôi phục các bảng cụ thể từ nhật ký cam kết đã lưu trữ.
cassandra.ring_delay_ms=<number_of_ms>
- Xác định khoảng thời gian một nút chờ nghe từ các nút khác trước khi chính thức tham gia vòng.
- Mặc định: 1000ms
cassandra.native_transport_port=<port>
- Đặt cổng mà phương tiện truyền tải gốc CQL (CQL native transport) lắng nghe máy khách.
- Mặc định: 9042
cassandra.rpc_port=<port>
- Đặt cổng cho dịch vụ Thrift RPC, được sử dụng cho các kết nối máy khách.
- Mặc định: 9160
cassandra.storage_port=<port>
- Đặt cổng cho giao tiếp giữa các nút.
- Mặc định: 7000
cassandra.ssl_storage_port=<port>
- Đặt cổng SSL cho giao tiếp được mã hóa.
- Mặc định: 7001
cassandra.start_native_transport=true|false
- Bật hoặc tắt máy chủ truyền tải gốc. Xem start_native_transport trong cassandra.yaml.
- Mặc định: true
cassandra.start_rpc=true|false
- Bật hoặc tắt máy chủ Thrift RPC.
- Mặc định: true
cassandra.triggers_dir=<directory>
- Đặt vị trí mặc định cho các trigger JAR.
- Mặc định: conf/trigger
cassandra.write_survey=true
- Để thử nghiệm các chiến lược nén và nén mới. Nó cho phép bạn thử nghiệm với các chiến lược khác nhau và sự khác biệt về hiệu suất ghi điểm chuẩn mà không ảnh hưởng đến khối lượng công việc sản xuất.
consistent.rangemovement=true|false
- Đặt thành true giúp Cassandra thực hiện bootstrap một cách an toàn mà không vi phạm tính nhất quán. False vô hiệu hóa điều này.
4. Cấu hình file cassandra-topologies.properties
Tùy chọn PropertyFileSnitch snitch sử dụng cấu hình tập tin cassandra-topologies.properties để xác định datacenter và rack thuộc về cụm nút. Nếu sử dụng các snitches khác, thì phải sử dụng: ref:cassandra_rackdc. Snitch xác định cấu trúc liên kết mạng (mức độ gần nhau của rack và datacenter) để các yêu cầu được định tuyến một cách hiệu quả và cho phép cơ sở dữ liệu phân phối các bản sao đồng đều.
Bao gồm mọi nút trong cụm trong tập tin thuộc tính, xác định tên datacenter của bạn như trong định nghĩa keyspace. Tên d785a534 và rack phân biệt chữ hoa chữ thường.
Tập tin cassandra-topologies.properties phải được sao chép y hệt trên mỗi nút trong cluster.
Ví dụ Ví dụ này sử dụng ba trung tâm dữ liệu:
# datacenter 1
175.56.12.105=DC1:RAC1
175.50.13.200=DC1:RAC1
175.54.35.197=DC1:RAC1
120.53.24.101=DC1:RAC2
120.55.16.200=DC1:RAC2
120.57.102.103=DC1:RAC2
# datacenter 2
110.56.12.120=DC2:RAC1
110.50.13.201=DC2:RAC1
110.54.35.184=DC2:RAC1
50.33.23.120=DC2:RAC2
50.45.14.220=DC2:RAC2
50.17.10.203=DC2:RAC2
# datacenter 3
172.106.12.120=DC3:RAC1
172.106.12.121=DC3:RAC1
172.106.12.122=DC3:RAC1
# mặc định cho nút chưa biết
default =DC3:RAC1
5. Cấu hình file commitlog-archiving.properties-file
Tệp cấu hình commitlog-archiving.properties có thể tùy chọn đặt các lệnh được thực thi khi lưu trữ hoặc khôi phục một đoạn commitlog.
**Tùy chọn ** archive_command==<command>
- Một lệnh có thể được chèn với các đối số %path và %name. %path là đường dẫn đủ điều kiện của phân đoạn commitlog để lưu trữ. %name là tên tệp của commitlog. Không thể thực hiện STDOUT, STDIN hoặc nhiều lệnh. Nếu cần nhiều lệnh, hãy thêm con trỏ vào một tập lệnh trong tùy chọn này.
- Ví dụ: archive_command=/bin/ln %path /backup/%name
- Giá trị mặc định: trống
restore_command==<command>
- Một lệnh có thể được chèn với các đối số %from và %to. %from là đường dẫn đủ điều kiện đến một phân đoạn commitlog đã lưu trữ bằng cách sử dụng các thư mục khôi phục được chỉ định. %to xác định thư mục cho vị trí commitlog trực tiếp.
- Ví dụ: restore_command=/bin/cp -f %from %to
- Giá trị mặc định: trống
restore_directories==<directory>
- Xác định thư mục để quét các tệp khôi phục vào.
- Giá trị mặc định: trống
restore_point_in_time==<timestamp>
- Khôi phục đột biến được tạo lên đến và bao gồm dấu thời gian này theo GMT ở định dạng yyyy:MM:dd HH:mm:ss. Quá trình khôi phục sẽ tiếp tục qua phân đoạn khi gặp phải dấu thời gian đầu tiên do máy khách cung cấp lớn hơn thời gian này, nhưng chỉ những đột biến nhỏ hơn hoặc bằng dấu thời gian này mới được áp dụng.
- Ví dụ: 2020:04:31 20:43:12
- Giá trị mặc định: trống
precision==<timestamp_precision>
- Độ chính xác của thời gian được sử dụng trong các phần thêm dữ liệu. Thường lựa chọn là MILLISECONDS hoặc MICROSECONDS.
- Giá trị mặc định: MICROSECONDS
6. Cấu hình file logback.xml
Tệp cấu hình logback.xml có thể tùy chọn đặt cấp độ ghi nhật ký cho các nhật ký được ghi vào system.log và debug.log. Các cấp độ ghi nhật ký cũng có thể được thiết lập bằng cách sử dụng nodetool setlogginglevels
Tùy chọn appender name=”<appender_choice>“…</appender>
- Chỉ định loại nhật ký và cài đặt. Tên appender có thể là: SYSTEMLOG, DEBUGLOG, ASYNCDEBUGLOG, và STDOUT. SYSTEMLOG đảm bảo rằng thông báo WARN và ERROR được ghi đồng bộ vào tệp được chỉ định. DEBUGLOG và ASYNCDEBUGLOG đảm bảo rằng các thông báo DEBUG được ghi đồng bộ hoặc không đồng bộ tương ứng vào tệp được chỉ định. STDOUT ghi tất cả bản tin vào bảng điều khiển ở định dạng mà con người có thể đọc được.
- Ví dụ:
<file> <filename> </file>
- Chỉ định tên tệp cho nhật ký.
- Ví dụ:
${cassandra.logdir}/system.log
<level> <log_level> </level>
- Chỉ định mức độ cho một nhật ký. Một phần của bộ lọc. Các mức là: ALL, TRACE, DEBUG, INFO, WARN, ERROR, OFF. TRACE tạo ra nhật ký dài nhất, ERROR ít nhất.
- Lưu ý: Việc tăng mức độ ghi nhật ký có thể tạo ra sản lượng ghi nhật ký lớn trên một cụm được quản lý vừa phải. Bạn có thể sử dụng lệnh nodetool getlogginglevels để xem cấu hình ghi nhật ký hiện tại.
- Mặc định: INFO
- Ví dụ:
INFO
<rollingPolicy class=”<rolling_policy_choice>” <fileNamePattern><pattern_info></fileNamePattern> … </rollingPolicy>
- Chỉ định chính sách để chuyển nhật ký vào lưu trữ.
- Ví dụ:
<fileNamePattern> <pattern_info> </fileNamePattern>
- Chỉ định thông tin mẫu để cuộn qua nhật ký để lưu trữ. Một phần của chính sách cuốn chiếu.
- Ví dụ:
${cassandra.logdir}/system.log.%d{yyyy-MM-dd}.%i.zip
<maxFileSize> <size> </maxFileSize>
- Chỉ định kích thước tệp tối đa để kích hoạt cuộn nhật ký. Một phần của chính sách cuốn chiếu.
- Ví dụ:
50MB
<maxHistory> <number_of_days> </maxHistory>
- Chỉ định lịch sử tối đa tính theo ngày để kích hoạt ghi nhật ký. Một phần của chính sách cuốn chiếu.
- Ví dụ:
7
<encoder> <pattern>…</pattern> </encoder>
- Chỉ định định dạng của bản tin. Một phần của chính sách cuốn chiếu.
- Ví dụ:
%-5level [%thread] %date{ISO8601} %F:%L - %msg%n
Nội dung mặc định của logback.xml
<configuration scan="true" scanPeriod="60 seconds">
<jmxConfigurator />
<!-- No shutdown hook; we run it ourselves in StorageService after shutdown -->
<!-- SYSTEMLOG rolling file appender to system.log (INFO level) -->
<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>${cassandra.logdir}/system.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${cassandra.logdir}/system.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!-- each file should be at most 50MB, keep 7 days worth of history, but at most 5GB -->
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- DEBUGLOG rolling file appender to debug.log (all levels) -->
<appender name="DEBUGLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${cassandra.logdir}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${cassandra.logdir}/debug.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!-- each file should be at most 50MB, keep 7 days worth of history, but at most 5GB -->
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- ASYNCLOG assynchronous appender to debug.log (all levels) -->
<appender name="ASYNCDEBUGLOG" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>1024</queueSize>
<discardingThreshold>0</discardingThreshold>
<includeCallerData>true</includeCallerData>
<appender-ref ref="DEBUGLOG" />
</appender>
<!-- STDOUT console appender to stdout (INFO level) -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- Uncomment bellow and corresponding appender-ref to activate logback metrics
<appender name="LogbackMetrics" class="com.codahale.metrics.logback.InstrumentedAppender" />
-->
<root level="INFO">
<appender-ref ref="SYSTEMLOG" />
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNCDEBUGLOG" /> <!-- Comment this line to disable debug.log -->
<!--
<appender-ref ref="LogbackMetrics" />
-->
</root>
<logger name="org.apache.cassandra" level="DEBUG"/>
<logger name="com.thinkaurelius.thrift" level="ERROR"/>
</configuration>
7. Cấu hình file jvm-*
Một số tệp cho cấu hình JVM được bao gồm trong Cassandra. Tập tin jvm-server.options, và các tập tin tương ứng jvm8-server.options và jvm11-server.options là những tập tin chính cho các thiết lập có ảnh hưởng đến hoạt động của Cassandra JVM trên các cụm nút. Tệp bao gồm các thông số khởi động, cài đặt JVM chung như thu gom rác và cài đặt heap. Các tệp jvm-clients.options và vm8-clients.options, jvm11-clients.options tương ứng có thể được sử dụng để định cấu hình cài đặt JVM cho các ứng dụng máy khách như các công cụ nodetool và sstable.
Xem từng tệp để biết ví dụ về cài đặt.
Ghi chú Các tệp jvm-* thay thế tệp cassandra-env.sh được sử dụng trong các phiên bản Cassandra trước Cassandra 3.0. Các tập tin bash script cassandra-env.sh vẫn còn hữu ích nếu cài đặt JVM phải được tính toán động dựa trên các thiết lập hệ thống. Các tệp jvm-* chỉ lưu trữ các cài đặt JVM tĩnh.