Tag Archives: 메모리

[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/

서버를 업그레이드 하였습니다.

현재 이 블로그가 돌아가고 있는 투명아이 서버를 업그레이드 하였습니다. 무엇을 업그레이드 하였는지 볼까요?

사용자 삽입 이미지서버의 부품 교체를 위해 IDC에서 서버를 가져왔습니다. INTEL SR1400JR2라는 모델의 1U사이즈 랙서버입니다.

사용자 삽입 이미지먼저 기존의 SCSI하드를 SATA로 교체하기 위해 ADAPTEC SATA II RAID 2420SA를 구매하였습니다.

하드디스크 3개를 RAID 5로 묶어 사용할 것입니다.

사용자 삽입 이미지메모리는 기존의 1G에 4G를 더 꼽았습니다. 총 5G입니다.

사용자 삽입 이미지CPU는 INTEL NOCONA 3.0Ghz 두개를 달았습니다. 기존의 2.8 싱글에서 3.0 듀얼은 그다지 큰 업그레이드로 느껴지지 않는군요.

어윈데일 3.6Ghz를 구하기 위해 노력을 하였지만 단종된 물건을 구하기가 어려워 어쩔수 없었던 부분입니다.

사용자 삽입 이미지시게이트 바라쿠다 320G 3개입니다. 7200.11이라고 이번에 말 많던 모델이긴 합니다….만…최신 모델이고..

시리얼 조회해보니 문제없는 제품으로 나오더군요. 만약에 문제가 있어도 RAID빨을 믿고 교환받겠다는 의지를 가지고 써볼렵니다.

사용자 삽입 이미지정말 서버케이스를 재사용하기 위해 동분서주하여 힘들게 구한 SATA용 백플레인입니다. 기존의 SCSI용 백플레인을 띄어내고 교체하였습니다.

정말 이걸 구하는데는 한편의 드라마같은 시나리오가 있었죠. 국내에 인텔을 취급하는 모든 업체에 메일을 보내 국내에 하나밖에 없는 모델을 구했습니다.

사용자 삽입 이미지업그레이드가 완료된 서버의 모습니다. 별로 잘 모르겠지만 부품이 꽤 많이 물갈이 되었죠.

사용자 삽입 이미지멋진 서버의 자태! 앞으로 투명아이를 부탁해!