恢复不会一直恢复数据

时间:2016-10-18 20:46:48

标签: cassandra restore

我在容器中安装了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

中有4个键
nodetool flush cathy1

仍然没有cqlsh的数据可见

为什么?

1 个答案:

答案 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