이 글을 보기 전에 먼저 봐야할 문서
http://knight76.tistory.com/entry/cassandra-node-repair-%EC%B2%98%EB%A6%AC-%EB%B0%A9%EC%8B%9D
cassandra 노드를 reparing하는 방법 중 가장 오래 걸리지만 서비스에 영향을 주지 않는 방법인 subrange repair 방법을 소개한다.
우선 nodetool을 이용해 토큰 정보를 살펴본다.
$ nodetool ring
Datacenter: datacenter1
==========
Address Rack Status State Load Owns Token
9211576253984633484
1.1.1.1 rack1 Up Normal 3.19 GB 100.00% -9143017454602368711
1.1.1.2 rack1 Up Normal 3.19 GB 100.00% -9137016989552942674
,,
subrange를 사용하려면 계산하고 이런 작업이 귀찮아서 오픈소스를 확인했더니,https://github.com/BrianGallew/cassandra_range_repair.git(https://github.com/BrianGallew/cassandra_range_repair/blob/master/src/range_repair.py)가 괜찮을 것 같다. 특히 dry run모드가 있어서 테스트해볼 수 있는 장점이 있다 (단점으로는 중간에 중지시키는게 번거롭다. for 문에서 continue되어 다음 토큼으로 넘어가기기 때문에 kill로 작업해야 한다)
https://github.com/BrianGallew/cassandra_range_repair/blob/master/src/range_repair.py는 python 2.6이면 six 모듈 때문에 문제가 될 수 있으니. python 2.7.9로 업그레이드해야 한다.
git clone https://github.com/BrianGallew/cassandra_range_repair.git를 해서 ./src/range_repair.py을 실행한다.
이 스크립트로 dry-run 모드로 실행해 본다.
./range_repair.py -k google -v -d -H localhost --dry-run 를 실행한다. 토큰이 제대로 되는지 확인했다.
0001/1/256 nodetool -h localhost -p 7199 repair google -pr -st +09211576253984633484 -et +09212497757635858978
0002/1/256 nodetool -h localhost -p 7199 repair google -pr -st +09212497757635858978 -et +09213419261287084472
..
0100/256/256 nodetool -h localhost -p 7199 repair google -pr -st +09211440617066457144 -et +09211576253984633484
로그 파일은 다음과 같이 추가한다.
--logfile test.log
테이블 단위로 repairing할 수 있다.
./range_repair.py -k story -c 테이블_이름 -d -H localhost
시간이 오래 걸려서 screen 실행하고 백그라운드로 작업 돌리는 것이 좋을 것 같다.
상황에 따라서는 너무 오래 걸리기도 하고, 부하를 줘서 latency가 커질 수 있어서 부하가 적은 시간에 여러 날에 걸쳐 동작시켜야 할 수도 있다.
'cassandra' 카테고리의 다른 글
[cassandra] 클라이언트 라이브러리 하위 호환성 지원 (cassandra java driver compatibility) (0) | 2017.02.23 |
---|---|
cassandra gc 튜닝 - compaction과 full gc (0) | 2017.02.17 |
[cassandra] node repair 처리 방식 (0) | 2017.01.31 |
[cassandra] 백업 - nodetool snapshot (0) | 2017.01.31 |
cassandra table 변경 (0) | 2017.01.26 |