Search Results for 'DBMS/NoSQL'

8 POSTS

  1. 2012.08.31 MongoDB 오픈세미나 후기
  2. 2012.04.12 Cassandra 시작시 MalformedURLException 발생
  3. 2012.02.28 Jedis를 이용한 Redis 따라가기

MongoDB 오픈세미나 후기

Posted 2012. 8. 31. 01:00

MongoDB 국내 사용자 모임 카페(네이버)에서 주관하는 오픈세미나 참석

첫 참석이라 낯설고 지식도 없어 걱정했지만 나름 유용했음.

 

아래의 내용은 기억속에 있는 것을 까먹기 위해서 작성한 것임. 기술적인 명확한 검토는 천천히 하고자 한다.

 

오늘의 주제는 크게 FluentD 와 Redis 를 이용한 MongoDB 구성.

 

1. FluentD (www.fluentd.org)

 - 각종 파일로 쌓이게 되는 로그(아파치로그, 시스템 로그등등)를 정기적으로 access 하여 MongoDB에 넣어주는 솔루션

 ( MySQL 에도 insert할수 있도록 변형이 가능하다고 함.)

 - Ruby로 작성된 초경량 프로그램이면서 막강한 기능을 제공

 - 파일로그가 아닌 트래픽을 중간에 가로채서 MongoDB에 insert 동 가능

 - 적절히 이용할 경우 MongoDB 앞단에서 buffer의 형태로 작동하여 mongodb 부하를 줄일수 있음.

 -  Fail over 나 Load Balance 에 대한 기능은 없음. 이러한 기능을 이용하려면 Hadoop에서 이용하고 있는 Flume을 MongoDB에 맞게 변형해서 사용해야 함. (소스가 공개되어 있는 상태라서 변형에 대한 난이도는 어렵지 않다고 함.)

 - 또한 직접구현을 한다면 ascii 형태의 파일뿐 아니라 binary형태의 파일도 가능함.

 - 국내는 사용빈도가 거의 없으나 해외에서는 나름 많이 사용됨.

 

2. Redis (Membase 기반의 메모리 DB)

 - MongoDB를 서브가 아닌 메인으로 사용한다면 동적증가에 따른 성능저하를 유발한다. 그 첫번째 이유로 Locking 이다.
 - MongoDB의 고질적인 문제인 Lock(Global Lock > Db Lock > collection Lock?) 에 대한 해결책(?)으로 사용하기 위한 구성방안.

 - Redis를 읽기 전용, MongoDB는 insert, select 로 사용.

 - MongoDB로부터 주기적으로 데이터를 받아서 Redis에  insert하는 agent를 만들어야 한다.

 - Cache server형태로 사용 Memcache가 전형적인 cache server 형태로 사용되기 때문에 데이터 전체가 휘발성이 되어 전원차단시 데이터가 전부 날라가는 문제가 있으나 Redis는 DB형태를 띄기 때문에 비휘발성데이터 형태로 백업이 가능. 때문에 전원차단시에도 데이터가 날라가지 않음.

 

의문 :

NoSQL은 고성능 서버 스펙을 요구한다?

MongoDB에 사용되는 서버는 얼마만큼의 고사양으로 구현해야 하는가?

분산환경에서 Bigdata를 커버하기 위해 탄생된 것이 NoSQL인데,

고가의 고성능 서버를 요구한다는것이 쉽게 납득이 가지 않는다.

기본적으로 메모리 기반의 데이터베이스이기 때문에 메모리의 양은 충분히(적어도 16GB이상) 잡아주는 것은 인정한다.

더군다나 예전과 달리 서버에 사용되는 ECC메모리도 PC메모리 수준으로 가격이 떨어졌기 때문에 서버를 구성하는데 메모리는 더이상 부담되는 요소가 아니라고 본다.

어찌되었든 NoSQL이 수직적 확장이 아닌 수평적 확장을 표방하는 만큼 성능이 낮는 서버를 트래픽이 증가함에 따라 계속 추가하면서 BigData를 감당해야 함이 맞지 않나 생각해 본다.

물론 그 적정선의 사양이라 함이 어느정도인지는 테스트(?)가 필요할 것이다.

 

예전 카산드라의 경우 하루 1GB정도(로그성 데이터가 주를 이룸. 정확한 수치는 확인해봐야 함)의 데이터가 쌓이는 환경에서 7대정도로 커버가 가능했었다.

그때의 서버 스펙은 다음과 같다.

Dell R410 (Quad Core 2.6?) 16GB RAM, 1TB SATA HDD(No RAID 구성)

'DBMS > NoSQL' 카테고리의 다른 글

Cassandra 시작시 MalformedURLException 발생  (0) 2012.04.12
Jedis를 이용한 Redis 따라가기  (0) 2012.02.28
MongoDB Naming Rule  (0) 2011.11.30
MongoDB GUI Tool for Mac osx : MongoHub  (0) 2011.11.23
MongoDB 컴포넌트 목록  (0) 2011.10.03


여러대의 카산드라 서버중 한놈이 비정상 작동을 한다. 이유없이 트래픽이 폭주하고 덩달아 Load Average도 폭주한다.

compaction 이나 cleanup을 해봐도 제대로 말을 듣지 않는다. 하여 대기중이던 다른서버로 교체를 시작.

일을 크게 만들지 않으려고 구성된 node를 최대한 유지하는 방향으로 변경.

원격에서 작업하려니 조금은 조심스러운 상황.

 

작업순서 (Old Server )

 1. nodetool -h localhost disablethrift

 2. nodetool -h localhost disablegossip

 3. nodetool -h localhost flush

 4. killall java

 5. ip & hostname 변경

 

 작업순서 (New Server)

 1. cassandra 설정 변경(cassandra-env.sh, cassandra.yaml)

 2. ip & hostname 변경

 3. bin/cassandra 를 이용하여 시작

 

이전부터 몇번 해왔던 작업이라 아무의심없이 실행을 했다. 그런데 예상치 못한 에러 발생.

 

java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException

 

이럴때 당황치 말고 일단은 검색...

 

원인은 hostname변경이 제대로 되지 않았다는 것.

 

/etc/hosts 파일에 있는 hostname도 다시한번 확인하도록 하자.

'DBMS > NoSQL' 카테고리의 다른 글

MongoDB 오픈세미나 후기  (0) 2012.08.31
Jedis를 이용한 Redis 따라가기  (0) 2012.02.28
MongoDB Naming Rule  (0) 2011.11.30
MongoDB GUI Tool for Mac osx : MongoHub  (0) 2011.11.23
MongoDB 컴포넌트 목록  (0) 2011.10.03


Jedis를 이용한 Redis 따라가기

Posted 2012. 2. 28. 01:01
Redis란?
Redis is an open source, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.

처음 Redis를 접한건 cache system에 대한 고려로 memchached를 관심두고 있을때였다. 그리고는 다시 개발에 쫓겨서 뒷전...
그러다가 지난 12회 JCO 컨퍼런스에 memchached vs Redis를 비교하는 세션을 듣고 다시 관심목록에 추가.

앞으로 시스템에 도입하는 그날까지 틈틈히 테스트해 보며 연구(?)를 해보자.

오늘은 첫번째로 Redis 관련 글을 찾아보았다.
Google과 Naver를 검색해 본 결과물은....

1. 조급하지말고 천천히 : http://dol9.tistory.com/150
2. Redis로 빠르고 가벼운 웹어플리케이션 만들기(KTH 개발자 블로그) : 링크
3. Saltfactory : NoSQL redis - Commands - key 편 : 링크
4. slideshare.net 에 올라온 중국 개발자 슬라이드 : 링크
5. 그리고 Redis 홈페이지 : redis.io 

1. 설치 (CentOS 6.2에 설치함)
홈페이지에서 최신 redis (현재 2.4.8버전) 를 다운로드 한다. 다운로드 링크
# wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz
# tar xzf redis-2.4.8.tar.gz
# cd redis-2.4.8
# make

위의 설치과정은 redis 다운로드 페이지에 나온 그대로다.
하지만 모든 패키지가 다 설치되어 있지 않은 관계로 make가 이루어 지지 않음.
c로 개발되어진 redis를 install하려면 gcc 와 같은 컴파일러가 설치되어 있어야 함.
# yum install -y gcc

그리고 make를 하면 정상적으로 설치 완료.

아무생각없이 /root/ 밑에 설치한 관계로 실행위치는
/root/redis-2.4.8/src/redis-server
카산드라와 같이 fore-ground back-ground 에서 실행하는 옵션이 안보인다.
홈페이지 나와있는데로 따라하며 테스트... 요기서는 위의 검색글중 3번 Saltfactory 블로그 글을 참고함.

재미없는 command 명령어를 하다가 Redis Clients를 찾았다. 난 자바로 밥먹고 사니까 자바클라이언트를 설치해서 빨리 개발에 적용하고자 하는 마음뿐임.
각 언어별로 다양한 client가 개발되어 있다.
Jedis Repository xetorthio
JRedis RepositoryHomepage SunOf27
JDBC-Redis RepositoryHomepage mavcunha
RJC Repository e_mzungu 
위의 제품중 당연히 별표가 붙어있는 Jedis를 선택함.
 Repository 로 이동하여 소스  다운로드하면 된다.
난 아직까지도 svn만 사용하는데, 요즘 대세가 되어 가고 있는 github로 소스를 배포한다. github 설치하기 귀찮으므로 zip 파일을 다운로드 함.
다운로드 파일 풀어보니 pom.xml이 보인다.  maven...
maven plugin도 없는데... 여기선 어쩔수 없이 Maven Plugin 설치하고 다음을 진행한다. (오늘따라 MarketPlace가 무자게 시간 잡아먹음)

JUnit Test 파일 하나씩 열어서 테스트 돌려보았지만 전부 Fail & Error  ㅠ.ㅠ;;;

눈 빠지게 찾은소스가
redis.clients.jedis.tests.HostAndPortUtil & redis.clients.jedis.tests.JedisPoolTest
defaulthnp1.host 를 서버 IP로 변경하고  Test를 돌려보지만 에러...

jedis.auth("foobared");
인증을 요구하는 부분에서 에러가 발생한다.

여기서 소스에 함께 포함되어 있는 redis.conf, redis2.conf 가 눈에 들어옴.
redis.conf 복사해서
/root/redis-2.4.8/conf 를 만들고 넣어준다.
실행할때 위의 설정파일을 인식하라고 옵션 넣어주면 됨.

# nohup ./src/redis-server /root/redis-2.4.8/conf/redis.conf &
#tail -f nohup.out<== 요렇게 하고 nohup파일을 계속 보고 있으면 로그파일이 올라온다.

다시 JUnit Test 돌리니 드디어 전부 초록색...

오늘은 여기까지 하고 끝내자.

다음은 Master-Slave 설정을 해서 적용시켜 보도록 한다.
틈틈히 Command 명령어는 익혀야 할듯하다.




'DBMS > NoSQL' 카테고리의 다른 글

MongoDB 오픈세미나 후기  (0) 2012.08.31
Cassandra 시작시 MalformedURLException 발생  (0) 2012.04.12
MongoDB Naming Rule  (0) 2011.11.30
MongoDB GUI Tool for Mac osx : MongoHub  (0) 2011.11.23
MongoDB 컴포넌트 목록  (0) 2011.10.03


« PREV : 1 : 2 : 3 : NEXT »