MongoDB基础之九 replication复制集

准备工作:创建目录

1 mkdir -p /home/m17 //home/m18 /home/m19 /home/mlog

1:启动3个实例,且声明实例属于某复制集

1 # ./bin/mongod --dbpath /home/m17 --logpath /home/mlog/m17.log --fork --port 27017 --replSet rs2 --smallfiles
2 # ./bin/mongod --dbpath /home/m18 --logpath /home/mlog/m18.log --fork --port 27018 --replSet rs2 --smallfiles
3 # ./bin/mongod --dbpath /home/m19 --logpath /home/mlog/m19.log --fork --port 27019 --replSet rs2 --smallfiles

注:--smallfiles 最小文件创建实例   

2:配置复制级

 1 var rsconf = {
 2 _id:'rs2',
 3 members:
 4 [
 5 {_id:0,
 6 host:'127.0.0.1:27017'
 7 },
 8 {_id:1,
 9 host:'127.0.0.1:27018'
10 },
11 {_id:2,
12 host:'127.0.0.1:27019'
13 } 
14 
15 ]
16 }
 1 > printjson(rsconf)
 2 {
 3 "_id" : "rs2",
 4 "members" : [
 5 {
 6 "_id" : 0,
 7 "host" : "127.0.0.1:27017"
 8 },
 9 {
10 "_id" : 1,
11 "host" : "127.0.0.1:27018"
12 },
13 {
14 "_id" : 2,
15 "host" : "127.0.0.1:27019"
16 }
17 ]
18 }

3: 根据配置做初始化

 1 > rs.initiate(rsconf)
 2 ;
 3 {
 4 "info" : "Config now saved locally. Should come online in about a minute.",
 5 "ok" : 1
 6 }
 7 rs2:SECONDARY> rs.status();
 8 {
 9 "set" : "rs2",
10 "date" : ISODate("2016-05-26T00:43:57Z"),
11 "myState" : 2,
12 "members" : [
13 {
14 "_id" : 0,
15 "name" : "127.0.0.1:27017",
16 "health" : 1,
17 "state" : 2,
18 "stateStr" : "SECONDARY",
19 "uptime" : 1183,
20 "optime" : Timestamp(1464223391, 1),
21 "optimeDate" : ISODate("2016-05-26T00:43:11Z"),
22 "self" : true
23 },
24 {
25 "_id" : 1,
26 "name" : "127.0.0.1:27018",
27 "health" : 1,
28 "state" : 5,
29 "stateStr" : "STARTUP2",
30 "uptime" : 46,
31 "optime" : Timestamp(0, 0),
32 "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
33 "lastHeartbeat" : ISODate("2016-05-26T00:43:54Z"),
34 "lastHeartbeatRecv" : ISODate("2016-05-26T00:43:52Z"),
35 "pingMs" : 189
36 },
37 {
38 "_id" : 2,
39 "name" : "127.0.0.1:27019",
40 "health" : 1,
41 "state" : 5,
42 "stateStr" : "STARTUP2",
43 "uptime" : 46,
44 "optime" : Timestamp(0, 0),
45 "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
46 "lastHeartbeat" : ISODate("2016-05-26T00:43:44Z"),
47 "lastHeartbeatRecv" : ISODate("2016-05-26T00:43:53Z"),
48 "pingMs" : 0
49 }
50 ],
51 "ok" : 1
52 }
View Code

4: 添加节点

 1 rs2:PRIMARY> rs.add('127.0.0.1:27018')
 2 { "down" : [ "127.0.0.1:27018" ], "ok" : 1 }
 3 rs2:PRIMARY> rs.status
 4 function () { return db._adminCommand("replSetGetStatus"); }
 5 rs2:PRIMARY> rs.status()
 6 {
 7 "set" : "rs2",
 8 "date" : ISODate("2016-05-26T00:51:01Z"),
 9 "myState" : 1,
10 "members" : [
11 {
12 "_id" : 0,
13 "name" : "127.0.0.1:27017",
14 "health" : 1,
15 "state" : 1,
16 "stateStr" : "PRIMARY",
17 "uptime" : 1607,
18 "optime" : Timestamp(1464223853, 1),
19 "optimeDate" : ISODate("2016-05-26T00:50:53Z"),
20 "self" : true
21 },
22 {
23 "_id" : 2,
24 "name" : "127.0.0.1:27019",
25 "health" : 1,
26 "state" : 2,
27 "stateStr" : "SECONDARY",
28 "uptime" : 85,
29 "optime" : Timestamp(1464223853, 1),
30 "optimeDate" : ISODate("2016-05-26T00:50:53Z"),
31 "lastHeartbeat" : ISODate("2016-05-26T00:51:00Z"),
32 "lastHeartbeatRecv" : ISODate("2016-05-26T00:50:59Z"),
33 "pingMs" : 0,
34 "lastHeartbeatMessage" : "syncing to: 127.0.0.1:27017",
35 "syncingTo" : "127.0.0.1:27017"
36 },
37 {
38 "_id" : 3,
39 "name" : "127.0.0.1:27018",
40 "health" : 1,
41 "state" : 2,
42 "stateStr" : "SECONDARY",
43 "uptime" : 8,
44 "optime" : Timestamp(1464223853, 1),
45 "optimeDate" : ISODate("2016-05-26T00:50:53Z"),
46 "lastHeartbeat" : ISODate("2016-05-26T00:50:59Z"),
47 "lastHeartbeatRecv" : ISODate("2016-05-26T00:51:00Z"),
48 "pingMs" : 0,
49 "lastHeartbeatMessage" : "syncing to: 127.0.0.1:27017",
50 "syncingTo" : "127.0.0.1:27017"
51 }
52 ],
53 "ok" : 1
54 }
View Code

5:查看状态

1 rs.status();

6:删除节点

 1 rs2:PRIMARY> rs.remove('127.0.0.1:27018');
 2 Thu May 26 08:49:36.621 DBClientCursor::init call() failed
 3 Thu May 26 08:49:36.621 Error: error doing query: failed at src/mongo/shell/query.js:78
 4 Thu May 26 08:49:36.622 trying reconnect to 127.0.0.1:27017
 5 Thu May 26 08:49:36.622 reconnect 127.0.0.1:27017 ok
 6 rs2:PRIMARY> rs.status();
 7 {
 8 "set" : "rs2",
 9 "date" : ISODate("2016-05-26T00:49:38Z"),
10 "myState" : 1,
11 "members" : [
12 {
13 "_id" : 0,
14 "name" : "127.0.0.1:27017",
15 "health" : 1,
16 "state" : 1,
17 "stateStr" : "PRIMARY",
18 "uptime" : 1524,
19 "optime" : Timestamp(1464223776, 1),
20 "optimeDate" : ISODate("2016-05-26T00:49:36Z"),
21 "self" : true
22 },
23 {
24 "_id" : 2,
25 "name" : "127.0.0.1:27019",
26 "health" : 1,
27 "state" : 2,
28 "stateStr" : "SECONDARY",
29 "uptime" : 2,
30 "optime" : Timestamp(1464223776, 1),
31 "optimeDate" : ISODate("2016-05-26T00:49:36Z"),
32 "lastHeartbeat" : ISODate("2016-05-26T00:49:38Z"),
33 "lastHeartbeatRecv" : ISODate("2016-05-26T00:49:37Z"),
34 "pingMs" : 0,
35 "lastHeartbeatMessage" : "syncing to: 127.0.0.1:27017",
36 "syncingTo" : "127.0.0.1:27017"
37 }
38 ],
39 "ok" : 1
40 }
View Code

7:主节点插入数据

 1 rs2:PRIMARY> show dbs
 2 local 4.029296875GB
 3 rs2:PRIMARY> 
 4 rs2:PRIMARY> 
 5 rs2:PRIMARY> use test
 6 switched to db test
 7 rs2:PRIMARY> 
 8 rs2:PRIMARY> db.stu.insert({title:'hello'});
 9 rs2:PRIMARY> 
10 rs2:PRIMARY> 
11 rs2:PRIMARY> show tables;
12 stu
13 system.indexes
View Code

8:连接secondary查询同步情况

1 # ./bin/mongo -port 27019
2 MongoDB shell version: 2.4.9
3 connecting to: 127.0.0.1:27019/test
4 rs2:SECONDARY> use test
5 switched to db test
6 rs2:SECONDARY> show tables
7 Thu May 26 08:59:57.272 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:128

8.1 出现上述错误,是因为slave默认不许读写

1 rs2:SECONDARY> rs.slaveOk();
2 rs2:SECONDARY> show tables
3 stu
4 system.indexes
5 rs2:SECONDARY> db.stu.find();
6 { "_id" : ObjectId("57464a73c79dad862e06cd3b"), "title" : "hello" }

#看到与primary 一致的数据

 9 主节点down机器 ,primary节点自动漂移

 1 rs2:PRIMARY> use admin
 2 switched to db admin
 3 rs2:PRIMARY> db.shutdownServer();
 4 Thu May 26 09:19:33.316 DBClientCursor::init call() failed
 5 
 6 
 7 rs2:SECONDARY> rs.status()
 8 {
 9 "set" : "rs2",
10 "date" : ISODate("2016-05-26T01:19:38Z"),
11 "myState" : 2,
12 "syncingTo" : "127.0.0.1:27018",
13 "members" : [
14 {
15 "_id" : 0,
16 "name" : "127.0.0.1:27017",
17 "health" : 0,
18 "state" : 8,
19 "stateStr" : "(not reachable/healthy)",
20 "uptime" : 0,
21 "optime" : Timestamp(1464224372, 1),
22 "optimeDate" : ISODate("2016-05-26T00:59:32Z"),
23 "lastHeartbeat" : ISODate("2016-05-26T01:19:38Z"),
24 "lastHeartbeatRecv" : ISODate("2016-05-26T01:19:33Z"),
25 "pingMs" : 0
26 },
27 {
28 "_id" : 2,
29 "name" : "127.0.0.1:27019",
30 "health" : 1,
31 "state" : 2,
32 "stateStr" : "SECONDARY",
33 "uptime" : 3195,
34 "optime" : Timestamp(1464224372, 1),
35 "optimeDate" : ISODate("2016-05-26T00:59:32Z"),
36 "errmsg" : "syncing to: 127.0.0.1:27018",
37 "self" : true
38 },
39 {
40 "_id" : 3,
41 "name" : "127.0.0.1:27018",
42 "health" : 1,
43 "state" : 1,
44 "stateStr" : "PRIMARY",
45 "uptime" : 1725,
46 "optime" : Timestamp(1464224372, 1),
47 "optimeDate" : ISODate("2016-05-26T00:59:32Z"),
48 "lastHeartbeat" : ISODate("2016-05-26T01:19:38Z"),
49 "lastHeartbeatRecv" : ISODate("2016-05-26T01:19:36Z"),
50 "pingMs" : 0,
51 "syncingTo" : "127.0.0.1:27017"
52 }
53 ],
54 "ok" : 1
55 }
56 
57  
原文地址:https://www.cnblogs.com/chinesern/p/5529944.html