개발관련/MongoDB
2015. 11. 19. 18:15
이번에는 replicaset에 대해 설정해보자. 먼저 단일 서버를 셋팅한 yml 파일을 복사후 replication name을 셋팅하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #yml 파일이 존재 하지 않으면 /var/local/mongdb/data 에 data를 저장. (경로도 마찬가지로 없으면 default 경로에 저장.) #log역시 설정 정보가 없으면 /var/local/mongdb/logs/log.log에 저장. #net - network 설정 #하위 구조로 bindIp와 port를 설정한다. #bindIP는 mongoDB 자신의 ip를 설정. #port는 mongDB 의 port를 설정. net: bindIp: "192.168.0.105" port: 45001 #processManagement - 실행 옵션. #fork 는 백그라운드 옵션. processManagement: fork: true #storage - data 저장 경로를 설정. #dbpath - data를 저장할 실제 경로. #journal - data를 쓰기 전 , data write query를 파일에 저장하는 옵션. (일종의 검증, 복구를 위한 작업인듯...) # enabled - journal 을 쓸지 말지의 설정. storage: dbPath: /home/solrslave/src/mongodb-linux-x86_64-rhel62-3.0.4/data2 journal: enabled: true #destination: file, syslog 2가지 옵션 사용 가능 #file로 선언하면 path 옵션을 필수로 넣어서 경로를 직접 설정 #syslog로 선언하면 경로 설정 없이 디폴트 로그파일에 저장 # #verbosity: 로그 기록 레벨 # default : 0 # 0 ~ 5 숫자 값으로 레벨 구분 # 0 : all # 1 : debug, # 2: information # 3: warning # 4: errorm # 5: fatal systemLog: verbosity: 1 destination: file logAppend: true path: /home/solrslave/src/mongodb-linux-x86_64-rhel62-3.0.4/logs2/repl_log1.log replication: replSetName: elastic | cs |
replication 이름을 추가할 replica에 동일하게 써준다. 이휴 bindIp와 port를 각 서버에 맞게 셋팅한다. 필자는 centos 환경에 3개의 서버를 먼저 띄었다.
설치된 경로에 mongod -f 설정파일.yml 을 하면 된다.
이후 ps -ef | grep mongod 를 하면 아래와 같은 결과를 볼수 있다.
1 2 3 | 500 12235 1 0 Nov17 ? 00:07:42 ./bin/mongod -f startup2.yml 500 12251 1 0 Nov17 ? 00:07:05 ./bin/mongod -f startup3.yml 500 12267 1 0 Nov17 ? 00:07:03 ./bin/mongod -f startup4.yml | cs |
그럼 위에 서버들이 replicaset으로 제대로 셋팅이 되었는지 확인해보자.
아무 몽고 서버에 먼저 접속을 한다. (robomngo tool 추천 또는 ./bin/mongo 아이피:포트 로 접속 하면된다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | use dbaname //사용할 db로 이동. show dbs //모든 db의 이름 확인 show collections //모든 collection 이름 정보 확인 rs.status(); /* 1 */ { "set" : "elastic", "date" : ISODate("2015-11-20T09:44:41.517Z"), "myState" : 1, "members" : [ { "_id" : 1, "name" : "192.168.0.105:45001", "health" : 1.0000000000000000, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 258290, "optime" : Timestamp(1448006114, 22), "optimeDate" : ISODate("2015-11-20T07:55:14.000Z"), "electionTime" : Timestamp(1447920217, 1), "electionDate" : ISODate("2015-11-19T08:03:37.000Z"), "configVersion" : 1, "self" : true }, { "_id" : 2, "name" : "192.168.0.105:45002", "health" : 1.0000000000000000, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 92465, "optime" : Timestamp(1448006114, 22), "optimeDate" : ISODate("2015-11-20T07:55:14.000Z"), "lastHeartbeat" : ISODate("2015-11-20T09:44:40.779Z"), "lastHeartbeatRecv" : ISODate("2015-11-20T09:44:40.805Z"), "pingMs" : 0, "syncingTo" : "192.168.0.105:45001", "configVersion" : 1 }, { "_id" : 3, "name" : "192.168.0.105:45003", "health" : 1.0000000000000000, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 92465, "optime" : Timestamp(1448006114, 22), "optimeDate" : ISODate("2015-11-20T07:55:14.000Z"), "lastHeartbeat" : ISODate("2015-11-20T09:44:40.808Z"), "lastHeartbeatRecv" : ISODate("2015-11-20T09:44:40.783Z"), "pingMs" : 0, "syncingTo" : "192.168.0.105:45001", "configVersion" : 1 } ], "ok" : 1.0000000000000000, "$gleStats" : { "lastOpTime" : Timestamp(0, 0), "electionId" : ObjectId("564d825928cf905edab537fb") } } | cs |
mongodb의 replication 정보는 rs 명령어로 한다. rs.status() 함수를 하면 위 정보와 같이 나온다. 여기서 누가 primary이고 secondary인지 알 수있다. 기본적으로 모든 cloud는 대장(?)을 선출하는데 mongodb는 primary라 칭한다. 설정 정보를 보고싶으면, rs.config() 를 하면된다.
다음은 shard config server에대해 알아보겠다.