我们将 Cassandra 作为 SingleNode 容器与其他微服务一起运行。数据将流入其中一个微服务,该微服务将使用 gocql 驱动程序将数据连续写入 cassandra。
cassandra 的 docker-compose 文件
ia_cassandradb:
image: cassandra:4.1.6
container_name: ia_cassandradb
hostname: ia_cassandradb
restart: unless-stopped
ipc: "none"
read_only: true
security_opt:
- no-new-privileges
command: |
/bin/bash -c "
cp -r /etc/cassandra/* /etc/cassandra_tmp/.
cp /etc/cassandra/cassandra_bk.yaml /etc/cassandra_tmp/cassandra.yaml
if [[ $DEV_MODE == true ]]
then
sed -i '/client_encryption_options:/{n;s/.*/ enabled: false/}' /etc/cassandra_tmp/cassandra.yaml
else
cd /run/secrets/Cassandra
rm -rf /etc/cassandra_tmp/dse-truststore.jks /etc/cassandra_tmp/secrets.p12 /etc/cassandra_tmp/certkey-keystore.jks
keytool -keystore /etc/cassandra_tmp/dse-truststore.jks -storetype PKCS12 -importcert -file 'cacert.pem' -alias cacert -storepass cassandra -noprompt
openssl pkcs12 -export -in DataStore_Server_server_certificate.pem -inkey DataStore_Server_server_key.pem -name localhost -out /etc/cassandra_tmp/secrets.p12 -password pass:cassandra
keytool -importkeystore -deststorepass cassandra -destkeystore /etc/cassandra_tmp/certkey-keystore.jks -srckeystore /etc/cassandra_tmp/secrets.p12 -srcstoretype PKCS12 -srcstorepass cassandra
fi
while true; do nodetool clearsnapshot --all; nodetool compact; nodetool cleanup; sleep 600; done &
/usr/local/bin/docker-entrypoint.sh
"
networks:
- net_iso
environment:
AppName: "DataStore"
CASSANDRA_CONF: /etc/cassandra_tmp
DEV_MODE: ${DEV_MODE}
volumes:
# Mount for influxdb data directory and configuration
- ./Certificates/Server_Certs/:/run/secrets/Cassandra:rw
- vol_cassandra_tmp:/tmp
- vol_cassandra_log:/opt/cassandra/logs
- vol_cassandra_etc:/etc/cassandra_tmp
- ${EII_INSTALL_PATH}/data/cassandra:/var/lib/cassandra/data
- ../config_files/cassandra/cassandra.yaml:/etc/cassandra/cassandra_bk.yaml:ro
系统配置
13th Gen Intel(R) Core(TM) i9-13900K
RAM 32GB
Storage: 1TB SSD NVMe
其他系统也有同样的问题。尝试过第 12 代 64GB 内存
数据将连续传输到数据存储微服务,该微服务写入 cassandra 容器。我们有 120~150 次写入/秒,其中包含 json 和 blob 数据,每次写入接近 1mb。此外还会发生后续读取。
预期行为: 我们应该让所有写入始终成功。
实际行为: 最初写入速度非常快。执行几个小时后,写入速度开始减慢。 发布那个。写入开始失败,cassandra 无响应(也无法使用 cqlsh 连接)。 (这发生在24小时内)
显式重新启动容器将恢复 cassandra。
您的帖子中确实没有足够的细节来帮助您,但我最好的猜测是节点过载并最终停止响应。
您似乎没有为 Cassandra 配置堆,因此其最大上限为 8GB。对于默认 GC G1 GC 来说,这个堆太小了。
G1 GC 在大堆上表现最佳,因此请考虑将
MAX_HEAP_SIZE
增至 16-24GB。
此外,不要对单节点集群抱有太大期望。如果节点实际上过载(您需要自己进行分析,因为您没有提供相关详细信息),建议的最小节点数是 3 个。干杯!