shell nginx google 微软 centos apache Windows linux mysql 程序员 Android Ubuntu php 开源 HTML5 linux命令 java Firefox Python wordpress

mongoDB 副本集配置介绍

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。副本集是一组,由N个mongo节点组成并协同工作的,提供自动的故障集群转移。

建立一个副本集需要步骤:

  1. 需要启动每个节点
  2. 然后进行初始化设置。

在这里,我们将配置一组(三个节点),这是标准设置。一旦mongod节点启动,我们将发出一个命令,以正确地初始化设置。几秒钟后,将选举产生一个主节点,你就可以开始写和查询集。

启动节点 (Starting the nodes)

首先,创建每个节点的数据目录。

# mkdir -p /data/r0
# mkdir -p /data/r1
# mkdir -p /data/r2

接下来,使用”mongod.exe --replset” 启动每个mongod进程,”–replset”参数需要你指定一个副本集逻辑名称.这里让我们使用“foo.”作为第一个节点的名称:

启动第一个节点,端口 27018.
mongod.exe --replSet foo --port 27017 --dbpath /data/r0

启动第二个节点,端口 27018.
mongod.exe --replSet foo --port 27018 --dbpath /data/r1

最后,启动第三个节点,端口 27019.
mongod --replSet foo --port 27019 --dbpath /data/r2

现在你有三个接单在运行中,注意,每个节点都应显示如下警告:

Mon Aug 2 11:30:19 [startReplSets] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)在初始化这些节点前,我们还不能使用这个副本集,让我们继续

初始化节点 (Initializing the set

我们连接到其中一个节点上,并使用 replSetInitiate 命令进行初始化。此命令需要一个配置对象( configuration object ),指定设定的每个成员的名字。

# mongo localhost:27017

MongoDB Shell version: 1.5.7
connecting to: localhost:27017/test
> config = {_id: 'foo', members: [
{_id: 0, host: 'localhost:27017'},
{_id: 1, host: 'localhost:27018'},
{_id: 2, host: 'localhost:27019'}]
}

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

我们指定的配置对象,然后把它传递给rs.initiate()。然后,如果一切正常,我们得到的回应说,副本集将在一分钟内在线。在此期间,其中一个节点将当选为主节点。

运行 rs.status 检查节点状态:

> rs.status()
{
"set" : "foo",
"date" : "Mon Aug 02 2010 11:39:08 GMT-0400 (EDT)",
"myState" : 1,
"members" : [
{
"name" : "arete.local:27017",
"self" : true,
},
{
"name" : "localhost:27019",
"health" : 1,
"uptime" : 101,
"lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400",
},
{
"name" : "localhost:27018",
"health" : 1,
"uptime" : 107,
"lastHeartbeat" : "Mon Aug 02 2010 11:39:07 GMT-0400",
}
],
"ok" : 1
}

你会看到,集合的其他成员都启动了。您可能还注意到myState值是1,这表明我们已经连接到主节点,值为2表示一个辅节点。您也可以通过 管理用户界面(HTTP Admin UI)检查状态。

复制 (Replication)

来向主节点中写点东西。

db.messages.save({name: "ReplSet Tutorial"});如果你注意到辅节点上的日志,那么你将看到内容被复制了。

这是最初的复制故障转移所必需的;节点之间的初始同步完成前,系统不会故障转移到新的主节点.

延伸阅读

评论

  1. 你好,我现在遇到一个问题,在一台机器上做副本集完全正常,但是当我想用其他机器来做时就不行了,老是报错:{
    “errmsg” : “couldn’t initiate : need all members up to initiate, not ok : 10.10.112.208:10000″,
    “ok” : 0
    }
    我自己的机器IP是10.10.112.191
    两机子是能互相ping通的,但是不知道为什么,就是不能做成副本集