美文网首页
mongodb副本集部署

mongodb副本集部署

作者: 看五年前自己的文章真是唏嘘不已 | 来源:发表于2018-11-10 05:24 被阅读0次

本文演示在1台服务器上部署3节点的Replica Sets,配置信息如下图所示。


配置

分别创建3个节点各自的数据文件存储路径。
如下面的代码所示:

[root@localhost~]#mkdir-p/data/data/r0
[root@localhost~]#mkdir-p/data/data/r1
[root@localhost~]#mkdir-p/data/data/r2

以上代码创建3个目录,其中SERVER-1使用"/data/data/r0"目录存储数据文件,SERVER-2使用"/data/data/r1"目录存储数据文件,SERVER-3使用"/data/data/r2"目录存储数据文件,具体如表11-1中“数据文件存储路径”部分所示。

创建日志文件存储路径。
如下面的代码所示:

[root@localhost~]#mkdir-p/data/log

在本例中,创建"/data/log"目录用于存储3个节点的系统日志文件,具体如表11-1中“日志文件存储路径”部分所示。

创建复制集key文件存储路径。
key文件用于标识同一复制集的私钥,如果3个节点的key文件内容不一致,复制集将不能正常使用。如下面的代码所示:

[root@localhost~]#mkdir-p/data/key
[root@localhost~]#echo"this is rs1 super secret key">/data/key/r0
[root@localhost~]#echo"this is rs1 super secret key">/data/key/r1
[root@localhost~]#echo"this is rs1 super secret key">/data/key/r2
[root@localhost~]#chmod 600/data/key/r*

以上代码创建3个文件用于存储复制集的key信息,其中SERVER-1使用"/data/key/r0" key文件,SERVER-2使用"/data/key/r1" key文件,SERVER-3使用"/data/key/r2" key文件,具体如表11-1中“复制集key文件”部分所示。

启动3个MongoDB实例来模拟3个节点。
如下面的代码所示:

[root@localhost~]#/Apps/mongo/bin/mongod--replSet rs1--keyFile
/data/key/r0--fork--port 28010--dbpath/data/data/r0--
logpath=/data/log/r0.log--logappend
all output going to:/data/log/r0.log
forked process:6573
[root@localhost~]#/Apps/mongo/bin/mongod--replSet rs1--keyFile
/data/key/r1--fork--port 28011--dbpath/data/data/r1--
logpath=/data/log/r1.log--logappend
all output going to:/data/log/r1.log
forked process:6580
[root@localhost~]#/Apps/mongo/bin/mongod--replSet rs1--keyFile
/data/key/r2--fork--port 28012--dbpath/data/data/r2--
logpath=/data/log/r2.log--logappend
all output going to:/data/log/r2.log
forked process:6585
[root@localhost~]#

在本例中,启动3个MongoDB实例来模拟3个节点,通过执行以下命令来启动MongoDB实例,模拟SERVER-1节点:

28010--dbpath/data/data/r0--logpath=/data/log/r0.log--logappend

参数说明:
replSet:指明复制集的名称。本例的取值是"rs1",其他的节点也必须起这个名字才能保证3个节点间的连通性。
keyFile:复制集key文件的路径,对于本例它的取值是"/data/key/r0",其他的节点也必须起这个名字才能保证3个节点间的连通性。
fork:将命令放在后台执行。
port:MongoDB的监听端口,用于接收客户端请求。
dbpath:数据文件存储路径。
logpath:系统日志文件存放的位置。
logappend:明确指明日志的写入模式是追加,而非覆盖方式。
另外两个节点的配置与SERVER-1类似。

配置节点信息,并初始化Replica Sets环境。
如下面的代码所示:

[root@localhost bin]#/Apps/mongo/bin/mongo-port 28010
MongoDB shell version:1.8.1
connecting to:127.0.0.1:28010/test
>config_rs1={_id:'rs1',members:[
...{_id:0,host:'localhost:28010'},
...{_id:1,host:'localhost:28011'},
...{_id:2,host:'localhost:28012'}]
...

}
>rs.initiate(config_rs1);
{
"info":"Config now saved locally.Should come online in about a minute.",
"ok":1
}

在本例中,首先通过执行"/Apps/mongo/bin/mongo-port 28010"命令连接到SERVER-1实例;然后通过执行"config_rs1={_id:'rs1',members:……}"命令来命名Replica Sets配置的名字,指定Replica Sets 3个节点的信息。其中,参数"id"指明Replica Sets的名字,本例的值是"rs1"。接下来通过执行"rs.initiate(config_rs1)"命令启动Replica Sets,其中参数"config_rs1"就是Replica Sets配置的名字。

配置Replica Sets时需要注意priority(优先级)的概念。当priority=0时,说明这个实例永远不可能被设置成primary。也就是说,它只能作为一个slave而存在,即使在主库当机的情况下,它也不能被选为主库。这种方式其实与最原始的Master-Slave方式是一致的。例如下面的配置中,将28010和28012这两个端口的实例优先级调成0,系统就只能选28011作为主库,如下面的代码所示(加粗部分):

config_rs1={_id:'rs1',members:[
{_id:0,host:'localhost:28010',priority:0},
{_id:1,host:'localhost:28011'},
{_id:2,host:'localhost:28012',priority:0}]
}
这样的设置在某些场景中还是非常有实际应用价值的。
启动复制集
复制集启动后,可以通过查看复制集状态,分析复制集的各项运行指标。如下面的代码所示:

>rs.status()
{
"set":"rs1",
"date":ISODate("2012-05-31T09:49:57Z"),
"myState":1,
"members":[
{
"_id":0,
"name":"localhost:28010",
"health":1,
//1表明状态正常;0表明状态异常
"state":1,
//1表明是primary;2表明是slave
"stateStr":"PRIMARY",//表明此机器是主库
"optime":{
"t":1338457763000,
"i":1
},
"optimeDate":ISODate("2012-05-31T09:49:23Z"),
"self":true
},
{
"_id":1,
"name":"localhost:28011",
"health":1,
"state":2,
"stateStr":"SECONDARY",
"uptime":23,
"optime":{
"t":1338457763000,
"i":1
},
"optimeDate":ISODate("2012-05-31T09:49:23Z"),
"lastHeartbeat":ISODate("2012-05-31T09:49:56Z")
},
{
"_id":2,
"name":"localhost:28012",
"health":1,
"state":2,
"stateStr":"SECONDARY",
"uptime":23,
"optime":{
"t":1338457763000,
"i":1
},
"optimeDate":ISODate("2012-05-31T09:49:23Z"),
"lastHeartbeat":ISODate("2012-05-31T09:49:56Z")
}
],
"ok":1
}
rs1:PRIMARY>

在本例中,通过执行"rs.status"命令可以查看复制集中各成员节点的状态。其中,字段"health"是实例正常与否的标记,“1”代表状态正常,“0”代表状态异常;字段"state"用于表明实例在复制集中充当的角色,“1”代表primary,“0”代表slave;字段"stateStr"进一步用文字描述了此实例在复制集中的角色,本例中的值是"PRIMARY"。

除了用"rs.status"命令可以查看复制集中各成员节点的状态之外,还可以用"isMaster"命令查看Replica Sets状态,如下面的代码所示:

rs1:PRIMARY>rs.isMaster()
{
"setName":"rs1",
"ismaster":true,
"secondary":false,
"hosts":[
"localhost:28010",
"localhost:28012",
"localhost:28011"
],
"maxBsonObjectSize":16777216,
"ok":1
}
rs1:PRIMARY>

字段说明:
setName:指明复制集的名称,本例中的取值是"rs1"。
ismaster:指明当前连接的实例是否是primary角色。它是一个布尔类型:"true"说明此实例是primary角色,"false"说明此实例不是primary角色。
secondary:指明当前连接的实例是否是slave角色。它是一个布尔类型:"true"说明此实例是slave角色,"false"说明此实例不是slave角色。
hosts:指明Replica Sets各成员IP及端口信息。
ok:表明复制集的状态。“1”说明状态正常,“0”说明状态异常。

相关文章

  • mongo4.0复制集

    MongoDB中的副本集是一组维护相同数据集的mongod进程。副本集提供冗余和高可用性,是所有生产部署的基础。本...

  • MongoDB复制集

    1、MongoDB复制集(副本集)简介 复制集模式(replicaSet mode),也叫副本集模式,指两个及以上...

  • MongoDB副本集群部署

    MongoDB副本集群部署 1、MongoDB单机版的安装 提前准备MongoDB安装包 添加环境变量 常用命令 ...

  • MongoDB - 副本集

    Docker部署MongoDB副本集 1.创建docker桥接网络 2.启动3个MongoDB实例,注意要指定上一...

  • springboot mongodb事务处理

    mongodb事务控制不能在单点模式下进行,需要在副本集环境下进行事务处理。docker 下部署mongo副本集,...

  • 1.副本集-Replica Sets

    1.1 简介 MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。 副本集可...

  • mongodb副本集部署

    本文演示在1台服务器上部署3节点的Replica Sets,配置信息如下图所示。 分别创建3个节点各自的数据文件存...

  • MongoDB 副本集部署

    1、配置 hosts 2、修改 /etc/mongod.conf,以 10.3.20.14 为例,其他两台配置类似...

  • Mongodb副本集部署

    相关知识 MongoDB 的主从复制至少需要两个服务器或者节点。其中一个是主节点,负责处理客户端请求,其它的都是从...

  • MongoDB创建多节点实例实现高可用服务 (上)

    概述 MongoDB 的副本集(replica set)是一组维护同一份数据集的 mongod 进程。副本集保障了...

网友评论

      本文标题:mongodb副本集部署

      本文链接:https://www.haomeiwen.com/subject/hpnaxqtx.html