`
ihuangweiwei
  • 浏览: 266714 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MongoDB副本集

阅读更多

一、节点类型

standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为活跃节点。
passive:存储了完整的数据副本,参与投票,不能成为活跃节点。
arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为活跃节点。

 

二、参数说明

--dbpath   数据文件路径
--logpath  日志文件路径
--port        端口号,默认是27017.我这里使用的也是这个端口号.
--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.
--replSet   这个后面跟的是其他standard节点的ip和端口
--maxConns   最大连接数
--fork       后台运行
--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

 

三、创建副本集

环境说明:

ip:10.0.0.3
ip:10.0.0.4
ip:10.0.0.5

 启动第一个standard节点(ip:10.0.0.3)

 

hww@ubuntu:~$ mkdir -p ~/mongo/db ~/mongo/log
hww@ubuntu:~$ mongod -dbpath ~/mongo/db -logpath ~/mongo/log/mongod.log -port 27037 -replSet test -maxConns=2000 -fork -logappend

 

启动第一个standard节点(ip:10.0.0.4)

hww@ubuntu:~$ mkdir -p ~/mongo/db ~/mongo/log
hww@ubuntu:~$ mongod -dbpath ~/mongo/db -logpath ~/mongo/log/mongod.log -port 27037 -replSet test -maxConns=2000 -fork -logappend

 

启动arbiter节点,也就是仲裁节点 (ip:10.0.0.5)

hww@ubuntu:~$ mkdir -p ~/mongo/db ~/mongo/log
hww@ubuntu:~$ mongod -dbpath ~/mongo/db -logpath ~/mongo/log/mongod.log -port 27037 -replSet test -maxConns=2000 -fork -logappend

 

启动了以上服务器后,日志告诉你副本集没有初始化。因为还差最后一步:在shell中初始化副本集。

连接其中一台standard节点服务器。初始化命令只能执行一次

hww@ubuntu:~$ mongo 10.0.0.3:27037/admin
MongoDB shell version: 2.0.1
connecting to: 10.0.0.3:27037/admin
> db.runCommand({"replSetInitiate" : {
...     "_id" : "test",
...     "members" : [
...     {
...     "_id" : 0,
...     "host" : "10.0.0.3:27037"
...     },
...     {
...     "_id" : 1,
...     "host" : "10.0.0.4:27037"
...     }
...     ]}})
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}




> 

执行以下shell命令后,如果看见红色字体标记的内容,则表示初始化成功




  shell命令:

db.runCommand({"replSetInitiate" : {
    "_id" : "test",
    "members" : [
    {
    "_id" : 0,
    "host" : "10.0.0.3:27037"
    },
    {
    "_id" : 1,
    "host" : "10.0.0.4:27037"
    }
    ]}})

你也可以通过命令查看效果:

> rs.status()
{
        "set" : "test",
        "date" : ISODate("2011-12-06T07:44:29Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "10.0.0.3:27037",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "optime" : {
                                "t" : 1323157008000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2011-12-06T07:36:48Z"),
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "10.0.0.4:27037",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 455,
                        "optime" : {
                                "t" : 1323157008000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2011-12-06T07:36:48Z"),
                        "lastHeartbeat" : ISODate("2011-12-06T07:44:28Z"),
                        "pingMs" : 2
                }
        ],
        "ok" : 1
}

 

加入仲裁节点

执行以下命令:

 

PRIMARY> rs.addArb("10.0.0.5:27037");
{ "ok" : 1 }
 

我们可以再次查看当前状态:

PRIMARY> rs.status()
{
        "set" : "test",
        "date" : ISODate("2011-12-06T07:46:21Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "10.0.0.3:27037",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "optime" : {
                                "t" : 1323157549000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2011-12-06T07:45:49Z"),
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "10.0.0.4:27037",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 567,
                        "optime" : {PRIMARY> db.isMaster();
{
        "setName" : "test",
        "ismaster" : true,
        "secondary" : false,
        "hosts" : [
                "10.0.0.3:27037",
                "10.0.0.4:27037"
        ],
        "arbiters" : [
                "10.0.0.5:27037"
        ],
        "primary" : "10.0.0.3:27037",
        "me" : "10.0.0.3:27037",
        "maxBsonObjectSize" : 16777216,
        "ok" : 1
}
 
                                "t" : 1323157549000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2011-12-06T07:45:49Z"),
                        "lastHeartbeat" : ISODate("2011-12-06T07:46:20Z"),
                        "pingMs" : 0
                },
                {
                        "_id" : 2,
                        "name" : "10.0.0.5:27037",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 22,
                        "optime" : {
                                "t" : 0,
                                "i" : 0
                        },
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2011-12-06T07:46:19Z"),
                        "pingMs" : 0
                }
        ],
        "ok" : 1
}

   rs.status()通过这个命令,可以查看各个节点的ip、角色已经是否正常

   我们看到已经成功配置。

 

查看活跃节点:

PRIMARY> db.isMaster();
{
        "setName" : "test",
        "ismaster" : true,
        "secondary" : false,
        "hosts" : [
                "10.0.0.3:27037",
                "10.0.0.4:27037"
        ],
        "arbiters" : [
                "10.0.0.5:27037"
        ],
        "primary" : "10.0.0.3:27037",
        "me" : "10.0.0.3:27037",
        "maxBsonObjectSize" : 16777216,
        "ok" : 1
}
 

   可以看到现在10.0.0.3:27037为活跃节点。

 

检测是否配置成功

   可以强制primary和standard节点角色互换,从而验证是否能够实现副本集功能

 

rs.stepDown()

 

   执行完成后:

 

SECONDARY> db.isMaster();
{
        "setName" : "test",
        "ismaster" : false,
        "secondary" : true,
        "hosts" : [
                "10.0.0.3:27037",
                "10.0.0.4:27037"
        ],
        "arbiters" : [
                "10.0.0.5:27037"
        ],
        "primary" : "10.0.0.4:27037",
        "me" : "10.0.0.3:27037",
        "maxBsonObjectSize" : 16777216,
        "ok" : 1
}

   可以看到现在主节点已经修改为10.0.0.4:27037了。

 

 我们也可以动态扩展增加节点(ip:10.0.0.5:27047)

 

hww@ubuntu:~$ mkdir -p ~/mongo1/db ~/mongo1/log
hww@ubuntu:~$ mongod -dbpath ~/mongo1/db -logpath ~/mongo1/log/mongod.log -port 27037 -replSet test -maxConns=2000 -fork -logappend
 

  进入活跃节点的服务器

 

hww@ubuntu4:~$ mongo 10.0.0.4:27037/admin
MongoDB shell version: 2.0.1
connecting to: 10.0.0.4:27037/admin
PRIMARY> rs.add("10.0.0.5:27047");
{ "ok" : 1 }
PRIMARY> 
 
PRIMARY> rs.status()
{
        "set" : "test",
        "date" : ISODate("2011-12-06T07:59:36Z"),
        "myState" : 1,
        "syncingTo" : "10.0.0.3:27037",
        "members" : [
                {
                        "_id" : 0,
                        "name" : "10.0.0.3:27037",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1263,
                        "optime" : {
                                "t" : 1323158245000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2011-12-06T07:57:25Z"),
                        "lastHeartbeat" : ISODate("2011-12-06T07:59:35Z"),
                        "pingMs" : 0
                },
                {
                        "_id" : 1,
                        "name" : "10.0.0.4:27037",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "optime" : {
                                "t" : 1323158245000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2011-12-06T07:57:25Z"),
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "10.0.0.5:27037",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 717,
                        "optime" : {
                                "t" : 0,
                                "i" : 0
                        },
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2011-12-06T07:59:35Z"),
                        "pingMs" : 0
                },
                {
                        "_id" : 3,
                        "name" : "10.0.0.5:27047",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 125,
                        "optime" : {
                                "t" : 1323158245000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2011-12-06T07:57:25Z"),
                        "lastHeartbeat" : ISODate("2011-12-06T07:59:35Z"),
                        "pingMs" : 0
                }
        ],
        "ok" : 1
}

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    mongodb副本集搭建

    MongoDB 副本集搭建 MongoDB 副本集搭建是 MongoDB 的高可用性解决方案之一,它可以提供数据的冗余存储和自动故障转移,确保数据的高可用性和可靠性。下面将详细介绍 MongoDB 副本集搭建的步骤和过程。 一、安装...

    MongoDB副本集搭建及运维.txt

    MongoDB副本集搭建及运维

    mongodb 副本集php文件样例,php连接mongodb

    mongodb 副本集php文件样例,php连接mongodb

    MongoDB搭建副本集教程

    MongoDB 副本集搭建教程 MongoDB 副本集是 MongoDB 中的一种高可用性解决方案,它可以提供高性能、可扩展性和高可用性。通过搭建副本集,用户可以确保数据的安全和高可用性。 一、 MongoDB 副本集环境搭建攻略 1....

    linux mongodb副本集负载均衡部署完成

    技术:mongodb集群 副本集 说明包含: MongoDB集群负载均衡资料 mongodb安装包 MongoDB集群主从复制部署帮助文档 MongoDB集群主从复制使用帮助文档 MongoDB集群主从复制遇到问题解决文档 mongodb网页资料 ...

    MongoDB副本集配置和数据迁移实战

    MongoDB 的副本集(Replica Set)就是有自动故障恢复功能的 MongoDB 主从集群。由于 MongoDB 的主从复制功能不支持高可用,所以从 3.2 版本开始已经被废弃了,转而用副本集来代替实现数据复制的功能。一个副本集总会...

    mongodb设置副本集

    在Linux环境下设置MongoDB副本集,首先需要创建存储数据的目录。例如,我们创建两个目录 `/data/dbs/node1` 和 `/data/dbs/node2`,分别用于存放两个节点的数据文件。 接着,我们需要启动两个MongoDB服务,每个服务...

    MongoDB副本集设置.pdf

    ### MongoDB副本集设置详解 #### 一、MongoDB副本集概念 MongoDB副本集是一种用于提供高可用性和数据冗余的部署方式。它由多个MongoDB实例组成,其中包括一个主节点(Primary)和一个或多个从节点(Secondary)。在...

    MongoDB副本集.pdf

    副本集是 MongoDB 提供的一种高可用性和数据冗余的解决方案,它允许多个 MongoDB 实例同步数据,以实现故障转移和读写分离。本篇文章将深入探讨 MongoDB 副本集的相关知识。 首先,我们来理解如何启动一个副本集。...

    MongoDB集群负载均衡资料(mongodb副本集)

    提供的"MongoDB集群负载均衡资料"应该包含详细的部署文档,指导如何设置和管理MongoDB副本集;使用文档会介绍如何有效利用副本集特性进行数据操作;问题解决文档则可以帮助用户在遇到问题时找到解决方案。 总结来说...

    mongodb副本集+权限

    MongoDB副本集由一组MongoDB服务器构成,其中一个服务器作为主节点(primary),其他服务器作为从节点(secondary)。副本集还需要一个仲裁节点(arbiter),其作用是参与投票,但不保存数据副本。在Linux环境下部署...

    MongoDB副本集搭建

    MongoDB副本集搭建课件

    K8s 部署 MongoDB(副本集)

    MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。 副本集可提供冗余和高可用性,是所有生产部署的基础。也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一...

    mongodb副本集加分片集群安全认证使用账号密码登录

    mongodb副本集加分片集群安全认证使用账号密码登录

    MongoDB副本集部署(Windows)

    通过以上步骤,你可以在Windows环境中成功部署一个MongoDB副本集,实现数据的高可用性和容错性。在实际生产环境中,还需要考虑网络架构、负载均衡、备份策略等多方面因素,以构建更健壮的数据库系统。

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set) k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 ...

    win10环境配置mongodb副本集

    cz老师的任务罢了。win10环境配置mongodb副本集,1主1仆1只狗

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

Global site tag (gtag.js) - Google Analytics