[NoSQL] Cassandra를 운영 및 관리하기 위한 몇가지 팁

사용자 삽입 이미지

카산드라는 생각이상으로 운영에 대한 고민이 많이 필요한 녀석인것 같습니다. 예를 들면 거의 필수에 가까운 라이브러리조차 기본적으로 포함하지 않는걸 보면(오픈소스 세계에서도 견제가 있는걸까요) 그냥 실행했더니 잘 구동되더라..라고 해서 안심할만한것은 아닙니다. 알아두면 좋은 팁 몇가지를 정리해 보겠습니다.

JNA 라이브러리 추가하기

[code]wget http://java.net/projects/jna/sources/svn/content/trunk/jnalib/dist/jna.jar[/code]
위의 명령으로 가장 최신의 JNA를 다운받을 수 있습니다. 위의 라이브러리를 다운받아 카산드라 디렉토리 안의 lib/ 안에 추가해 주시는것만으로 해야할 일은 끝납니다. 위의 라이브러리를 추가하게 되면 카산드라가 메모리 사용을 좀더 효율적으로 할 수 있다고 합니다. 사실상 선택사항이 아니라 필수적으로 추가해 주셔야 하는 라이브러리입니다. 위의 라이브러리를 추가하게 되면 구동시에 메시지가 조금 바뀌게 됩니다.
[code][root@Cassandra-1 bin]# ./cassandra
[root@Cassandra-1 bin]#  INFO 14:22:41,460 Logging initialized
 INFO 14:22:41,491 Heap size: 1035730944/1036779520
 INFO 14:22:43,276 JNA mlockall successful[/code]

메모리 수동 할당하기

conf/cassandra-env.sh 파일은 실행파일스러워 보이지만 역시나 각종 설정을 할수 있는 파일입니다. 파일을 열어보시면 다음과 같은 주석처리된 부분이 있습니다.
[code]#MAX_HEAP_SIZE=”4G”
#HEAP_NEWSIZE=”800M”[/code]
실제로 운영하기 위한 서버에서는 MAX_HEAP_SIZE는 서버 메모리의 50% 혹은 그 이상을 지정해 주시면 됩니다. HEAP_NEWSIZE는 CPU * 100MB로 계산을 하시면 됩니다. 여기서 말하는 CPU는 코어를 말하는것입니다. 쿼드코어 CPU라면 400M로 하시면 됩니다. 예를 들어 쿼드코어 CPU가 두개 꼽혀있고 메모리가 8G일 경우의 설정은 다음과 같이 하시면 무난합니다.
[code]MAX_HEAP_SIZE=”4G”
HEAP_NEWSIZE=”800M”[/code]

서버의 로깅 레벨 변경하기

conf/log4j-server.properties 파일을 열어보시면 일반적으로 흔히 볼법한 log4j설정이 적혀있습니다.
[code]log4j.rootLogger=INFO,stdout,R

# stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d{HH:mm:ss,SSS} %m%n[/code]
log4j.rootLogger 의 INFO를 DEBUG로 바꾸게 되면 모든 디버깅 메시지를 볼 수 있게 됩니다.
cassandra -f 옵션으로 실행할 경우 데몬형태가 아닌 foreground에서 실행할수도 있습니다. 이경우 테스트겸 로그 메시지를 보면서 작업을 해야 할 경우 유용합니다.

모니터링을 위한 MJ4X 설치하기

http://mx4j.sourceforge.net/ 을 방문하여 MJ4X를 다운받습니다. 압축을 풀어보면 여러 파일들이 나오게 되는데 그중에 mx4j-tools.jar 파일만을 카산드라의 lib/ 디렉토리 안에 넣어주시면 됩니다. 이후에 cassandra-env.sh 파일의 다음의 설정의 주석을 해제해 줍니다.

[code]MX4J_ADDRESS=”-Dmx4jaddress=0.0.0.0″
MX4J_PORT=”-Dmx4jport=8081″[/code]
이제 카산드라를 구동하게 되면 다음과 같은 로그를 보실 수 있습니다.
[code]DEBUG [main] 2011-05-24 14:12:43,960 Mx4jTool.java (line 49) Will try to load mx4j now, if it’s in the classpath
 INFO [main] 2011-05-24 14:12:44,061 Mx4jTool.java (line 67) mx4j successfuly loaded[/code]
이젠 http://[카산드라설치주소]:8081 로 접속해 보시면 다음과 같은 페이지를 보실 수 있습니다.
사용자 삽입 이미지http://[카산드라설치주소]:8081/?template=identity 로 접속하게 되면 위의 데이터를 XML로 받아볼수도 있습니다.

좀더 확장된 모니터링을 위한 JMX 설치

JMX를 설치한다는 개념보다는 활성화 한다는 개념이 맞을것 같군요. conf/cassandra-env.sh 파일에서 JMX_PORT를 설정해 줍니다.
[code]JMX_PORT=”8080″[/code]
사실 이것만으로 설정이 끝났습니다. 하지만 위의 설정만으로 원격지에서 JMX연결이 안될경우가 있습니다. 서버에 방화벽이 구동중일 경우 방화벽 설정에 신경을 써주셔야 합니다. 하지만 이경우에도 원격지에서 접속이 안될 경우 다음의 설정을 주석을 풀고 설정을 해주셔야 합니다.
[code]JVM_OPTS=”$JVM_OPTS -Djava.rmi.server.hostname=[서버의 아이피 또는 호스트명]”[/code]

사용자 삽입 이미지JDK에 들어있는 jconsole로 원격지에서 접속해 본 화면입니다. 서버의 현재 상태를 모니터링 할 수 있습니다.

Cassandra GUI 툴

http://code.google.com/p/cassandra-gui/ 매우 조잡한 모습입니다만, 그래도 기능은 강력합니다. 아쉬운데로 사용하기 적절합니다. 빨리 깔끔한 UI의 툴이 등장하길 기대해 봅니다.

사용자 삽입 이미지

참고:
http://ria101.wordpress.com/2011/03/26/10-steps-to-upgrade-a-cassandra-node/
http://wiki.apache.org/cassandra/Operations
http://blog.milford.io/2011/04/apache-cassandra-0-7-centos-quick-install-with-cassandra-stress-mx4j-jna/