MongoDB副本集(Replication Set)由一组mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点.客户端数据写入Primary节点。Secondary节点从Primary节点同步数据。以保持副本集内所有成员存储相同的数据集。Primary节点故障时会自动选举出一个新的Primary节点。
在实现高可用的同时,副本集实现了其他几个附加作用:
数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延迟。
读写分离:不同类型的压力分别在不同节点上执行。
异地容灾:在数据中心故障时快速切换到异地。
windows环境搭建MongoDB副本集
1. 创建两个mongoDB目录
2. 配置相同的副本集名称,不同的端口
#存储
storage:
#数据存储目录 windows这里用斜杠/,不能用反斜杠\
dbPath: "D:/soft/mongodb-6.0.2-2/data"
#journal日志是否开启,默认情况下该日志在最长不超过100ms之后向磁盘写入增量数据
journal:
enabled: true
#网络
net:
#绑定IP,如果此值是‘0.0.0.0’则绑定所有IP
bindIp: localhost,127.0.0.1
#监听端口,默认27017
port: 27019
#副本集
replication:
#副本集名称
replSetName: resGreat
3. 启动两个服务
mongod -f mongod.conf
4. 使用mongosh工具连接主节点服务
这里选择27017作为主节点
mongosh.exe --port 27017
5. 初始化副本集
6. 将其余成员增加到副本集
rs.add('127.0.0.1:27019')
7. 其他相关命令
查看配置
rs.conf()
查看状态
rs.status()
8. ReadPreference读偏好
默认情况下,读写都是分发都Primary节点执行,我们希望进行读写分离来分摊压力,所以希望使用Secondary节点来进行读取,Primary只承担写的责任(实际上写只能分发到Primary节点,不可修改)。
MongoDB有5种ReadPreference模式:
primary: 主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常。
primaryPreferred:首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。
secondary:从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常。
secondaryPreferred:首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。
nearest:最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点。
9. Spring Boot 读写分离配置
Mongo的读写分离非常的简单,只需要在连接字符串中添加如下参数
spring:
data:
mongodb:
uri: mongodb://localhost:27017,localhost:27019/?replicaSet=resGreat&readPreference=secondaryPreferred