DBeaver Cassandra 驱动程序仅在专业版中可用。如果我使用社区版,如何连接到 Cassandra 集群?
我正在尝试将我的 3 节点 Cassandra 集群从版本 3.11.13 升级到 4.1.5。
启动升级节点后出现此错误:
ERROR [main] 2024-06-20 08:48:23,708 CassandraDaemon.java:915 - Exception encountered during startup
java.lang.AssertionError: null
at org.apache.cassandra.schema.TableMetadata$CompactTableMetadata.getCompactValueColumn(TableMetadata.java:1515)
at org.apache.cassandra.schema.TableMetadata$CompactTableMetadata.<init>(TableMetadata.java:1350)
at org.apache.cassandra.schema.TableMetadata$Builder.build(TableMetadata.java:747)
at org.apache.cassandra.schema.SchemaKeyspace.fetchTable(SchemaKeyspace.java:943)
at org.apache.cassandra.schema.SchemaKeyspace.fetchTables(SchemaKeyspace.java:898)
at org.apache.cassandra.schema.SchemaKeyspace.fetchKeyspace(SchemaKeyspace.java:857)
at org.apache.cassandra.schema.SchemaKeyspace.fetchKeyspacesWithout(SchemaKeyspace.java:848)
at org.apache.cassandra.schema.SchemaKeyspace.fetchNonSystemKeyspaces(SchemaKeyspace.java:836)
at org.apache.cassandra.schema.Schema.loadFromDisk(Schema.java:132)
at org.apache.cassandra.schema.Schema.loadFromDisk(Schema.java:121)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:285)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:759)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893)
我发现这个问题将 Cassandra 3.11.8 升级到 4.1.0 在启动时加载模式时返回“AssertionError:null”,建议删除 COMPACT STORAGE。
系统键空间中只有一个 COMPACT STORAGE:
DESCRIBE TABLE system.hints
CREATE TABLE system.hints (
target_id uuid,
hint_id timeuuid,
message_version int,
mutation blob,
PRIMARY KEY (target_id, hint_id, message_version)
) WITH COMPACT STORAGE
AND CLUSTERING ORDER BY (hint_id ASC, message_version ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = '*DEPRECATED* hints awaiting delivery'
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'enabled': 'false', '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.0
AND default_time_to_live = 0
AND gc_grace_seconds = 0
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 3600000
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
不幸的是我不能放弃它:
cqlsh> ALTER TABLE system.hints DROP COMPACT STORAGE;
Unauthorized: Error from server: code=2100 [Unauthorized] message="system keyspace is not user-modifiable."
我甚至无法将节点降级回 3.11.13:
ERROR [main] 2024-06-20 08:38:07,157 CassandraDaemon.java:803 - Detected unreadable sstables /var/lib/cassandra/data/system/local/nb-244-big-Statistics.db,/var/lib/cassandra/data/system/local/nb-244-big-Data.db,/var/lib/cassandra/data/system/local/nb-244-big-Summary.db,/var/
lib/cassandra/data/system/local/nb-244-big-CompressionInfo.db,/var/lib/cassandra/data/system/local/nb-244-big-Index.db,/var/lib/cassandra/data/system/local/nb-244-big-Filter.db, please check NEWS.txt and ensure that you have upgraded through all required intermediate version
s, running upgradesstables
在我的其他 cassandra 集群中,升级顺利,但表 system.hints 不存在。
有人知道如何摆脱这种情况吗?
我们有 9 台物理服务器,每台服务器有 4 个物理磁盘,这意味着我们总共有 36 个物理磁盘,每个磁盘与一个 Cassandra 节点相关。
我们希望在整个集群中拥有 3 个副本,这样即使我们丢失一台服务器(4 个物理磁盘)也不会丢失数据。
我们考虑制作三个不同的机架,每个机架有 3 台物理服务器。我的理解是,如果我有一个 RF=3 的键空间,那么一组数据应该在集群中复制 3 次。
我的问题是,数据会在每个机架内复制 3 次吗,还是会在每个机架上复制一次(共有 3 个机架)?我应该怎么做/如何配置我的集群和我的密钥空间,以便让数据在我们三个机架中的每一个机架上都精确复制一次?
虽然不久前已经发布了针对 Cassandra 3.11.x 的修复版本 3.11.17,但官方 Debian 存储库中的 Debian 软件包的最新版本(https://apache.jfrog.io/artifactory/cassandra-deb/dists/311x/main/binary-amd64/Packages)仍然是 3.11.16。
Package: cassandra
Version: 3.11.16
这有什么特别的原因吗?
谢谢。
我一次又一次地遇到这个问题,在编辑一些 cassandra 配置文件时,cassandra 服务不再启动。
我如何理解为什么service cassandra start
不启动 Cassandra?如果我运行/etc/init.d/cassandra
它就会开始正常。
journalctl -u cassandra.service
根本没有日志。
/var/log/cassandra/system.log
, /var/log/cassandra/debug.log
,/var/log/syslog
也没有日志。
当我执行时service cassandra status
状态为“活动(已退出)”
apt-get
我通过debian安装了最新的 cassandra 版本。
当新的 Cassandra 节点引导并从启用了更改数据捕获 (CDC) 的现有表接收数据时,旧的插入是否会被视为新的 CDC 事件?我在 Debezium Kafka 连接器的文档中没有看到任何对此行为的引用,也没有看到任何描述引导阶段期间 Cassandra 的提交日志文件与其 cdc_raw 目录之间的连接的内容。我预计,但如果不深入 Cassandra 内部结构,就无法确认流数据不会最终出现在 cdc_raw/ 中。
我在一个简单的 scylla 集群上有大约 60GB 的数据,我想将它们迁移到 Cassandra 4.1.5。我已经用命令在 scylla 上拍摄了快照
nodetool snapshot -t scylla-20240524 --table <table> <keystore>
我现在尝试将其导入 Cassandra 运行
bin/sstableloader -d localhost -k <keystore> /mnt/scylla-20240524
但我得到以下输出:
Established connection to initial hosts
Opening sstables and calculating sections to stream
Skipping file me-4332-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4333-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4334-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4335-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4400-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4401-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4402-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4403-big-Data.db: table <keystore>.scylla doesn't exist
Summary statistics:
Connections per host : 1
Total files transferred : 0
Total bytes transferred : 0.000KiB
Total duration : 3954 ms
Average transfer rate : 0.000KiB/s
Peak transfer rate : 0.000KiB/s
我在 scylla 模式中找不到“scylla”作为表...我应该做些什么来准备 cassandra 模式?或者还有什么?
我想了解max的建议。人们反复建议每个节点 1TB 负载,尤其是 Datastax。
除了更快的节点更换或备份等相当主观的评论之外,我还没有在任何地方看到这样的限制如何转化为任何指标。这些类型的注释非常模糊(对您来说快速的可能不适用于不同的生产环境)或者甚至可能是无关紧要的。 (看这个)
此外,目前 1TB 的限制似乎太低了,因为您只需 130 美元就可以买到 8TB 的SATA 磁盘。
- 1TB 限制是否符合 Cassandra 设计中的实际固有限制?
- 该限制是否已被量化,例如通过显示(例如图表)某些指标如何明显恶化超过该限制?
- 此限制是否比“<50% 容量”更相关?假设负载为3TB,但容量为50%,是否还需要增加节点数量?
这一限制使得固定容量阈值可能总是比固定负载阈值更容易、更便宜。这对我来说是不合理的,而且,如果确实如此,我会严重质疑 Cassandra 对于中小型企业的充分性。
我试图理解这一点。
cassandra 批处理始终是原子的,如果批处理仅修改单个表的单个分区,则该批处理也是隔离的。
但是对于由同一个键分区的多表批次呢?假设这个表:
orders (
order_id pk,
created_at,
user_id
)
order_items (
order_id,
product_id,
quantity,
primary key (order_id, product_id)
)
两个表都由相同的键分区。如果我想自动创建订单,假设 order_id = 123,如下所示:
begin batch
insert into orders ... (123)
insert into order_items .... where order_id = 123
insert into order_items .... where order_id = 123
apply batch
这个批次是原子的并且是隔离的吗?前提是 123 的orders 表分区和123 的order_items 表分区位于同一节点。