0

我是 mongo db 的新手,希望建立一个副本集。我对如何实现这一点感到困惑。

我想拥有 3 台不同机器的主要、次要和仲裁器,每台机器都运行 mongo。

我一直在尝试设置它,但我认为它弄得一团糟!如何删除我已有的任何副本集/配置?

我已经安装了 mongo,并将每个 mongo 实例指向一个配置文件,如下所示:

logpath=D:\mongodb\log\mongo.log 
logappend=true
dbpath=D:\mongodb\data
directoryperdb=true
port = 27017
replSet = rsMySet

不过,从这里开始,我不知道该怎么做。我已经阅读了许多文章、示例等,但都令人困惑。

有人可以提供如何完成的分步说明吗?

另外,我想从 C# Web 应用程序连接到这个副本集。我的连接字符串应该指向什么?主要的,次要的或它是如何工作的?另外,应该使用什么用户来访问 mongo?我在访问 sql server 时使用了集成安全性,这里也可以吗?

谢谢,尼尔

4

2 回答 2

2

以下是我在本地机器上创建副本集的基本步骤。

Step 1 : 

Start all mongods with replSet argument 

mongod --replSet SriReplSet  --dbpath /Volumes/Data/Replica-DBS/1 --port 27001 --logpath /Volumes/Data/Replica-DBS/log/log.1 --logappend --fork
mongod --replSet SriReplSet  --dbpath /Volumes/Data/Replica-DBS/2 --port 27002 --logpath /Volumes/Data/Replica-DBS/log/log.2 --logappend --fork
mongod --replSet SriReplSet  --dbpath /Volumes/Data/Replica-DBS/3 --port 27003 --logpath /Volumes/Data/Replica-DBS/log/log.3 --logappend --fork

“SriReplSet”是您的副本集的名称。显然,dbpath 和 port 会根据你的配置而改变。

我打算将第一个(端口号为 27001)作为主要。所以登录到第一个 mongod 并设置我的配置如下。请注意,我使用 localhost 因为一切都在我的本地机器中。

Step 2 : 
>x={
    _id :"SriReplSet",
     members : [
         {_id : 0, host :"localhost:27001"},
         {_id : 1, host :"localhost:27002"},
         {_id : 2, host :"localhost:27003"},
     ]
}

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

上面的命令将启动副本集,并显示一条消息“配置现在保存在本地。大约一分钟后应该上线。” 你完成了:)

Step 3 : 

SriReplSet:PRIMARY> rs.status()
{
    "set" : "SriReplSet",
    "date" : ISODate("2013-05-16T05:35:18Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "localhost:27001",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 370,
            "optime" : Timestamp(1368682493000, 1),
            "optimeDate" : ISODate("2013-05-16T05:34:53Z"),
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "localhost:27002",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 20,
            "optime" : Timestamp(1368682493000, 1),
            "optimeDate" : ISODate("2013-05-16T05:34:53Z"),
            "lastHeartbeat" : ISODate("2013-05-16T05:35:18Z"),
            "pingMs" : 0
        },
        {
            "_id" : 2,
            "name" : "localhost:27003",
            "health" : 1,
            "state" : 5,
            "stateStr" : "STARTUP2",
            "uptime" : 18,
            "optime" : Timestamp(0, 0),
            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
            "lastHeartbeat" : ISODate("2013-05-16T05:35:17Z"),
            "pingMs" : 736
        }
    ],
    "ok" : 1
}

请注意,第一个是主要的。

我不是 C# 人,但在 Java 中,我们可以通过将几个 ServerAddress 列表传递给 Mongo 构造函数来使用 Java 驱动程序连接到副本集(我猜 C# 的情况大致相同)。驱动程序是副本感知的,如果主要更改,它们将相应更改。

默认情况下,所有读写操作都将在主节点上进行。希望这可以帮助 :)

于 2013-05-16T05:49:55.500 回答
1

按照此处概述的步骤操作:http: //docs.mongodb.org/manual/tutorial/deploy-replica-set/#deploy-a-development-or-test-replica-set

删除任何错误配置的方法是删除“本地”数据库。

> use local
> db.dropDatabase()

这里有很多如何连接到副本集的示例:http: //docs.mongodb.org/manual/reference/connection-string/#standard-connection-string-format

于 2013-05-15T23:47:06.423 回答