【发布时间】:2012-09-19 15:24:17
【问题描述】:
我有一台配备 8Gb RAM 的快速 Windows 7 PC。我想测试这个 MongoDB 副本集:http://www.mongodb.org/display/DOCS/Replica+Sets 用于我的开发。不过我不想买3台电脑,因为它有点贵。有没有办法使用某种技术(例如 Hyper-V)来进行设置?如果没有,我应该买多少台电脑?我应该买哪种?
【问题讨论】:
我有一台配备 8Gb RAM 的快速 Windows 7 PC。我想测试这个 MongoDB 副本集:http://www.mongodb.org/display/DOCS/Replica+Sets 用于我的开发。不过我不想买3台电脑,因为它有点贵。有没有办法使用某种技术(例如 Hyper-V)来进行设置?如果没有,我应该买多少台电脑?我应该买哪种?
【问题讨论】:
您可以在同一台机器上的不同端口上运行多个 mongod 进程,并指向不同的数据目录,并使它们成为同一个副本集的一部分。
http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo
mongod --dbpath c:/data1 --port 12345 --replSet foo
mongod --dbpath c:/data2 --port 12346 --replSet foo
然后使用 mongo 控制台连接到其中一个 mongod 进程,并使用此处概述的说明添加启动副本集:
【讨论】:
pidFilePath?
在 Ubuntu 18.04 上,MongoDb:shell 版本 v4.2.6
在终端中 (1)(使用防火墙保护端口,因为我们使用的是 0.0.0.0)
sudo systemctl stop mongod
sudo systemctl status mongod
sudo mongod --auth --port 27017 --dbpath /var/lib/mongodb --replSet rs0 --bind_ip 0.0.0.0
然后打开另一个终端实例(2)(保持前一个打开)
mongo -u yourUserName -p (it will ask for password - follow on)
rs.initiate()
然后打开另一个终端实例 (3) 在这里,您将使用您的连接 url 运行 server.js,如下所示:
const url = 'mongodb://' + user + ':' + password +
'@localhost:27017/?replicaSet=rs0'
MongoClient.connect(url, { useUnifiedTopology: true, authSource: 'admin' },
function (err, client) {
if (err) {
throw err;
}
});
【讨论】:
您可以在 diff 上创建多个运行在同一服务器上的 mongod 实例。港口。
关于副本集的配置和工作方式,请参阅下面的博客。这将根据同一框上的说明设置副本集。
http://pareshbhav.blogspot.com/2014/12/mongdb-replicaset-and-streaming.html
【讨论】:
一个超级简单的方法是设置the MongoDB replica set by using Docker。
在我们的 Docker 主机中,我们可以创建 Docker 网络,这将为我们提供跨容器的隔离 DNS 解析。然后我们可以开始创建 MongoDB docker 容器。他们最初彼此不知道。但是,我们可以通过连接到其中一个容器并运行副本集初始化命令来初始化复制。最后,我们可以将我们的应用容器部署在同一个 docker 网络下。
查看the MongoDB replica set by using Docker 帖子,了解如何完成这项工作。
【讨论】:
在同一台主机上设置副本是没有用的,因为这与冗余和高可用性的条款相矛盾。如果您的 PC 出现故障或速度变慢,您的副本集将被破坏或降级。但可以肯定的是,购买多台 PC 来评估副本集并不划算,因此您可以考虑MongoDB Replica Set with Master-Slave Replication 中描述的可能场景。
关于副本集成员的数量,您是对的,最常见的拓扑包括 3 个成员,但我建议您在单独的主机上也添加一个仲裁器。这是一个轻量级进程,不需要大量资源,但它在维持新 PRIMARY 选举中的法定人数方面发挥着重要作用,以防一旦 PRIMARY 失败时您的成员数量为偶数。
【讨论】:
我们将配置 3 个节点的 MongoDB 副本集。
假设我们有 3 个节点:
在启动此配置之前,请确保您已准备好以下几点:
现在,让我们开始配置
第一步:修改每个节点的mongodb.conf文件,加入副本集信息。
replSet = myCluster
rest = true
replSet是副本集的唯一名称,所有节点的replSet参数值必须相同。 rest 是可选的,但用于为管理网页启用休息界面。
第 2 步:在所有 3 个节点上重新启动 MongoDB 服务
第 3 步: 在您计划用作主节点的节点上配置副本集。在我们的例子中,我们将在 Mongodb01 的 mongo shell 中执行以下命令
rs.initiate()
启动副本集
rs.add("<hostname or ip-address>:<port-no>")
在副本集中添加辅助节点。
例如; rs.add("Mongodb02:27017") 或 rs.add("192.168.1.22:27017")
rs.addArb("<hostname or ip-address>:<port-no>")
在副本集中添加仲裁节点。
例如; rs.addArb("Mongodb03:27017") 或 rs.add("192.168.1.33:27017")
rs.status()
检查是否所有节点都添加到副本集中。检查副本中节点的其他方法是在浏览器地址栏中使用以下 URL http://<hostname or ip-address>:<port>/_replSet
例如; http://localhost:27017/_replSet 或 http://Mongodb01:27017/_replSet 或 http://192.168.1.11:27017/_replSet。
只有在mongodb.conf 文件中设置rest = true 才能访问此网址
【讨论】: