我有一台配备 8Gb RAM 的快速 Windows 7 PC。我想为我的开发测试这个 MongoDB 副本集:http ://www.mongodb.org/display/DOCS/Replica+Sets 。不过我不想买 3 台电脑,因为它有点贵。有没有办法使用某种技术(例如 Hyper-V)来进行设置?如果没有,我应该买多少台电脑?我应该买哪种?
6 回答
您可以在同一台机器上的不同端口上运行多个 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 进程,并使用此处概述的说明添加启动副本集:
在 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;
}
});
您可以创建多个 mongod 实例在 diff 上的同一台服务器上运行。港口。
有关配置和副本集的工作方式,请参阅下面的博客。这将根据同一框上的说明设置副本集。
http://pareshbhav.blogspot.com/2014/12/mongdb-replicaset-and-streaming.html
一种超级简单的方法是使用 Docker 设置 MongoDB 副本集。
在我们的 Docker 主机中,我们可以创建 Docker 网络,这将为我们提供跨容器的隔离 DNS 解析。然后我们可以开始创建 MongoDB docker 容器。他们最初不会意识到彼此。但是,我们可以通过连接到其中一个容器并运行副本集初始化命令来初始化复制。最后,我们可以将我们的应用程序容器部署在同一个 docker 网络下。
使用 Docker帖子查看MongoDB 副本集,了解如何使其工作。
我们将为 MongoDB 副本集配置 3 个节点。
假设我们有 3 个节点:
- 主机名Mongodb01,ip 地址192.168.1.11和 MongoDB 安装的端口号为27017
- 主机名Mongodb02,ip 地址192.168.1.22和 MongoDB 安装的端口号为27017
- 主机名Mongodb03,ip 地址192.168.1.33和 MongoDB 安装的端口号为27017
在开始使用此配置之前,请确保您已准备好以下几点:
- MongoDB 服务已在所有 3 个节点中安装并运行
- 所有 3 个节点都通过 IP 地址或主机名相互连接
- 默认端口号 27017 和 28017(或您计划使用的任何其他端口号)未被任何防火墙或防病毒软件阻止
现在,让我们从配置开始
步骤1:修改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()
检查是否所有节点都添加到副本集中。检查副本中节点的其他方法是在浏览器地址栏中使用以下 URLhttp://<hostname or ip-address>:<port>/_replSet
例如; http://localhost:27017/_replSet
或http://Mongodb01:27017/_replSet
或http://192.168.1.11:27017/_replSet
。
此 URL 仅在您rest = true
在mongodb.conf
文件中设置时才可访问
在同一台主机上设置副本是没有用的,因为这与冗余和高可用性的条款相矛盾。如果您的 PC 出现故障或变慢,您的副本集将被破坏或降级。但是可以肯定的是,购买多台 PC 来评估副本集并不划算,因此您可以考虑MongoDB Replica Set with Master-Slave Replication中描述的可能场景。
关于副本集成员的数量,您是对的,最常见的拓扑包括 3 个成员,但我建议您在单独的主机上也添加一个仲裁器。这是一个轻量级的过程,不需要大量资源,但它在维持新 PRIMARY 选举中的法定人数方面起着重要作用,以防一旦 PRIMARY 失败时您获得偶数数量的成员。