일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 주일설교
- No SQL
- WebGL
- nodeJS
- Deep learning
- 딥러닝
- Artificial Intelligence
- c++
- 김양재 목사님
- 우리들교회
- R
- node.js
- data science
- 몽고디비
- openCV
- probability
- Statistics
- 확률
- 김양재
- MongoDB
- 빅 데이타
- 빅데이터
- 인공지능
- 빅 데이터
- 김양재 목사
- 데이터 과학
- 빅데이타
- Big Data
- Machine Learning
- 통계
- Today
- Total
Scientific Computing & Data Science
[MongoDB] Replication / Replica Sets Part 2. 본문
by Geol Choi |
지난 글에서 Replica Set을 구성하는 방법에 대해 자세하게 다뤘다. 지난 글에서는 1대의 머쉰에서 localhost를 통해 Replica Set을 구성한 바 있다.
이번 글에서는 여러 대의 머쉰에서 Replica Set을 구성하는 방법에 대해 알아보도록 하겠다.
진행은 튜토리얼 방식이며, 제시되는 OS 및 IP(IP 대신 DNS를 입력해도 무방함) 등은 예를 들어 설명하기 위함이며 각자 자신의 환경에 맞게 응용하기 바란다. 한 번 따라해 보면 쉽게 자신의 환경으로 설정할 수 있으리라 믿는다.
이 예제에서는 총 2대의 머쉰을 사용하였으며, 각각 Windows와 Mac OS 환경이며, 설정되는 노드는 모두 3개(PRIMARY 1개, SECONDARY 2개)이다.
이를 간단히 표로 정리하면 [표 1.]과 같다:
노드 번호 |
OS |
데이터 |
노드 유형 |
IP | 포트번호 |
노드 1 |
Windows |
node_1 |
PRIMARY |
192.168.10.106 | 27017 |
노드 2 |
Windows |
node_2 |
SECONDARY |
192.168.10.106 | 27018 |
노드 3 |
Mac OS |
node_3 |
SECONDARY |
192.168.10.103 | 27019 |
[표 1.] Replica Set 구성 환경.
Replica Set 이름은 "rs0"이며, Windows 환경에서 설정되는 노드 1과 노드 2 Replica Set 구성부터 시작해 보겠다.
Windows에서 mongod 인스턴스 실행
1. 노드 1 및 노드 2에 대한 데이터 디렉터리를 생성한다.
노드 1에 대해서는 "node_1", 노드 2에 대해서는 "node_2"로 데이터 디렉터리 이름을 정하였다.
2. 노드 1 및 노드 2에 대한 mongod 인스턴스를 실행한다.
Windows 커맨드라인 툴을 실행(Windows 키 + R > cmd)하여 노드 1과 노드 2에 대한 mongod 인스턴스를 실행한다. 노드 1과 노드 2에 대해 각각 실행해야 하므로 커맨드라인 툴은 2개가 실행되어야 한다.
노드 1:
$ mongod --port 27017 --dbpath [YOUR_DATA_PATH]\node_1 --replSet rs0 --smallfiles --oplogSize 128
노드 2:
$ mongod --port 27018 --dbpath [YOUR_DATA_PATH]\node_2 --replSet rs0 --smallfiles --oplogSize 128
Mac OS에서 mongod 인스턴스 실행
3. 이제 Mac OS 환경으로 이동하여 노드 3에 대한 데이터 디렉터리를 생성한다.
데이터 디렉터리 이름은 "node_3"로 하였다.
4. 노드 3에 대한 mongod 인스턴스를 실행한다.
Mac OS에서 Terminal(쉘)을 실행하여 mongod 인스턴스를 실행하고 다음과 같이 입력한다.
노드 3:
$ mongod --port 27019 --dbpath [YOUR_DATA_PATH]\node_3 --replSet rs0 --smallfiles --oplogSize 128
사실 Windows의 노드 1과 노드 2와 IP가 다르기 때문에 포트번호가 겹쳐도 상관은 없으나, 혼동을 방지하기 위해 포트번호도 구분하였다.
Windows에서 Replica Set 구성
5. Windows에서 mongo 쉘 실행하여 mongo 쉘로 이동한다.
PRIMARY 노드(노드 1)에 대한 mongod 인스턴스는 현재 Windows 상에서 구동되고 있다. 커맨드라인 툴을 하나 열고 다음과 같이 입력한다:
$ mongo --port 27017
6. "rsconf" 변수에 Replica Set 환경설정 정보를 구성하고, Replica Set을 초기화한다.
5번에서 실행한 mongo 쉘에 다음과 입력하여 "reconf" 변수에 Replica Set 환경설정 정보를 저장한다:
(주의! IP는 반드시 자신의 머쉰에 해당하는 것으로 입력하여야 한다. 192.168.10.106은 단지 하나의 예에 불과하다.)
> rsconf = {_id: "rs0", members: [{_id: 0, host: "192.168.10.106:27017"}]}
{
"_id" : "rs0",
"members" : [
{
"_id" : 0,
"host" : "192.168.10.106:27017"
}
]
}
Replica Set을 초기화 한다:
> rs.initiate( rsconf )
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
초기화에 성공하면 위와 같이 "ok"가 값 1을 갖는다.
7. SECONDARY 노드들을 Replica Set에 추가한다.
5번에서 실행된 mongo 쉘에 다음과 같이 입력하여 노드들을 추가한다:
(주의! IP 및 포트번호는 자신이 구성하고자 하는 환경에 맞추어 입력하도록 한다.)
rs0:PRIMARY> rs.add("192.168.10.106:27018")
{ "ok" : 1 }
rs0:PRIMARY> rs.add("192.168.10.103:27019")
{ "ok" : 1 }
"192.168.10.106:27018"은 Windows 상에서 구동되고 있는 노드 2에 대한 것이며, "192.168.10.103:27019"는 Mac OS 상에서 구동되고 있는 노드 3에 대한 것이다.
8. Replica Set 구성 상태를 확인한다.
mongo 쉘에서 다음을 입력하면 replica set 구성 상태를 확인할 수 있다:
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2014-03-29T11:29:58Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.10.106:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1737,
"optime" : Timestamp(1396092399, 1),
"optimeDate" : ISODate("2014-03-29T11:26:39Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.10.106:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 226,
"optime" : Timestamp(1396092399, 1),
"optimeDate" : ISODate("2014-03-29T11:26:39Z"),
"lastHeartbeat" : ISODate("2014-03-29T11:29:58Z"),
"lastHeartbeatRecv" : ISODate("2014-03-29T11:29:58Z"),
"pingMs" : 0,
"syncingTo" : "192.168.10.106:27017"
},
{
"_id" : 2,
"name" : "192.168.10.103:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 199,
"optime" : Timestamp(1396092399, 1),
"optimeDate" : ISODate("2014-03-29T11:26:39Z"),
"lastHeartbeat" : ISODate("2014-03-29T11:29:56Z"),
"lastHeartbeatRecv" : ISODate("2014-03-29T11:29:56Z"),
"pingMs" : 2,
"syncingTo" : "192.168.10.106:27017"
}
],
"ok" : 1
}
데이터 동기화 확인하기
9. PRIMARY 노드에 데이터를 입력한다.
PRIMARY 노드(노드 1)에 데이터를 저장하고, SECONDARY 노드(노드2, 노드 3)에서 데이터가 동기화 되었는지 확인하는 절차이다:
rs0:PRIMARY> show dbs
local 0.28125GB
rs0:PRIMARY> use test
switched to db test
rs0:PRIMARY> db.tmp.insert({user: "gchoi", pwd: 1234})
rs0:PRIMARY> db.tmp.find().pretty()
{
"_id" : ObjectId("5336b00001d94e4b144f7b46"),
"user" : "gchoi",
"pwd" : 1234
}
이제 Windows와 Mac OS에 구동 중인 모든 mongod 인스턴스와 mongo 쉘을 닫는다.
Mac OS에서 설정되었던 노드 3에 대해 데이터를 확인해 보도록 하겠다(노드 2에 대해서도 동일하게 확인해 볼 수 있다).
Mac OS에서 Terminal을 열고 다음과 같이 입력하여 mongod 인스턴스를 실행한다:
$ mongod --dbpath [YOUR_DATA_PATH]/node_3 --port 27019
Terminal을 하나 더 열고 다음과 같이 입력하여 mongo 쉘을 실행한다:
$ mongo --port 27019
현재 db의 목록을 확인해 보면:
> show dbs
local 0.28125GB
test 0.0625GB
과 같이 PRIMARY 노드에서 생성했던 "test"가 있는 것을 확인할 수 있으며, "test"로 이동하여:
> use test
switched to db test
컬렉션 항목을 확인해 보면:
> db.getCollectionNames()
[ "system.indexes", "tmp" ]
PRIMARY 노드에서 생성했던 "tmp" 컬렉션이 있는 것을 확인할 수 있다. "tmp" 컬렉션의 내용을 확인해 보면:
> db.tmp.find().pretty()
{
"_id" : ObjectId("5336b00001d94e4b144f7b46"),
"user" : "gchoi",
"pwd" : 1234
}
역시 PRIMARY 노드에서 입력했던 도큐먼트의 내용과 정확히 일치하는 것을 확인할 수 있을 것이다.
'Data Science > MongoDB' 카테고리의 다른 글
[MongoDB] Replication / Oplog (0) | 2014.04.06 |
---|---|
[MongoDB] Replication / Usage of Slaves / Data Processing (0) | 2014.03.29 |
[MongoDB] Replication / Usage of Slaves / Read Scaling (0) | 2014.03.29 |
[MongoDB] Replication / Replica Sets Part 1. (2) | 2014.03.27 |
[MongoDB] Replication / Master-Slave Replication (0) | 2014.03.26 |