概要
最近项目的MongoDB版本终于升级到了MongoDB4.4了,可以使用使用事务了,但MongoDB的不支持单节点事务,至少是副本集。
测试环境没必要搭建复杂的副本集,还好官方给出了单节点副本集的方案,本文总结了如何用docker来快速搭建。
一、单节点副本集
1:拉取镜像
docker pull mongo:7.0
2:准备环境
mkdir -p /home/docker/mongo/data #数据挂载目录
mkdir -p /home/docker/mongo/logs #日志挂载目录
mkdir -p /home/docker/mongo/config #配置挂载目录
chmod 777 /home/docker/mongo/* #授权
docker run -d --name mongo_tmp -p 27017:27017 mongo:7.0
docker cp mongo_tmp:/etc/mongod.conf.orig /home/docker/mongo/config/mongod.conf #复制配置文件
docker rm mongo_tmp
3:调整配置
vim /home/docker/mongo/config/mongod.conf
# mongod.conf
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
#operationProfiling:
replication: #开启副本集
replSetName: rs #设置副本集名称
#sharding:
## Enterprise-Only Options:
#auditLog:
4:启动容器
docker run -d -p 27017:27017 --name mongo \
-v /home/docker/mongo/data:/var/lib/mongodb \
-v /home/docker/mongo/logs:/var/log/mongodb \
-v /home/docker/mongo/config/mongod.conf:/etc/mongod.conf \
mongo:7.0 -f /etc/mongod.conf
5:初始化副本集并检测
[root@test home]# docker exec mongo mongosh --version
2.2.0
[root@test home]# docker exec -it mongo bash
root@4250323d6d90:/# mongosh
Current Mongosh Log ID: 6606093080fcdce72edb83af
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.0
Using MongoDB: 7.0.7
Using Mongosh: 2.2.0
test> rs.initiate() #初始化副本集
{
info2: 'no configuration specified. Using a default configuration for the set',
me: '4250323d6d90:27017',
ok: 1
}
rs [direct: primary] test> rs.status() #检测
{
set: 'rs',
date: ISODate('2024-03-28T21:53:44.472Z'),
myState: 1,
term: Long('1'),
syncSourceHost: '',
syncSourceId: -1,
heartbeatIntervalMillis: Long('2000'),
majorityVoteCount: 1,
writeMajorityCount: 1,
votingMembersCount: 1,
writableVotingMembersCount: 1,
optimes: {
lastCommittedOpTime: {
ts: Timestamp({
t: 1711662813, i: 23 }), t: Long('1') },
lastCommittedWallTime: ISODate('2024-03-28T21:53:33.694Z'),
readConcernMajorityOpTime: {
ts: Timestamp({
t: 1711662813, i: 23 }), t: Long('1'