mongodb Replica Set(副本集) 部署
一、安装mongodb
详情请参考我的另一篇文章:https://www.cnblogs.com/sunjiwei/articles/18354786
副本集的配置文件用下面这个,每个节点都相同:
cat > /etc/mongod-cnf/mongodb-rs.conf << EOF
systemLog:
destination: file
###日志存储位置
path: /opt/software/mongodb/log/mongod.log
logAppend: true
storage:
##journal配置,类似mysql的redo
journal:
enabled: true
##数据文件存储位置
dbPath: /opt/software/mongodb/data
##是否一个库一个文件夹
directoryPerDB: true
##数据引擎
engine: wiredTiger
##WT引擎配置
wiredTiger:
engineConfig:
##WT最大使用cache(根据服务器实际情况调节)
cacheSizeGB: 4
##是否将索引也按数据库名单独存储
directoryForIndexes: true
##端口配置
net:
port: 27017
bindIpAll: true
processManagement:
fork: true
pidFilePath: /opt/software/mongodb/data/mongod.pid
##副本集配置
replication:
##oplog大小
oplogSizeMB: 2048
##复制集名称
replSetName: rs01
# 此处第一次要把安全参数注释掉,在初始化集群并设置好管理员用户后再开启安全验证然后重启mongodb
#security:
# authorization: enabled
# clusterAuthMode: keyFile
# keyFile: /opt/software/mongodb/data/keyFile/mongo.key
##服务器参数配置
#setParameter:
# <parameter1>: <value1>
EOF
配置keyfile文件:
# 副本集各个节点之间内部身份验证需要用到keyFile,所以副本集的安装比单节点安装多了这一步
mkdir -p /opt/software/mongodb/data/keyFile
cat > /opt/software/mongodb/data/keyFile/mongo.key << EOF
mongodbrs01
EOF
chmod 600 /opt/software/mongodb/data/keyFile/mongo.key
<details>
配置时间同步服务器NTP
强烈建议配置时间同步服务器保持所有节点时间一致性
1、安装ntp
yum install -y ntp
2、修改ntp配置文件
vim /etc/ntp.conf
# 下面这个配置意思是192.168.160的网段的机器都参与ntp的时间同步,或者给注释掉也行
restrict 192.168.160.0 mask 255.255.255.0 nomodify notrap
# ntp.conf中有默认的时间服务器,注销掉,然后添加上我们对应的时区时间服务器,我这里用的阿里云时间服务器,也可以公司自己内部的时间服务器如果有的话。
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
3、手动做时间同步
ntpdate -u ntp1.aliyun.com
注意:要等这一步时间同步完成才能做下一步,可以用ntpstat 命令查看时间是否同步完成,一般第一次同步需要几分钟时间
4、时间同步完成后,就可以启动ntp服务了,命令如下:
systemctl start ntpd
systemctl status ntpd
systemctl enable ntpd
启动mongodb
# 注意这里启动即可,不要设置管理员账号并重启,初始化集群之后再设置账号修改配置文件然后逐个重启每个节点
mongod -f /etc/mongod-cnf/mongodb.conf
二、初始化集群
1、选择一个节点,执行以下命令进行初始化操作
# 注意,priority为权重,权重高的节点更有可能当选为主节点,priority 的值可为介于 0 与 1000 之间的任意浮点数。priority 字段的默认值为 1。也可不设置权重,则默认所有节点都为1,第一次初始化时如果没有设置权重,则在哪个节点进行的初始化,则该节点即为主节点
rs.initiate(
{_id:"rs01",
members:[
{_id:0, host:"192.168.167.160:27018",priority:100},
{_id:1, host:"192.168.167.161:27018",priority:1},
{_id:2, host:"192.168.167.162:27018",priority:1}
]})
# 查看集群状态,集群初始化成功后使用下面的命令可以查看状态
rs.status()
# 结果如下
{
set: 'rs01',
date: ISODate('2024-08-13T03:36:04.337Z'),
myState: 1,
term: Long('1'),
syncSourceHost: '',
syncSourceId: -1,
heartbeatIntervalMillis: Long('2000'),
majorityVoteCount: 2,
writeMajorityCount: 2,
votingMembersCount: 3,
writableVotingMembersCount: 3,
optimes: {
lastCommittedOpTime: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
lastCommittedWallTime: ISODate('2024-08-13T03:36:02.954Z'),
readConcernMajorityOpTime: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
appliedOpTime: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
durableOpTime: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
lastAppliedWallTime: ISODate('2024-08-13T03:36:02.954Z'),
lastDurableWallTime: ISODate('2024-08-13T03:36:02.954Z')
},
lastStableRecoveryTimestamp: Timestamp({ t: 1723520151, i: 1 }),
electionCandidateMetrics: {
lastElectionReason: 'electionTimeout',
lastElectionDate: ISODate('2024-08-13T03:36:01.865Z'),
electionTerm: Long('1'),
lastCommittedOpTimeAtElection: { ts: Timestamp({ t: 1723520151, i: 1 }), t: Long('-1') },
lastSeenOpTimeAtElection: { ts: Timestamp({ t: 1723520151, i: 1 }), t: Long('-1') },
numVotesNeeded: 2,
priorityAtElection: 1,
electionTimeoutMillis: Long('10000'),
numCatchUpOps: Long('0'),
newTermStartDate: ISODate('2024-08-13T03:36:01.925Z'),
wMajorityWriteAvailabilityDate: ISODate('2024-08-13T03:36:02.855Z')
},
members: [
{
_id: 0,
name: '192.168.167.160:27018',
health: 1,
state: 1,
stateStr: 'PRIMARY',
uptime: 131,
optime: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
optimeDate: ISODate('2024-08-13T03:36:02.000Z'),
lastAppliedWallTime: ISODate('2024-08-13T03:36:02.954Z'),
lastDurableWallTime: ISODate('2024-08-13T03:36:02.954Z'),
syncSourceHost: '',
syncSourceId: -1,
infoMessage: '',
electionTime: Timestamp({ t: 1723520161, i: 1 }),
electionDate: ISODate('2024-08-13T03:36:01.000Z'),
configVersion: 1,
configTerm: 1,
self: true,
lastHeartbeatMessage: ''
},
{
_id: 1,
name: '192.168.167.161:27018',
health: 1,
state: 2,
stateStr: 'SECONDARY',
uptime: 13,
optime: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
optimeDurable: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
optimeDate: ISODate('2024-08-13T03:36:02.000Z'),
optimeDurableDate: ISODate('2024-08-13T03:36:02.000Z'),
lastAppliedWallTime: ISODate('2024-08-13T03:36:02.954Z'),
lastDurableWallTime: ISODate('2024-08-13T03:36:02.954Z'),
lastHeartbeat: ISODate('2024-08-13T03:36:03.884Z'),
lastHeartbeatRecv: ISODate('2024-08-13T03:36:02.890Z'),
pingMs: Long('1'),
lastHeartbeatMessage: '',
syncSourceHost: '192.168.167.160:27018',
syncSourceId: 0,
infoMessage: '',
configVersion: 1,
configTerm: 1
},
{
_id: 2,
name: '192.168.167.162:27018',
health: 1,
state: 2,
stateStr: 'SECONDARY',
uptime: 13,
optime: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
optimeDurable: { ts: Timestamp({ t: 1723520162, i: 6 }), t: Long('1') },
optimeDate: ISODate('2024-08-13T03:36:02.000Z'),
optimeDurableDate: ISODate('2024-08-13T03:36:02.000Z'),
lastAppliedWallTime: ISODate('2024-08-13T03:36:02.954Z'),
lastDurableWallTime: ISODate('2024-08-13T03:36:02.954Z'),
lastHeartbeat: ISODate('2024-08-13T03:36:03.883Z'),
lastHeartbeatRecv: ISODate('2024-08-13T03:36:02.892Z'),
pingMs: Long('0'),
lastHeartbeatMessage: '',
syncSourceHost: '192.168.167.160:27018',
syncSourceId: 0,
infoMessage: '',
configVersion: 1,
configTerm: 1
}
],
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1723520162, i: 6 }),
signature: {
hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
keyId: Long('0')
}
},
operationTime: Timestamp({ t: 1723520162, i: 6 })
}
2、修改配置文件开启身份验证
# 在主节点创建管理员账号
use admin
db.createUser({user: "root",pwd: "1111111",roles: ['root']})
# 这个地方在设置好管理员账号后,要放开注释,然后重启mongodb,所有节点都做
security:
authorization: enabled
clusterAuthMode: keyFile
keyFile: /opt/software/mongodb/data/keyFile/mongo.key
# 配置文件修改好后,重启mongodb
# 关闭mongodb
/opt/software/mongodb27018/mongodb-6.0.16/bin/mongod --shutdown --dbpath /opt/software/mongodb/data
# 启动mongodb
/opt/software/mongodb27018/mongodb-6.0.16/bin/mongod -f /etc/mongod-cnf/mongodb-rs.conf
至此,mongodb副本集部署成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix