下面将详细讲解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具有了高可用性,若主节点宕机就会自动选择从节点作为新的主节点,从而确保数据的安全和有效的运转。