이 글을 보기 전에 먼저 봐야할 문서


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가 커질 수 있어서 부하가 적은 시간에 여러 날에 걸쳐 동작시켜야 할 수도 있다. 



Posted by '김용환'
,