2017-10-09 4 views
0

data_file_directories 속성의 변경으로 인해 데이터가 누락되었습니다.data_file_directory 변경 후 테이블 병합

이것은 두 가지 오류 문제입니다.

우선, 우리는 분리 된 마운트에 /var/lib/cassandra/data의 데이터를 가지고 있었고 모든 것이 좋았습니다.

카산드라 업그레이드 (2.1에서 3.9까지) 후 구성에서 오류로 인해 data_file_directories[/var/lib/cassandra/data1, /var/lib/cassandra/data2]으로 변경되었습니다.

/var 디렉토리가 가득 찰 때까지는 오류가 눈에 띄지 않는 것 같습니다. 이로 인해 우리는 문제를 발견하게되었고, nodetool removenode 이후에 클러스터가 다시 돌아 왔지만 거의 2 개월 동안 누락 된 데이터가있었습니다.

data1data2data으로 병합 할 수 있는지 알고 싶습니다.

nodetool snapshot을 사용하면 데이터 저장 장치로 data1data2을 사용할 수 없으므로 옵션이 아닙니다.

감사가 무엇이든 당신의 도움에 대한 많은)

답변

1
당신은 당신이 지금과 해당 디렉토리를 사용 중지 설정을 업데이트하고, 기존의 sstables 다른 디렉토리에 있다고 말하고있는 것 같습니다

업데이트 된 설정은 더 이상 거기에 쓰여진 데이터에 대한 액세스 권한이 없으므로 사용하고 싶습니다.

사용할 수있는 스텔스가 있다면 data_files_directories으로 복사하여 nodetool refresh으로 서버에로드 할 수 있습니다.

그러나 위험하지 않으므로 삭제 된 데이터가 복원 될 수 있으며 동일한 세대 (파일 이름에 숫자 ID)의 파일을 덮어 쓰지 않아야합니다.

0

감사합니다. Jeff ... 시도했지만 끝내 실패했습니다. 내가 뭔가를 놓쳤는 지 확실하지 않습니다.

어쨌든 sstableloader을 사용하는 것이 좋습니다.

#!/bin/sh 

DATADIRS=/var/lib/cassandra/data1 
KEYSPACES="keyspace1 keyspace2" 
NODES=192.168.10.21,192.168.10.22 

backup=1 
exec_cmd="" 
test_mode=0 

while [ "$#" != "0" ] ; do 
    case ${1} in 

    -nb|-nobackup|--nb|--no-backup) 
     backup=0 
     ;; 

    -t|-test|--t|--test) 
     exec_cmd=echo 
     test_mode=1 
     ;; 

    -x) 
     set -x 
     ;; 

    *) 
     echo Unknown option ${1}, ignoring it. 
     ;; 

    esac 

    shift 
done 

echo Started at : `date` 

for keyspace in ${KEYSPACES} ; do 

    for datadir in ${DATADIRS} ; do 

     # Create backup dir if needed. 

     if [ "${backup}" = "1" ] ; then 
      ${exec_cmd} mkdir -p ~/cassandra/`basename ${datadir}`/${keyspace} 
     fi 

     # Get the list of tables. 

     kstables=`find ${datadir}/${keyspace} -maxdepth 1 -mindepth 1 -type d` 

     # Now load tabled within active cassandra nodes. 

     for d in ${kstables} ; do 
      echo $d : `date` 
      # Cannot use exec_cmd because of the pipe in the command. 
      if [ "${test_mode}" = "1" ] ; then 
       echo nice -n 10 sstableloader -d ${NODES} $d \> /dev/null 
      else 
       ${exec_cmd} nice -n 10 sstableloader -d ${NODES} $d >/dev/null 
      fi 

      # Backup table dir if needed 

      if [ "${backup}" = "1" ] ; then 
       ${exec_cmd} mv $d ~/cassandra/data1/${keyspace} 
      else 
       ${exec_cmd} rm -rf $d 
      fi 
     done 
    done 
done 

echo Finished at : `date` 

희망이 제대로 작동 주소와 브로드 캐스트 주소를 듣고 sstableloader``를 들면,

+0

가 있다는 점 유의 하시길 바랍니다 도움이 : 그것은 도움이 될 수 Ifever, 그 모든 돌봐하려고 작은 스크립트를 썼습니다 너의 카산드라의. 동일 함이 틀림 없어. –