阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB集群上副本集(replica set)建立

244次阅读
没有评论

共计 3788 个字符,预计需要花费 10 分钟才能阅读完成。

1 副本集的配置
在单机上成功运行 MongoDB 后,要使用副本集来创建 Mongodb 集群,需要先关闭 mongod 守护进程,然后:

mongod –replSet setname –fork

来使用自己设置的副本集的名字 setname 并启动 mongodb。注意,–fork 可以不用,它的意义是让 mongod 在后台执行,以方便在 shell 中运行别的程序。

如果要在配置文件中使用这些选项,可以在配置文件 mongo.conf 中加入

replSet=setname
fork=true
oplogSize=1024 #日志文件大小,兆 (M) 为单位。mongod 启动时会创建相应大小的文件,如果设定太大会报磁盘空间不足的错误

然后使用 mongod -f mongo.conf 来启动进程

其他选项参见 http://docs.mongodb.org/manual/reference/program/mongod/#cli-mongod-replica-set

2. 启动和增加节点
在各个节点上使用了 1. 中的配置启动后,有两种方法来建立副本集的连接:

1)初始化副本集,增加节点配置
用客户端登陆进入 mongo 使用

rs.initiate()

初始化副本集,等待一段时间(主要是创建日志文件 oplog)后,看到提示符显示 setname:PRIMARY> 也就是成功了,然后:

rs.config()

可以查看副本集的配置状态,比如:

{
        “_id” : “clover”,
        “version” : 5,
        “members” : [
                {
                        “_id” : 0,
                        “host” : “host1:27017”,
                        “arbiterOnly” : false,
                        “buildIndexes” : true,
                        “hidden” : false,
                        “priority” : 1,
                        “tags” : {

                        },
                        “slaveDelay” : 0,
                        “votes” : 1
                }
        ] …

目前只有一个主节点(primary),在确保可以访问另外两个节点的 mongo 服务的情况下,在本机的 mongo shell 中输入:

rs.add(“hostname:port”)

来增加节点,成功后使用:

[html] view plain copy print?rs.status() 

rs.status()来查看副本状态。

2)使用集群配置文档来创建副本集

这个方法我没有验证,如果要利用配置文档,在进入 mongod shell 之后,先要创建一个文档:

config = {
 “_id”  : “setname”,
 “members” : [
  {“_id” : 0, “host” : “host1:port”},
  {“_id” : 1, “host” : “host2:port”},
  {“_id” : 2, “host” : “host3:port”},
  …
 ]
}

然后使用这个文档来启动副本集:

rs.initiate(config)

使用这种方法必须要用 mongo shell 来先创建配置文档,而不能使用配置文件。

3. 测试副本集
首先,使用

rs.isMaster()

得到:

{
        “setName” : “clover”,
        “setVersion” : 7,
        “ismaster” : true,
        “secondary” : false,
        “hosts” : [
                “host1:27017”,
                “host2:27017”,
                “host3:27017”
        ],
        “primary” : “host1:27017”,
        “me” : “host1:27017”,
        “electionId” : ObjectId(“5535c57b872d670c6331e5bf”),
        “maxBsonObjectSize” : 16777216,
        “maxMessageSizeBytes” : 48000000,
        “maxWriteBatchSize” : 1000,
        “localTime” : ISODate(“2015-04-21T05:01:31.370Z”),
        “maxWireVersion” : 3,
        “minWireVersion” : 0,
        “ok” : 1
}

这样来查看主节点和副本集的状态,值得一提的是,备份节点(secondary)如果设置属性 hidden 为 0,则 rs.isMaster()将不能观察到此节点,例如下面的代码:

[html] view plain copy print?cfg=rs.config() #获取当前的配置 
cfg.members[2].priority=0 #让_id 为 2 的节点优先级降为 0 
cfg.members[2].hidden=1 #设置此节点隐藏,仅当其优先级为 0 时有效 
rs.reconfig(cfg) #应用配置 

cfg=rs.config() #获取当前的配置
cfg.members[2].priority=0 #让_id 为 2 的节点优先级降为 0
cfg.members[2].hidden=1 #设置此节点隐藏,仅当其优先级为 0 时有效
rs.reconfig(cfg) #应用配置将_id 为 2 的节点设为隐藏,使得其状态不被 rs.isMaster 看到,但它可以被 rs.status() 看到。

接着,在 mongo shell 插入一个文档:

for(i=0;i<1000;i++){test.coll.insert({count:i})}

db.coll.count() #测试插入文档是否成功

1000

然后检查备份节点上的情况:

new Mongo(“host2:27017”)
db.coll.count()
1000

说明在 host2 上的数据库也更新了。

然后,尝试将 host1 上的 mongod 进程宕掉,这种情况在实际生产中可能出现,查看 host2 和 host3 的情况:

在 host1 的 bash 上:

sudo bin/mongod –shutdown
killing process with pid: 15910

然后登陆 host2 上的 mongo shell,发现提示符已经变为:setname>primary 表示 host2 已经变为主节点,在 host2 上 db.coll.count()得到 1000,表示备份的数据还在。

重新使用之前的集群配置文件来启动 mongod -f mongo.conf,发现提示符为 setname:SECONDARY> 表示其变为备份节点,在 host2 上用 rs.isMaster()测试显示:

  “setName” : “clover”,
        “setVersion” : 9,
        “ismaster” : true,
        “secondary” : false,
        “hosts” : [
                “host1:27017”,
                “host2:27017”
        ],
        “passives” : [
                “host3:27017”
        ],
        “primary” : “host2:27017”,
        “me” : “zookeeper2:27017”,<

副本集重新变为 3 台主机。host2 仍为主节点,host3 因为设置优先级为 0 变为消极(passives)状态,它不会被选为主节点。

更多 MongoDB 相关教程见以下内容

CentOS 编译安装 MongoDB 与 mongoDB 的 php 扩展 http://www.linuxidc.com/Linux/2012-02/53833.htm

CentOS 6 使用 yum 安装 MongoDB 及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htm

Ubuntu 13.04 下安装 MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htm

MongoDB 入门必读(概念与实战并重) http://www.linuxidc.com/Linux/2013-07/87105.htm

Ubunu 14.04 下 MongoDB 的安装指南 http://www.linuxidc.com/Linux/2014-08/105364.htm

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htm

Nagios 监控 MongoDB 分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm

基于 CentOS 6.5 操作系统搭建 MongoDB 服务 http://www.linuxidc.com/Linux/2014-11/108900.htm

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130013.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计3788字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中