注册

mongodb 4.0副本集搭建的全过程

下面将详细讲解mongodb 4.0副本集搭建的全过程。在这个过程中,为了更好地说明问题,我将会提供两个示例。

什么是mongodb副本集?

MongoDB是一个基于分布式文件存储的数据库程序,并且支持主从复制和副本集等高可用性方案。

副本集是一个由几个MongoDB实例组成的集群,其中有一个主节点和多个从节点。主节点负责所有写入操作,并自动将写操作的结果同步到所有从节点上。如果主节点宕机,副本集会自动切换到一个从节点作为新的主节点。这种方案可以提高MongoDB的可用性。

搭建MongoDB副本集的全过程

接下来,将详细介绍MongoDB副本集的全过程,包括搭建主节点、从节点和副本集等环节,下面以两个实例为例。

实例一:使用Docker搭建MongoDB副本集

1、安装Docker

在官网上下载Docker CE,并按照官方指南进行安装:Docker官网安装文档

2、创建Docker容器

使用如下命令,在docker容器中运行MongoDB:

docker run --name mongo1 -d mongo --replSet rs0
docker run --name mongo2 -d mongo --replSet rs0
docker run --name mongo3 -d mongo --replSet rs0

这将在本地主机上创建一个名为“mongo1”、“mongo2”、“mongo3”容器,并在其中运行MongoDB镜像,其中--replSet rs0表示该实例属于rs0副本集。

3、配置MongoDB副本集

进入mongo1中的控制台,使用以下命令初始化副本集:

docker exec -it mongo1 mongo # 进入mongo1容器中
rs.initiate() # 初始化副本集
rs.add("mongo2:27017") # 添加mongo2实例
rs.add("mongo3:27017") # 添加mongo3实例

这将在mongo1实例上初始化副本集,并将mongo2和mongo3添加至副本集。

4、测试MongoDB副本集

进入任意一个mongo实例中,输入以下命令测试是否成功搭建MongoDB副本集:

rs.status() # 查看副本集状态
db.test.insert({test:1}) # 向test数据库添加一条记录
rs.slaveOk() # 允许从节点读取数据
db.test.find() # 查看test数据库中的数据,该操作在任意一个从节点上均可执行

实例二:使用Mongod搭建MongoDB副本集

相对于使用Docker,使用Mongod搭建MongoDB副本集需要手动安装和配置。

1、安装MongoDB

在官网上下载MongoDB,并按照官方文档进行安装:MongoDB官网安装文档

2、创建MongoDB实例和数据目录

使用以下命令,创建三个MongoDB实例和数据目录:

mongod --replSet rs0 --port 27017 --dbpath /data/mongo1
mongod --replSet rs0 --port 27018 --dbpath /data/mongo2
mongod --replSet rs0 --port 27019 --dbpath /data/mongo3

这将在本地主机上创建了三个MongoDB实例和三个数据文件夹。

3、初始化MongoDB副本集

进入mongo1的控制台,使用以下命令初始化副本集:

mongo --host localhost --port 27017
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "mongo1:27017",
"ok" : 1,
"operationTime" : Timestamp(1575960852, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1575960852, 1),
"signature" : {
"hash" : BinData(0,"aslkfljksfow33343323"),
"keyId" : NumberLong(0)
}
}
}

执行以上命令之后,将初始化一组没有配置的设置。

接着,在mongo1上添加mongo2和mongo3:

mongo --host localhost --port 27017
> rs.add("mongo2:27018")
{
"operationTime" : Timestamp(1575960914, 6),
"$clusterTime" : {
"clusterTime" : Timestamp(1575960914, 6),
"signature" : {
"hash" : BinData(0,"asl;kfjlksd23mzoksd"),
"keyId" : NumberLong(0)
}
},
"ok" : 1
}
> rs.add("mongo3:27019")
{
"operationTime" : Timestamp(1575960929, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1575960929, 1),
"signature" : {
"hash" : BinData(0,"alksf2rwe994ef"),
"keyId" : NumberLong(0)
}
},
"ok" : 1
}

4、测试MongoDB副本集

接下来在任意一个mongo实例中,输入以下命令测试是否成功搭建MongoDB副本集:

mongo --host localhost --port 27017
> rs.status()

如果返回了当前主节点的信息,就表示MongoDB副本集已成功搭建。

结束语

通过以上的实例,讲解了如何使用Docker和Mongod搭建MongoDB副本集,MongoDB副本集的搭建需要按照先后顺序进行,需要初始化副本集并将所有从节点添加至副本集中。副本集的搭建使得MongoDB具有了高可用性,若主节点宕机就会自动选择从节点作为新的主节点,从而确保数据的安全和有效的运转。