2013년 7월 29일 월요일

그래....러시아다.

그래...

방사능에 쩔은 일본 패스

중국...날이갈수록 싫어지는....

곰곰히 생각해보니 러시아다.....

40대 중반좀 넘어서 바이크하나 사서 러시아나 다녀와야겠다.

20살에 떠나려고했던 전국일주를 15년이 지나서 했으니

지금 생각은 50이 넘어야 할라나????

좀 땡겨서 가보자 넘 늙어서가서 골골대면 추하다

한 5년 열심히 살아서 돈 좀 모아봐야겠다.

심심해지던 생활이 갑자기 두근대기 시작한다.



2013년 7월 27일 토요일

가족때문에 산다는 그 말도 안되는 소리

새벽에 잠은 안오고 ...
아라얼굴 함보고 마눌님 팔뚝 만지막(?) 거리다가....
딩굴딩굴 하다가 끄적 거려본다.



가끔 술을 마시다 이런저런 이야기를 하다

갑자기 초딩버젼의 철학이야기가 나올때 가 있다. 

"왜 사나요?"

그리고 삼십대 중반이 넘었음에도 불구하고 

그 이유에 대한 변명(?)을 마련하지 못한 

불쌍하고 순수한 영혼을 접할때면 깜짝 놀라곤 한다.

아.... 그 질문을 한 사람을 보고 놀라는 것은 아니다

질문을 한 인간은 적어도 사는 이유에 대하여 뭔가 소설을 쓰려고 노력이나 하고 있으니

그나마 나은 축이다 싶다.

내가 가슴아픈 사람은 

"애들하고 가족들 때문에 살지...내가 먹여살려야 하고....뭐라뭐라 블라블라블라~"

이미 소설은 완성했는데 이게 너무 통속 적이고 이유도 없다는 것에 있다.

그저 마당깊은집 같은 과거 드라마의 가부장적 아버지들이 술에 떡이 되서 

지껄이는 의미 없는 너스레같으다.

솔직히 이렇게 이야기 해주고 싶었다

"...조까세요"

하지만 맨탈이 깨지고 말이 길어질까봐 침묵한다.



그럼 나는 가족을 위해 살고 있지 않은가?  

아니다. 나도 와이프가 있고 초딩 아들과 10년 차이나는 둘째가 있다.

그들도 아주 중요한 내 삶의 이유다. 어쩌면 진정 그들때문에 살고 있는지도 모른다.

하지만 거부한다.

왜?

....가족때문에 내가 삶을 살고있다고 하면... 

그럼 39살에 결혼하지 않은 내 친구들은 뭔가?

그 논리대로한다면 

결혼하고 아이들을 낳지 않는(자의던 타의던) 친구들은 

나의 삶보다 그들의 삶의 이유가 비교적 가벼운건가?

고아원에서 자라 이세상 홀홀 단신으로 사는 많은 사람들은 삶의 의미가 없는가?

그리고 결정적으로 내가 이때까지 한번도 가족(오직 그것)만이 

내 삶의 이유라고 생각한 적이 없음에 

그럼 나는 쓰레기 인건가?  

그러기에는 뭔가 말이 않된다.


나는 나를 위해 살았고 앞으로도 그렇게 살것이다.

나는 나를 사랑해 주는 사람이 필요하다. 가족은 나를 사랑해 준다. 

나는 내 맨탈 유지를 위해서 나를 사랑해 주는 사람이나 조직이 꼭 필요하다. 

그래서 그들이 유지, 관리 될 수 있도록 

경제적, 정신적 지원을 하는데 있어서 일말의 궁금증도 없다.


나는 내가 사랑한 또는 사랑할 대상이 필요하다.  

예를들어 최근 태어난 둘째 아라. 아직 말 도 못하는 만 1.5세, 너무나 사랑스럽다.

이제 자기 의사를 몸짓과 표정으로 표현하고  

가끔 귀찮은 것은 쌩까는 방법을 배우고 있는 

그 짓거리들이 어찌나 귀여운지 말도 못하겠다.


"왜 꾸역꾸역 사느냐"의 질문에 해답은 

"왜 죽지 않고 찌질하게 살아 있느냐"는 질문으로 바꾸면 

아주 명확하고 확연하다.

나와 관계된 관계망이 유지 되고 있고 그 관계를 유지 하는것이 나를 위함이고 

그 위함으로 내가 죽지 않는(살아가는) 이유는 명확해 진다.

"가족때문에 산다" 라는 말의 함정은 이거다. 


사람마다 자신의 영혼과 육체의 생존을 위해서 유지하는 관계들은 다양하다.

그런데 "가족때문에 산다" 라는 형님의 조언은  폭력적이다.

아직 결혼할 시기가 아닌 또는 능력이 안되는(돈이던 이성이던) 20대는 

어쩌면 감수성에 따라 사는 이유에 대한 고민이 더 많을 수 있다.

거기다가 이력서 100통에 취업도 안되고 집에 돈도 없고 

군대 전역할때는 다 됬고  대학원갈 머리가 안된다면 "아....못살겠다" 할 만하지 않은가

결국 아무것도 없는 사람에게 "가족"을 만들기 위해  

취업+연애+결혼+출산  4종 셋트를 언능 하라는, 

먼저 가진이의 오만함이라는 생각

그래야 너도 정상적인 인간이라고...삶의 이유가 있는것이라고 

그러니 결국  "가족의 가장으로써 회사를 다니고 있는 이 인간의 말 인즉슨..."

취업 못하는 너는 찌질한 인간이고

결혼 안하는 너는 이상한 인간이고

애를 낳지 않는 너네들은 인간이 덜된 거라고....





평소 내가 가족때문에 이 고생을 하면서 

회사를 다닌다고 하는 사람은 내 글을 보고 짜증을 낼지도 모르겠다.

35살까지는 인정(맞다는게 아니라 아직 나이가 그 나이라 어느정도 인정한다는...이해 한다는 말과 다르다)

하지만 나이 드실만큼 드신분들이라면 

"그저 우리가 게을러서 평소에 생각없이 살고 있는거에요"

라고 말해줄께요



씨바...어짜피 니놈도 애들하고 마누라때문에 산다는 말은 똑 같지 않느냐!  
알량한 말장난으로 장난 하느냐!

맞습니다!!

지금 나는 졸라 잘난척을 하고 있는거에요

눈치를 까셨다니 참으로 다행입니다.


그런데 그거 하나만 생각해 봤으면 한다.

프로그래밍을 할때  구조를 어떻게 잡느냐. 

즉 인터페이스를 사용하느냐 아니면 그냥 static 하게 메서드에 프로그램을 하느냐에 따라 

재활용을 하거나 구조변경시 메인을 박살내고 뜯어야 하느냐 

아니면 외곽만 수정을 하느냐가 결정된다.

잘 설계된 프로그램은 적은 수정만으로 큰 영향없이 운영이 가능하다.


사는 이유는 아주 근본적인 철학의 과제다. 

전문대학이라도 나왔다면 교양시간에 한번쯤 들어봤을 것이고 

살다보면 한번씩 입에 올려는 본 내용이다, 

그런데 이 근본적인 내용에 대한 고민이 덜 되어 있다면 (구조가 잘 설계되지 않았다면)

작은 변경에 너무 큰 수정비용을 지불해야 한다는 위험이 있다.


간단하게 ... 

만약

이혼을 했다면?  멘붕이다...어쩔것인가

사랑하던 사람이 사고로 죽었다. 어쩔것인가



하고싶은 이야기는 이거다

최소한의 자기 보호 - 이기적인 부분 보다 주변인 보호를 위해  - ,

자신을 중심에 놓은 삶에 대해서 고민함이 중요하다는 것이다. (인터페이스 설계, 구현)

이기적인 것이 아니고 이타적인것이고  현명한 판단이어야 한다.

이혼을 하고 재혼을 하더라도 

타이트커플링된 삶의 이유를 찟어 발기다가 박살이 나는 일은 방지해야  

부모님까지 멘붕이 되는 일을 막을 수 있다.

만약 새로운 사람을 만나 재 출발할때라도 

그(새로만난) 사람을 유연하게 받아들일 수 있지 않을까?



부모님대에 4남매중 2명이 목사, 고모님은 목사사모
4촌들은 온통 장로아들과 결혼, 또는 목사....뭐뭐...

내가 결혼할때 워낙 말들이 많았다. 

"그따위로 해서 되겠느냐고."   이말은 당시에 생각했을때 저주다

"너같은 놈은 결혼해도 얼마 못살아"  뭐 이렇게 

나는 내 결혼식에 나의 부모님을 모시지 못했다.

아버지는 오기 싫다고 하셨고 어머니는 아버지를 어길 수 없다고 하셨다.

....

장인장모에게 조금 쪽팔렸다.

하지만

고마웠다. 

드디어 독립이다. 

지긋 지긋하게  내 삶의 지분을 주장하던 그분들이 알아서 떨어져 나갔다


결혼 후 14년이 된 지금. 아무도 나에게 그때 이야기를 하지 않는다

왜?  내가 잘 살고 있으니까, 그들의 저주 대로 이혼하지 않고 살고 있으니까!   

뭐라고 할껀데?  (내가 이겼다~ 만세~~~  -.-;;)

그리고 느즈막히 이렇게 말한다 

"가족이 있으니 열심히 살으라고...."

...아...차마 가족에게 엿을 날릴 수 없으니 참기는 하지만....여하간 그러하다


그렇다고 지금 내가 부모님을 보지 않거나 집안에 분란이 있는건 아니다.

때 되면 부모님댁에 찾아가고 손자 손녀 보고 싶어서 나이드신 부모님은 전화를 하신다.

언제 내려오냐고!!!

그런거다.  

나보다 더한 인간들 많다... 다 들 진상을 떨면서 살아간다는 

평범한 진리를 알게 된 순간 세상 살기 참 편했다

대충 살아서 날로 먹어지는 인생이 아닌거다.

졸라 진지하게 살아야 한다. 

돈 많이 버는것과 전혀 상관없는 이야기

내가 사는 이야기...

나를 정면으로 바라보고 사는 이야기 그런거

끝.


2013년 7월 26일 금요일

MongoDB Architecturing

구조를 설계할때는 먼저 닥치고 그림으로 표현 가능해야 합니다.

깔아보고 만져봐야 그림이 나온다? 맞습니다. 깔아보고 만져보고  꼭 그리세요 

그냥 만지다가 그걸로 프로덕션으로 넘어갔을때 나중에 당할 곤란함을 알고 있다면 

또는 모른다면 여하간 그리는 겁니다.

아래 그림은 가상화서버(Citrix Xen)으로 서버 5개를 만들고(외곽 점선) 각 서버에 노드들을 구성한 구조 입니다.

라우터는 각 서버에 하나씩 다  구성하고 Config는 3개(최대 3개-1개 아니면 3개만 허용함 2개 만들면 안뜬다)  그리고 ReplicaSet을 Sun Moon Mars로 이름지어서 3개 만들었습니다.

각 Set는 내부적으로 Master 노드 1, 복제노드 2, 아비터 노드 1 로 구성합니다.

각 노드에 대한 설명을 써봅니다.

mongoS : 인입된 쿼리를 여러 개의 MongoD(DB)에 분산(라우팅)함, 데이터 저장하지 않음
Configuration Server : 분산 저장되는 데이터(Collection)의 위치를(메타데이터) 저장하고 있음,  MongoS로 인입된 쿼리의 데이터를 조회하기 위한 참조정보로 사용됨

Mongod : 실제 DB 정보의 저장 및 회신을 담당하며

MASTER : R/W가 가능한 Master (node type Standard)

STANDARD SLAVE : Read only이나 장애시 Master로 승격되는 Slave (node type Standard)

PASSIVE SLAVE : Slave이지만 Priority가 0 으로 설정되어 Master를 복제하지만 Master로 승격되지 못하는 Passive  (백업 또는 읽기전용 서버로 사용)

ARBITER : Master장애시 Master로 승격할 Slave 선출에만 참여하고 데이터는 없는 아비터


u설치 구성의 전체 절차
서비스를 위하여 서버를 설치 하는데 있어 MongoDB는 친절하지 않다.
설치는 설치대로 구성 하고 구성정보는 DB에 별도로 입력 하여 구성한다.
전체적인 절차는 아래와 같다.
1.DB 환경 설계
1.Shard 구성방안 Mongos 구성 Config 구성 몇 대  어디로 분산 할 것인가 (HA에 주안점을 둘 것)
2.Replication Set 구성안 MongoD를 몇 개 구성할 것인가, Arbiter 의 위치(HA)
3.대량의 Write 대응 Replset을 늘린다.
4.대량의 Read 대응 Replset내에 Slave를 추가한다.
2.장비준비
1.IP할당
2.OS설치(Cento6버젼이상) 및 튜닝  (본 건의 경우 XenServer를 사용하여 가상화 환경에서 진행)
3.Gluster 또는 NAS 등의 공유저장소 (Local을 사용해도 가능하나 bigData 처리시 Disk 부족으로 인하여 서버를 증설하는 케이스를 줄이기 위해서는 Scale Out가능한 Storage를 구성함이 권장됨
3.서버 설치 및 인스턴스 구동
1.ConfigServer 구성
1.Config 구동 후 Mongos를 띄울때 GlusterFS를 사용하는 경우 Fuse의 MMAP 지원문제로 다운되어 버리는 경우가 있다.
2.이 경우 Linux의 Kernel FUSE의 MMAP 호환성 문제로 판단됨  상세한 원인은 모르나 .CentoOS 6으로 설치하여 문제가 해결됨버전 업그레이드 할 것
2.MongoS 구성
3.ReplicaSet 구성
4.Shard 구성
1.mongoS에 접속하여 Replica Set을 등록하여 실제 데이터 적제 및 조회가 가능하도록 하는 작업 수행
4.개발진행시 샤딩구성(enablesharding) 및 샤드키 등록
1.샤딩하여 저장할 DB를 생성한 다음에 mongoS에서 샤딩 정보를 등록하여 분산 저장하도록 한다.

uConfig SVR  구성
공통
각서버에 mongo 계정을 생성하고 /db 파티션과 /dbdata  /log 파티션을 생성
Db설치위치 : /db/mongodb/
Dbdata위치 : /dbdata/config or instance(실 서비스 DB데이터GlusterFS & FUSE 사용 접속
vlogdb1에서
$ mkdir -p /dbdata/config/config1
mongod --fork --quiet --dbpath /dbdata/config/config1 --port 13000 --configsvr --logpath /log/db/config1.log
vlogdb2에서
$ mkdir -p /dbdata/config/config2
mongod --fork --quiet --dbpath /dbdata/config/config2 --port 13000 --configsvr --logpath /log/db/config2.log
vlogdb3에서
$ mkdir -p /dbdata/config/config3
mongod --fork --quiet --dbpath /dbdata/config/config3 --port 13000 --configsvr --logpath /log/db/config3.log
설명
--fork : processbackground로 실행 (& 없이)
--quiet : 로그를 단순하게 출력
--dbpath /dbdata/config/config3 : Data 저장 위치 PATH
--port 13000  : 서비스 포트 (mongoS 구성시 참조하는 정보)
--configsvr  : mongodDBConfig에 같이 사용함 configserver임을 명시함
--logpath /log/db/config3.log : 로그 저장 위치
기타
Config Server1대 또는 3대 만 허용한다. 2대 또는 4대 이상 구성시 mongos 구동시 오류출력하고 구동 되지 않는다.
Mongodb 자체의 제약 사항이므로 metadata 병목이 우려될 경우 Config 새로운 DB를 별도로 구성하여 운영 하도록 한다.
umongos SVR  구성
공통
각서버에 mongo 계정을 생성하고 /db 파티션과 /dbdata 파티션을 생성
Db설치위치 : /db/mongodb/
Dbdata위치 : mongosdata 저장소를 사용하지 않는다.
mdbs1에서
mongos --fork --quiet --port 15000  --configdb mdbs1:13000,mdbs2:13000,mdbd1:13000 --logpath /log/db/route1.log
mdbs2에서
mongos --fork --quiet --port 15000  --configdb mdbs1:13000,mdbs2:13000,mdbd1:13000 --logpath /log/db/route2.log
설명
--fork : processbackground로 실행 (& 없이)
--quiet : 로그를 단순하게 출력
--port 15000  : 서비스 포트 (mongoS 구성시 참조하는 정보)
--configdb mdbs1:13000,mdbs2:13000,mdbd1:13000  : config서버 정보를 리스팅 한다. 분산파일을 찾아 낼 때 사용함
--logpath /log/db/config3.log : 로그 저장 위치
기타
Mongos는 여러대가 구성 가능하다
권장하는 구성은 모든 서버에 mongos를 구성하는 것이다.
분산을 위해서는 L4등에 등록이 필요하지만 궂이 모두 등록 하지 않아도 되며 HA를 감안하여 구성
Config Server 정보는 1대 또는 3대 만 허용한다. 2대 또는 4대 이상 구성시 mongos 구동시 오류출력하고 구동 되지 않는다.
uReplication Set 구성
설명
기본 제공되는 HA 방식인 MASTER/SLAVE 구성은 Master 파손시 Write가 되지 않도록 구성된다.
ReplSet 구성시 Master(PRIMARY라고 한다) 파손에 따른 승급( Promotion)이 자동으로 동작한다.
1개의 MasterN(12개이하) Slave, 1개의 Arbiter로 구성된 ReplSet는 다수 구성될 수 있다.
Shard Server 구성시에는 Master Slave구동시 지정하지 않고 replSet 으로 상호간의 정보를 등록한다.
Master는 임의로 지정(선출/자동)되거나 앞서 ReplSet구성시 priority를 높게 지정한 서버가 Master가 된다.
데이터 저장소 생성
MongoDB (글러스터FSNAS를 사용하는 경우 아무대 서나 한곳에서(단독에서는 각각 필요한 경우만)
“sun” ReplSet
$ mkdir -p /dbdata/instance/sun/abit  (arbiter)
$ mkdir -p /dbdata/instance/sun/vlogdb2
$ mkdir -p /dbdata/instance/sun/vlogdb4
$ mkdir -p /dbdata/instance/sun/vlogdb5
moon/mars 용으로 폴더 생성
구성
vlogdb1에서
$ mongod  --dbpath /dbdata/instance/sun/abit --port 10000 --fork --quiet --logpath /log/db/sun_abit.log --replSet sun/vlogdb4:10001,vlogdb2:10002,vlogdb5:10002
$ mongod --dbpath /dbdata/instance/moon/vlogdb1 --port 20002 --fork --quiet --logpath /log/db/moon_slave.log --nssize 1024 --oplogSize 2048 --replSet moon/vlogdb3:20001,vlogdb4:20002
vlogdb2에서
$ mongod  --dbpath /dbdata/instance/sun/vlogdb2 --port 10002 --fork --quiet --logpath /log/db/sun_slave.log --nssize 1024 --oplogSize 2048 --replSet sun/vlogdb4:10001,vlogdb5:10002
$ mongod  --dbpath /dbdata/instance/moon/arbit --port 20000 --fork --quiet --logpath /log/db/moon_arbit.log --replSet moon/vlogdb3:20001,vlogdb1:20002,vlogdb4:20002
$ mongod --dbpath /dbdata/instance/mars/vlogdb2 --port 30002 --fork --quiet --logpath /log/db/mars_slave.log --nssize 1024 --oplogSize 2048 --replSet mars/vlogdb4:30002,vlogdb5:30001
Vlogdb3에서
$ mongod --dbpath /dbdata/instance/moon/vlogdb3 --port 20001 --fork --quiet --logpath /log/db/moon_master.log --nssize 1024 --oplogSize 2048 --replSet moon/vlogdb1:20002,vlogdb4:20002
$ mongod --dbpath /dbdata/instance/mars/abit --port 30000 --fork --quiet --logpath /log/db/mars_arbit.log --replSet mars/vlogdb2:30002,vlogdb4:30002,vlogdb5:30001
Vlogdb4에서
$ mongod --dbpath /dbdata/instance/sun/vlogdb4 --port 10001 --fork --quiet --logpath /log/db/sun_master.log --nssize 1024 --oplogSize 2048 --replSet sun/vlogdb2:10002,vlogdb5:10002
$ mongod --dbpath /dbdata/instance/moon/vlogdb4 --port 20002 --fork --quiet --logpath /log/db/moon_slave.log --nssize 1024 --oplogSize 2048 --replSet moon/vlogdb1:20002,vlogdb3:20001
$ mongod --dbpath /dbdata/instance/mars/vlogdb4 --port 30002 --fork --quiet --logpath /log/db/mars_slave.log --nssize 1024 --oplogSize 2048 --replSet mars/vlogdb2:30002,vlogdb5:30001
Vlogdb5에서
$ mongod --dbpath /dbdata/instance/sun/vlogdb5 --port 10002 --fork --quiet --logpath /log/db/sun_slave.log --nssize 1024 --oplogSize 2048 --replSet sun/vlogdb2:10002,vlogdb4:10001
$ mongod --dbpath /dbdata/instance/mars/vlogdb5 --port 30001 --fork --quiet --logpath /log/db/mars_master.log --nssize 1024 --oplogSize 2048 --replSet

uReplication Set 구성 – SUN setting
“SUN” ReplSet  Init
실제 DB 내부에 설정을 초기화 한다.

//구성된 DB 중에서  SUN Replication Set을 만든다.
//start replSet으로 사용할 DB아무대나 접속해서 된다. 아래 예에서는 Master로 사용할 DB에서
//접속
./mongo vlogdb4:10001/admin  ç MASTER / SLAVE 아무곳에서 해도 되나 그냥 MASTER에서 진행했음
//아래 컴멘드를~ 넣어 주면 됨, 한줄로 안 넣어도 됨
>db.runCommand({"replSetInitiate":
  {"_id":"sun",
  "members":[
  {
      "_id":0,
      "host":"vlogdb1:10000",
      "arbiterOnly":true
  },
  {
      "_id":1,
      "host":"vlogdb2:10002"
  },
  {
      "_id":2,
      "host":"vlogdb4:10001",
      "priority":100    ç  이 숫자가 높은 녀석이  PRIMARY 가 된다.(default 1)
  },
  {
      "_id":3,
      "host":"vlogdb5:10002"
  }
  ]
  }})
//명령수행 결과
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}

Moon 하고 Mars도 위를 참고해서 구성하면 됩니다.  포트와 hostname에 주의 하세요

uShard Server구성
설명
mongoS에서 요청들어온 데이터를 분산저장 하거나 찾아 내기 위해서 Shard구성을 한다.
Shard 구성은  mongoSReplSet 정보를 등록함으로써 수행된다.
mongoS에 접속하여 정보를 입력하면 해당 정보는 ConfigSVR에 저장된다.
mongoS가 여러대 이더라도 1대에 Shard용 서버 또는 ReplSet 정보를 등록하면 자동으로 전파되어 동기화 된다.(작업은 1곳에서 1)
구성
//mongoS 서버 중에 아무대나 접속한다. 아래의 경우 1번에 접속
./mongo vlogdb1:15000/admin
//”sun” replSet을 등록한다
>db.runCommand({addshard:"sun/vlogdb4:10001"})
//”moon” replSet을 등록한다
>db.runCommand({addshard:"moon/vlogdb3:20001"})
//”mars” replSet을 등록한다
>db.runCommand({addshard:"mars/vlogdb5:30001"})
======================
logdb샤딩한다고 정의 안하면 계속 첫번째 샤드에 저장
db.runCommand({"enablesharding":"logdb"})
샤드할 콜랙션과 키를 지정한다.
db.runCommand({"shardcollection":"logdb.weblogColl", "key":{"_id":1}})

위의 경우 vlogdb1,2,3,4,5 정보를 /etc/hosts 파일에 등록해 놓았다. (아니면 IP 넣어야 함)
여러 개의 mongod 서버 중에서 아무 서버나 등록해서 Replication SET 정보를 알아내기는 하지만 관리상 임의로 Master로 지정한 서버의 정보를 등록 하였다.
위와 같이 해 놓으면 Replica set 서버 중에서 어느 놈이 죽더라도 set안에 다른 서버가 Master로 승격되고 알아서 그쪽으로 Write를 전달 하게 된다.(자동 처리됨, 테스트 결과 5초 미만)

단순하게 데이터를 입력하기 위한 코드 셈플입니다.

import java.net.UnknownHostException;
import java.util.Set;
import com.mongodb.*;
public class mongoTest {
    public static void main(String[] args) throws Exception {
  try{
  Mongo m = new Mongo(“172.18.186.193",15000);
                           DB db = m.getDB("logdb");
 
                                                                         Set<String> colls = db.getCollectionNames();
                                                                                for (String s : colls) {
                                                                                          System.out.println(s);
                                                                                          }
                                                                       // get a collection object to work with
                                                                        DBCollection coll = db.getCollection("weblogColl");
  BasicDBObject doc = new BasicDBObject();
  doc.put("IP", "127.0.0.1");
  doc.put("DATE", "17/Oct/2011");
  doc.put("TIME", "15:17:55");
  doc.put("ZONE", "+0900");
  doc.put("URI", "/test.xxx");
  doc.put("VERSION", "HTTP/1.1");
  doc.put("CODE", "404");
  doc.put("SIZE", "208");
 
  coll.insert(doc);
 
  }catch(UnknownHostException e){
  System.out.println("Unknown Host!!");
  }
       
  }//mongoDbConnectionTest
 
}                       


구동할때 마다 손으로 하면 힘드니까 스크립트를 만들어서 구동하고 정지하세요 
스크립트 셈플로 하나 올립니다. 

#!/bin/sh
#START MONGO DB INSTANCE
# Check user
#######################################
USER=`whoami`
if [ $USER != "mongo" ]; then
  echo "$0 should be running as [mongo] user. " >&2
  exit 9
fi
######################################
PROGRAM=/db/mongodb/bin/mongod
MONGOPID=`ps -ef | grep 'mongod' | grep 'moon_slave' | grep -v grep | awk '{print $2}'`
test -x $PROGRAM || exit 0
case "$1" in
  start)
     echo "Starting replSet MOON DB server"
     $PROGRAM --dbpath /dbdata/instance/moon/vlogdb1 --port 20002 --fork --quiet --logpath /log/db/moon_slave.log --nssize 1024 --oplogSize 2048 --replSet moon/vlogdb3:20001,vlogdb4:20002
     ;;
  stop)
     echo "Stopping replSet MOON DB server"
     if [ ! -z "$MONGOPID" ]; then
        kill -15 $MONGOPID
     fi
     ;;
  *)
     echo "Usage:moon_slave.sh {start|stop}"
     exit 1
esac
exit 0

ㄴㅇㄹㅇㄴㅁㄴ