MongoDB 막 설치해보기
ITWeb/개발일반 2013. 1. 11. 11:52본 내용은 보안이 전혀 고려되지 않은 단순 설치 및 분산구성 테스트를 목적으로 작성되었습니다.
그러니 꼭 보안 관련 내용을 반영 하시기 바랍니다. ^^;
추후 보안 관련 내용도 올려 보도록 하겠습니다.
참고문서
- http://docs.mongodb.org/manual/tutorial/install-mongodb-on-linux/
- http://docs.mongodb.org/manual/tutorial/deploy-replica-set/
- http://cookbook.mongodb.org/
- http://www.ibm.com/developerworks/kr/library/os-mongodb4/index.html
- http://www.slideshare.net/madvirus/mongo-db
- http://blog.beany.co.kr/archives/163
- http://yoga82.tistory.com/68
- http://blog.naver.com/PostView.nhn?blogId=kinos1&logNo=50128200997&redirect=Dlog&widgetTypeCall=true
MongoDB 설치하기
▷ [다운로드 및 설정] # 32bits curl http: //downloads.mongodb.org/linux/mongodb-linux-i686-2.2.2.tgz > mongo.tgz # 64bits curl http: //downloads.mongodb.org/linux/mongodb-linux-x86_64-2.2.2.tgz > mongo.tgz tar -xvzf mongo.tgz mv mongodb-linux-i686- 2.2 . 2 ../apps/ cd ../apps/ ln -s mongodb-linux-i686- 2.2 . 2 mongodb cd mongodb mkdir data mkdir conf mkdir logs cd conf vi mongodb.conf dbpath=/home/user/apps/mongodb/data logpath=/home/user/apps/mongodb/logs/mongodb.log logappend= true verbose= true #bind_ip= 127.0 . 0.1 port= 27017 fork= true rest= true #auth= true #noauth= true [실행] ./bin/mongod --config conf/mongodb.conf [접속] ./bin/mongo localhost: 27017 [중지] # mogod 로 중지 mongod --config conf/mongodb.conf --shutdown # console 에서 아래 명령어 실행 db.shutdownServer() # Ctrl+C, kill - 2 PID, kill - 15 PID 로 중지, kill - 9 PID 사용 시 데이터 깨질 수 있음 # kill 시그널 number 1 ) SIGHUP 2 ) SIGNT 3 ) SIGQUIT 4 ) SIGILL 5 ) SIGTRAP 6 ) SIGIOT 7 ) SIGBUS 8 ) SIGPPE 9 ) SIGKILL 10 ) SIGUSR1 11 ) SIGSEGV 12 ) SIGUSR2 13 ) SIGPIPE 14 ) SIGALRM 15 ) SIGTERM 17 ) SIGCHLD 18 ) SIGCONT 19 ) SIGSTOP 20 ) SIGTSTP 21 ) SIGTTIN 22 ) SIGTTOL 23 ) SIGURG 24 ) SIGXCPU 25 ) SIGXFSZ 26 ) SIGVTALRM 27 ) SIGPROF 28 ) SIGWINCH 29 ) SIGIO 30 ) SIGPWR |
MongoDB Replica 구성하기
▷ [Replica 설정] cd apps/mongodb mkdir -p srv/mongodb/rs0- 0 srv/mongodb/rs0- 1 srv/mongodb/rs0- 2 mkdir logs conf cd conf vi mongodb0.conf mongodb1.conf mongodb2.conf dbpath=/home/user/apps/mongodb/srv/mongodb/rs0- 0 logpath=/home/user/apps/mongodb/logs/mongodb0.log logappend= true verbose= true bind_ip= 10.101 . 254.223 port= 27017 fork= true rest= true replSet=rs0 dbpath=/home/user/apps/mongodb/srv/mongodb/rs0- 1 logpath=/home/user/apps/mongodb/logs/mongodb1.log logappend= true verbose= true bind_ip= 10.101 . 254.223 port= 27018 fork= true rest= true replSet=rs0 dbpath=/home/user/apps/mongodb/srv/mongodb/rs0- 2 logpath=/home/user/apps/mongodb/logs/mongodb2.log logappend= true verbose= true bind_ip= 10.101 . 254.223 port= 27019 fork= true rest= true replSet=rs0 [실행] ./mongod --config ../conf/mongodb0.conf ./mongod --config ../conf/mongodb1.conf ./mongod --config ../conf/mongodb2.conf [접속] ./mongo 10.101 . 254.223 : 27017 [RepliSet 구성] # mongodb.conf 로 구성하는 경우 replSet=rs0/ 10.101 . 254.223 : 27017 , 10.101 . 254.223 : 27018 , 10.101 . 254.223 : 27019 # command 로 구성 하는 경우 ./mongo 10.101 . 254.223 : 27017 MongoDB shell version: 2.2 . 2 connecting to: 10.101 . 254.223 : 27017 /test > rs.status(); { "startupStatus" : 3 , "info" : "run rs.initiate(...) if not yet done for the set" , "errmsg" : "can't get local.system.replset config from self or any seed (EMPTYCONFIG)" , "ok" : 0 } > rs.initiate(); { "info2" : "no configuration explicitly specified -- making one" , "me" : "10.101.254.223:27017" , "info" : "Config now saved locally. Should come online in about a minute." , "ok" : 1 } > rs.conf(); { "_id" : "rs0" , "version" : 1 , "members" : [ { "_id" : 0 , "host" : "10.101.254.223:27017" } ] } rs0:PRIMARY> rs.add( "10.101.254.223:27018" ); { "ok" : 1 } rs0:PRIMARY> rs.add( "10.101.254.223:27019" ); { "ok" : 1 } rs0:PRIMARY> rs.status(); { "set" : "rs0" , "date" : ISODate( "2013-01-10T08:35:22Z" ), "myState" : 1 , "members" : [ { "_id" : 0 , "name" : "10.101.254.223:27017" , "health" : 1 , "state" : 1 , "stateStr" : "PRIMARY" , "uptime" : 295 , "optime" : Timestamp( 1357806905000 , 1 ), "optimeDate" : ISODate( "2013-01-10T08:35:05Z" ), "self" : true }, { "_id" : 1 , "name" : "10.101.254.223:27018" , "health" : 1 , "state" : 5 , "stateStr" : "STARTUP2" , "uptime" : 28 , "optime" : Timestamp( 0 , 0 ), "optimeDate" : ISODate( "1970-01-01T00:00:00Z" ), "lastHeartbeat" : ISODate( "2013-01-10T08:35:20Z" ), "pingMs" : 0 }, { "_id" : 2 , "name" : "10.101.254.223:27019" , "health" : 1 , "state" : 6 , "stateStr" : "UNKNOWN" , "uptime" : 17 , "optime" : Timestamp( 0 , 0 ), "optimeDate" : ISODate( "1970-01-01T00:00:00Z" ), "lastHeartbeat" : ISODate( "2013-01-10T08:35:21Z" ), "pingMs" : 107 , "errmsg" : "still initializing" } ], "ok" : 1 } rs0:PRIMARY> |
MongoDB Shard & Collection 구성하기
▷ [Shard & Collection] database : Database Name collection : Table Name (Object Name) [Config Server 구성] config server 폴더 생성 [ mongodb]$ mkdir -p configsvr0 [ mongodb]$ mkdir -p configsvr1 [ mongodb]$ mkdir -p configsvr2 [ mongodb]$ pwd /home/user/apps/mongodb/srv/mongodb [설정] - mongodb-configsvr0.conf dbpath=/home/user/apps/mongodb/srv/mongodb/configsvr0 logpath=/home/user/apps/mongodb/logs/mongodb-configsvr0.log logappend= true verbose= true bind_ip= 10.101 . 254.223 port= 37017 fork= true rest= true - mongodb-configsvr1.conf dbpath=/home/user/apps/mongodb/srv/mongodb/configsvr1 logpath=/home/user/apps/mongodb/logs/mongodb-configsvr1.log logappend= true verbose= true bind_ip= 10.101 . 254.223 port= 37018 fork= true rest= true - mongodb-configsvr2.conf dbpath=/home/user/apps/mongodb/srv/mongodb/configsvr2 logpath=/home/user/apps/mongodb/logs/mongodb-configsvr2.log logappend= true verbose= true bind_ip= 10.101 . 254.223 port= 37019 fork= true rest= true [실행] ./mongod --config ../conf/mongodb-configsvr0.conf --configsvr ./mongod --config ../conf/mongodb-configsvr1.conf --configsvr ./mongod --config ../conf/mongodb-configsvr2.conf --configsvr [Mongos 구성] [폴더생성] cd apps/mongodb mkdir -p srv/mongodb/shard [설정] conf/mongodb-shard.conf dbpath=/home/user/apps/mongodb/srv/mongodb/shard logpath=/home/user/apps/mongodb/logs/mongodb-shard.log configdb= 10.101 . 254.223 : 37017 , 10.101 . 254.223 : 37018 , 10.101 . 254.223 : 37019 logappend= true verbose= true bind_ip= 10.101 . 254.223 port= 47017 fork= true rest= true [실행] ./mongo 10.101 . 254.223 : 47017 MongoDB shell version: 2.2 . 2 connecting to: 10.101 . 254.223 : 47017 /test mongos> use admin switched to db admin mongos> db.runCommand({addShard: "rs0/10.101.254.223:27017,10.101.254.223:27018,10.101.254.223:27019" }) { "shardAdded" : "rs0" , "ok" : 1 } mongos> db.runCommand({listshards: 1 }) { "shards" : [ { "_id" : "rs0" , "host" : "rs0/10.101.254.223:27017,10.101.254.223:27018,10.101.254.223:27019" } ], "ok" : 1 } mongos> show dbs admin (empty) config 0 .046875GB mongos> use demo switched to db demo mongos> db.createCollection( "tbl_demo" ) { "ok" : 1 } mongos> db.tbl_demo.validate(); { "raw" : { "rs0/10.101.254.223:27017,10.101.254.223:27018,10.101.254.223:27019" : { "ns" : "demo.tbl_demo" , "firstExtent" : "0:2000 ns:demo.tbl_demo" , "lastExtent" : "0:2000 ns:demo.tbl_demo" , "extentCount" : 1 , "datasize" : 0 , "nrecords" : 0 , "lastExtentSize" : 8192 , "padding" : 1 , "firstExtentDetails" : { "loc" : "0:2000" , "xnext" : "null" , "xprev" : "null" , "nsdiag" : "demo.tbl_demo" , "size" : 8192 , "firstRecord" : "null" , "lastRecord" : "null" }, "deletedCount" : 1 , "deletedSize" : 8016 , "nIndexes" : 1 , "keysPerIndex" : { "demo.tbl_demo.$_id_" : 0 }, "valid" : true , "errors" : [ ], "warning" : "Some checks omitted for speed. use {full:true} option to do more thorough scan." , "ok" : 1 } }, "valid" : true , "ok" : 1 } mongos> db.tbl_demo.save({ "username" : "henry" }) mongos> db.tbl_demo.find() { "_id" : ObjectId( "50ef785abb4a5b4a3a99acac" ), "username" : "henry" } mongos> use admin switched to db admin mongos> db.runCommand({enablesharding: "demo" }) { "ok" : 1 } mongos> db.runCommand({shardcollection: "demo.tbl_demo" , key:{_id: 1 }}); { "collectionsharded" : "demo.tbl_demo" , "ok" : 1 } mongos> db.printShardingStatus(); --- Sharding Status --- sharding version: { "_id" : 1 , "version" : 3 } shards: { "_id" : "rs0" , "host" : "rs0/10.101.254.223:27017,10.101.254.223:27018,10.101.254.223:27019" } databases: { "_id" : "admin" , "partitioned" : false , "primary" : "config" } { "_id" : "demo" , "partitioned" : true , "primary" : "rs0" } demo.tbl_demo chunks: rs0 1 { "_id" : { $minKey : 1 } } -->> { "_id" : { $maxKey : 1 } } on : rs0 Timestamp( 1000 , 0 ) mongos> |