我在容器中安装了cassandra 3.7并由kubernetes管理 我创建了一个复制因子为3的密钥空间cathy1
在node1上的cassandra容器中,我创建了一个密钥空间 cathy1 ,如下所示:
CREATE KEYSPACE cathy1 WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
CREATE TABLE cathy1.employees(emp_id int PRIMARY KEY,emp_name text);
INSERT INTO cathy1.employees(emp_id,emp_name) VALUES (1,'cathy');
INSERT INTO cathy1.employees(emp_id,emp_name) VALUES (2,'jon');
因此每个节点拥有100%的数据
我在每个节点上运行cqlsh -f list_tables
:
emp_id | emp_name
--------+----------
1 | cathy
2 | jon
(2 rows)
我在节点2上运行:
nodetool snapshot -t mycathy1-node2 cathy1
我在mycathy1-node2
下看到一个包含此目录的目录cassandra/data/cathy1/employees* /snapshots
:
-rw-r--r-- 1 root root 32 Oct 18 20:27 manifest.json
-rw-r--r-- 2 root root 43 Oct 18 20:22 mb-12-big-CompressionInfo.db
-rw-r--r-- 2 root root 96 Oct 18 20:22 mb-12-big-Data.db
-rw-r--r-- 2 root root 9 Oct 18 20:22 mb-12-big-Digest.crc32
-rw-r--r-- 2 root root 16 Oct 18 20:22 mb-12-big-Filter.db
-rw-r--r-- 2 root root 32 Oct 18 20:22 mb-12-big-Index.db
-rw-r--r-- 2 root root 4610 Oct 18 20:23 mb-12-big-Statistics.db
-rw-r--r-- 2 root root 56 Oct 18 20:22 mb-12-big-Summary.db
-rw-r--r-- 2 root root 92 Oct 18 20:22 mb-12-big-TOC.txt
然后我截断了表格
cqlsh -e "truncate cathy1.employees"
此时,任何节点上的cassandra/data/cathy1/employees*
下都没有文件
只有快照目录仍然是
我在每个节点上运行cqlsh -f list_tables
:
emp_id | emp_name
--------+----------
(0 rows)
我在节点2上运行修复:
nodetool repair cathy1
成功完成了 然后仍然在节点2上
cd cassandra/data/employees*
cp ./snapshots/mycathy1-node2/* .
-rw-r--r-- 1 root root 32 Oct 18 20:34 manifest.json
-rw-r--r-- 1 root root 43 Oct 18 20:34 mb-12-big-CompressionInfo.db
-rw-r--r-- 1 root root 96 Oct 18 20:34 mb-12-big-Data.db
-rw-r--r-- 1 root root 9 Oct 18 20:34 mb-12-big-Digest.crc32
-rw-r--r-- 1 root root 16 Oct 18 20:34 mb-12-big-Filter.db
-rw-r--r-- 1 root root 32 Oct 18 20:34 mb-12-big-Index.db
-rw-r--r-- 1 root root 4610 Oct 18 20:34 mb-12-big-Statistics.db
-rw-r--r-- 1 root root 56 Oct 18 20:34 mb-12-big-Summary.db
-rw-r--r-- 1 root root 92 Oct 18 20:34 mb-12-big-TOC.txt
drwxr-xr-x 16 root root 4096 Oct 18 20:29 snapshots
然后我运行nodetool refresh employees
我在每个节点上运行cqlsh -f list_tables
:
emp_id | emp_name
--------+----------
(0 rows)
我跑nodetool repair cathy1
并且仍然没有数据可见!!!!!
Pending Flushes: 0 <br>
Table: employees <br>
Space used (live): 4954 <br>
Space used (total): 4954 <br>
Space used by snapshots (total): 59873 <br>
Off heap memory used (total): 32 <br>
SSTable Compression Ratio: 0.75 <br>
**Number of keys (estimate): 4** <br>
即使统计数据显示表cathy1.employees
nodetool flush cathy1
仍然没有cqlsh的数据可见
为什么?
答案 0 :(得分:0)
您需要在已复制快照文件的目录中运行 sstableloader 。
sstableloader -d <node_ip> -u cassandra -pw cassandra <directory_location>
注意:如果您当前的目录是您复制快照文件的目录,那么您不需要在 directory_location 字段中放置任何内容。
有关sstableloader的更多详情:https://docs.datastax.com/en/cassandra/2.0/cassandra/tools/toolsBulkloader_t.html