详解mongoDB主从复制搭建详细过程

1. 简介

mongoDB是一个非常流行的NoSQL数据库,支持主从复制(Replica Sets)和分片(Sharding)等高可用和高性能扩展功能。在本文中,我们将介绍mongoDB主从复制的搭建过程。

2. 安装mongoDB

2.1 下载

首先,我们需要下载mongoDB的安装包。可以从官网进行下载:https://www.mongodb.com/download-center/community

2.2 安装

下载完成后,按照安装包中的引导进行安装即可。安装完成后,我们需要准备好mongoDB的工作目录和日志目录。

3. 配置主从复制

3.1 配置主节点

在进行主从复制之前,我们需要先启动mongoDB的主节点。

首先,我们需要创建一个mongoDB配置文件(例如:mongod.conf)。在该文件中,我们需要指定mongoDB的工作目录、日志目录、端口号、副本集名称等相关信息。

以下是一个mongoDB主节点的配置文件示例:

# mongod.conf

systemLog:

destination: file

path: "/var/log/mongodb/mongod.log"

logRotate: reopen

logAppend: true

storage:

dbPath: "/data/mongodb/db"

wiredTiger:

engineConfig:

cacheSizeGB: 1

journalCompressor: snappy

directoryForIndexes: false

net:

bindIp: 127.0.0.1

port: 27017

replication:

replSetName: "rs0"

在该配置文件中, systemLog表示mongoDB的日志配置,使用文件作为日志输出;storage表示mongoDB的数据存储配置,使用wiredTiger存储引擎;net表示mongoDB的网络配置,使用默认的127.0.0.1地址和27017端口号进行连接;replication表示mongoDB的复制配置,指定副本集名称为"rs0"。

然后,我们需要启动mongoDB的主节点。可以通过以下命令进行启动:

mongod -f /path/to/mongod.conf

-f参数指定配置文件的路径。

主节点启动成功后,我们可以通过mongo shell进行连接验证。

mongo --port 27017

--port参数指定连接的端口号,默认为27017。

3.2 配置从节点

在启动主节点之后,我们可以启动mongoDB的从节点。

与主节点类似,我们需要为从节点创建一个mongoDB配置文件。在该配置文件中,我们需要指定mongoDB的工作目录、日志目录、端口号、副本集名称、主节点信息等相关信息。

以下是一个mongoDB从节点的配置文件示例:

# mongod.conf

systemLog:

destination: file

path: "/var/log/mongodb/mongod.log"

logRotate: reopen

logAppend: true

storage:

dbPath: "/data/mongodb/db"

wiredTiger:

engineConfig:

cacheSizeGB: 1

journalCompressor: snappy

directoryForIndexes: false

net:

bindIp: 127.0.0.1

port: 27018

replication:

replSetName: "rs0"

oplogSizeMB: 1024

source:

host: "127.0.0.1"

port: 27017

在该配置文件中,systemLog、storage、net和replication的参数配置与主节点类似。在replication中,我们需要指定从节点的副本集名称为"rs0",并且使用oplogSizeMB参数指定从节点的oplog大小。在source中,我们需要指定主节点的地址信息。

然后,我们可以启动mongoDB的从节点。可以通过以下命令进行启动:

mongod -f /path/to/mongod.conf

从节点启动成功后,我们可以通过mongo shell进行连接验证。

mongo --port 27018

3.3 初始化副本集

在主节点和从节点配置完成后,我们需要对副本集进行初始化。

首先,我们需要进入mongo shell。可以通过以下命令进行连接:

mongo --port 27017

然后,我们需要执行以下命令:

rs.initiate()

该命令会初始化一个新的副本集,并将当前节点设置为副本集的主节点。初始化成功后,我们可以执行以下命令来查看副本集状态:

rs.status()

在副本集状态输出中,我们可以看到当前的主节点信息。

接下来,我们需要添加从节点到副本集中。可以通过以下命令进入mongo shell并连接从节点:

mongo --port 27018

然后,执行以下命令:

rs.slaveOk()

rs.add("127.0.0.1:27018")

其中,rs.slaveOk()表示允许从节点进行读取访问;rs.add()表示添加从节点到副本集中。

添加成功后,我们可以再次执行以下命令查看副本集状态:

rs.status()

在副本集状态输出中,我们可以看到当前的主节点信息和从节点信息。

4. 测试主从复制功能

在主从复制搭建完成后,我们可以进行一些简单的测试。

首先,我们可以在主节点上创建一个数据库,并向该数据库中插入一条数据。

可以通过以下命令进入mongo shell:

mongo --port 27017

然后,执行以下命令:

use test

db.test.insert({name: "foo", age: 18})

其中,use表示使用test数据库;db.test.insert()表示向test数据库的test集合中插入一条数据。

插入完成后,我们可以在从节点上查看该数据库和数据是否存在。

可以通过以下命令进入mongo shell并连接从节点:

mongo --port 27018

然后,执行以下命令:

use test

db.test.findOne()

其中,use表示使用test数据库;db.test.findOne()表示查询test数据库的test集合中的第一条数据。

如果能够查询到数据,说明主从复制搭建成功。

5. 常见问题排查

在使用mongoDB的主从复制功能时,可能会遇到一些常见问题。以下是一些常见问题和解决方法:

5.1 主从节点时间不一致

如果主从节点之间的时间不一致,可能会导致一些问题。例如,在主节点上进行了数据写入,但是从节点无法同步数据。

可以通过以下命令检查主从节点之间的时间是否一致:

db.getTimestamp()

如果主从节点之间的时间不一致,可以使用ntpdate等工具进行时间同步。

5.2 主从节点之间无法连接

如果主从节点之间无法连接,可能会导致一些数据同步异常。

可以通过以下命令检查主从节点之间的连接是否正常:

rs.status()

如果发现某个节点无法连接,可以检查该节点的网络配置信息是否正确。

6. 总结

本文介绍了mongoDB主从复制的搭建过程。通过以上步骤,我们可以搭建一个基本的mongoDB主从复制集群,并进行简单的数据同步测试。

数据库标签