MongoDB:搭建三节点 Replica Set 环境

今天学习了搭建 MongDB 复制环境,实验环境是在虚拟机上同一系统,并搭建三节点 Replica Set,根据文档上的描述,mongodb 复制配置简单,并能够自动 failover,这些高级特性以后再实验,这里仅 描述配置过程:

一 环境信息

虚拟机: Red Hat Enterprise Linux Server release 6.2
主机名: redhatB.example.com
MongoDB 版本:v2.2.1

节点端口数据目录
主结点27018/mongodb/data01
从节点一27019/mongodb/data02
从节点二27020/mongodb/data03

二 搭建步骤

2.1 创建数据目录

1
2
3
[mongo@redhatB mongodb]$ mkdir -p /mongodb/data01  
[mongo@redhatB mongodb]$ mkdir -p /mongodb/data02
[mongo@redhatB mongodb]$ mkdir -p /mongodb/data03

备注:三个目录分别为三个节点数据目录,并设置好目录权限。

2.2 创建配置文件
2.2.1 主节点配置文件

1
2
3
4
5
6
7
touch /mongodb/data01/mongodb_27018.conf, 写入以下:
fork = true
port = 27018
dbpath = /mongodb/data01
logpath = /mongodb/data01/mongo.log
logappend = true
replSet = rs0

2.2.2 从节点一配置

1
2
3
4
5
6
7
touch /mongodb/data02/mongodb_27019.conf, 写入以下:
fork = true
port = 27019
dbpath = /mongodb/data02
logpath = /mongodb/data02/mongo.log
logappend = true
replSet = rs0

2.2.3 从节点二配置

1
2
3
4
5
6
7
touch /mongodb/data03/mongodb_27020.conf, 写入以下:
fork = true
port = 27020
dbpath = /mongodb/data03
logpath = /mongodb/data03/mongo.log
logappend = true
replSet = rs0

2.3 启动主从节点

1
2
3
mongod -f /mongodb/data01/mongodb_27018.conf  
mongod -f /mongodb/data02/mongodb_27019.conf
mongod -f /mongodb/data03/mongodb_27020.conf

2.4 初始化 Replica Sets
2.4.1 登陆结点一初始化

1
2
3
4
5
6
7
8
9
[mongo@redhatB mongodb]$ mongo 127.0.0.1:27018  
MongoDB shell version: 2.2.1
connecting to: 127.0.0.1:27018/test
> rs.inirs.initiate();{
"info2" : "no configuration explicitly specified -- making one",
"me" : "redhatB.example.com:27018",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}

备注:使用的是默认配置。

2.5 查看 Replica Sets 配置

1
2
3
4
5
6
7
8
9
10
11
> rs.conf();  
{
"_id" : "rs0",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "redhatB.example.com:27018"
}
]
}

备注:只能看到一个节点信息;

2.6 增加从节点

1
2
3
4
5
rs0:PRIMARY> rs.add("redhatB.example.com:27019");  
{ "ok" : 1 }
rs0:PRIMARY> rs.add("redhatB.example.com:27020");
{ "ok" : 1 }
rs0:PRIMARY>

2.7 再次查看 Replica Sets 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
rs0:PRIMARY> rs.conf();{  
"_id" : "rs0",
"version" : 3,
"members" : [
{
"_id" : 0,
"host" : "redhatB.example.com:27018"
},
{
"_id" : 1,
"host" : "redhatB.example.com:27019"
},
{
"_id" : 2,
"host" : "redhatB.example.com:27020"
}
]
}

备注:这时已经能看到三个节点信息。

2.8 查看 Replica Sets 状态

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
rs0:PRIMARY> rs.status();  
{
"set" : "rs0",
"date" : ISODate("2012-11-22T08:43:21Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "redhatB.example.com:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2445,
"optime" : Timestamp(1353573735000, 1),
"optimeDate" : ISODate("2012-11-22T08:42:15Z"),
"self" : true
},
{
"_id" : 1,
"name" : "redhatB.example.com:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 74,
"optime" : Timestamp(1353573735000, 1),
"optimeDate" : ISODate("2012-11-22T08:42:15Z"),
"lastHeartbeat" : ISODate("2012-11-22T08:43:21Z"),
"pingMs" : 0
},
{
"_id" : 2,
"name" : "redhatB.example.com:27020",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 66,
"optime" : Timestamp(1353573735000, 1),
"optimeDate" : ISODate("2012-11-22T08:42:15Z"),
"lastHeartbeat" : ISODate("2012-11-22T08:43:19Z"),
"pingMs" : 0
}
],
"ok" : 1
}

备注:rs.status() 命令可以显示节点状态具体信息。

三 测试

3.1 登陆主节点

1
2
3
4
5
6
[mongo@redhatB mongodb]$ mongo 127.0.0.1:27018  
MongoDB shell version: 2.2.1
connecting to: 127.0.0.1:27018/test
rs0:PRIMARY> db.test_1.save({id:1});
rs0:PRIMARY> db.test_1.find();
{ "_id" : ObjectId("50ade66efabbde9e747577b1"), "id" : 1 }

备注:主节点可以读写;

3.2 登陆从节点一

1
2
3
4
5
6
7
8
9
[mongo@redhatB mongodb]$ mongo 127.0.0.1:27019  
MongoDB shell version: 2.2.1
connecting to: 127.0.0.1:27019/test
rs0:SECONDARY> show dbs;show dbs;
local 0.125GB
test 0.0625GB
rs0:SECONDARY> show collections;
Thu Nov 22 16:48:15 uncaught exception: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
rs0:SECONDARY>

备注:从节点不可读写,但能看到主库创建的集合,从库需要使用 rs.slaveOk() 命令开启只读。

3.3 开启从库只读模式

1
2
3
4
5
6
7
8
9
10
11
[mongo@redhatB mongodb]$ mongo 127.0.0.1:27019  
MongoDB shell version: 2.2.1
connecting to: 127.0.0.1:27019/test
rs0:SECONDARY> rs.slaveOk();
rs0:SECONDARY> show collections;
system.indexes
test_1
rs0:SECONDARY> db.test_1.find();
{ "_id" : ObjectId("50ade66efabbde9e747577b1"), "id" : 1 }
rs0:SECONDARY> db.test_1.save({id:2});db.
not master

备注:这时从库可读了(不可写),同理设置从库二。 到了这里,三节点 Replica Sets 环境已经全部搭建好了,步骤比较简单。

四 参考

http://docs.mongodb.org/manual/core/replication/
http://docs.mongodb.org/manual/tutorial/deploy-replica-set/
http://docs.mongodb.org/manual/reference/javascript/#rs.initiate

原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/237921.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论