二、MongoDB集群的三种核心模式-副本集模式
MongoDB 集群副本集模式 部署搭建步骤[192.168.109.137,192.168.109.138,192.168.109.139]
一、环境准备(所有节点执行)
1.安装MongoDB
###sudo yum install -y mongodb-org
2.关闭防火墙/开放端口 确保节点间网络互通,开放MongoDB默认端口27017:
sudo systemctl stop firewalld && sudo systemctl disable firewalld
# 或仅开放端口(推荐生产环境):
sudo firewall-cmd --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
3.创建数据/日志目录 以及mongod.pid文件路径
mkdir -pv /data/apprun/data/mongodb
mkdir /data/apprun/mongodb/logs/ -pv
mkdir -pv /data/apprun/mongodb/run/
以及sudo chown -R mongod:mongod 权限修改,具体看以什么用户运行~示例以:apprun用户
chown -R apprun:apprun /data/apprun/data/mongodb /data/apprun/mongodb/logs /data/apprun/mongodb/run
二、配置副本集(所有节点执行)
1.修改MongoDB配置文件; 编辑/etc/mongod.conf,替换默认配置为以下内容(注意替换bindIp为当前节点IP):
systemLog: destination: file logAppend: true path: /data/apprun/mongodb/logs/mongod.log storage: dbPath: /data/apprun/data/mongodb processManagement: fork: true pidFilePath: /apprun/mongodb/run/mongod.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27017 bindIp: 172.29.178.53 security: authorization: enabled keyFile: /apprun/mongodb/etc/mongodb-keyfile replication: replSetName: "rs0"
备注:storage:下的
journal:
enabled: true
作用与重要性: journal日志是MongoDB确保数据持久性和支持故障恢复的核心机制。启用后(enabled: true),MongoDB会将所有数据变更先写入journal文件,再异步刷新到内存和数据文件,从而在服务器崩溃或断电时能通过重放日志恢复数据,避免数据损坏或丢失。
该功能对mongod进程(数据库实例)有效,且默认在64位系统上启用,建议生产环境中始终开启以保障数据安全。
默认是开启的,所以这里未写
2.生成Keyfile(用于节点认证,所有节点执行)
在其中一个节点生成密钥文件,复制到其他节点(确保权限为600):
# 在137节点生成
openssl rand -base64 756 > /data/mongodb/keyfile
sudo chmod 600 /data/mongodb/keyfile
sudo chown 用户:用户 /data/mongodb/keyfile
# 复制到138和139节点
scp /apprun/mongodb/etc/mongodb-keyfile apprun@192.168.109.138:/apprun/mongodb/etc/
scp /apprun/mongodb/etc/mongodb-keyfile apprun@192.168.109.139:/apprun/mongodb/etc/
# 在138和139节点设置权限
sudo chmod 600 /data/mongodb/keyfile
##sudo chown 用户:用户 /data/mongodb/keyfile
sudo chown apprun:apprun /data/mongodb/keyfile
三、启动MongoDB服务(所有节点执行)
sudo systemctl start mongod
sudo systemctl enable mongod # 设置开机自启
# 验证服务状态
sudo systemctl status mongod
四、初始化副本集(仅在137节点执行)
1.连接MongoDB并创建管理员用户
先禁用认证(临时步骤,初始化后重新启用):
# 修改配置文件,注释security部分,重启服务
sudo sed -i 's/^security:/#security:/g' /etc/mongod.conf
sudo sed -i 's/^ authorization:/# authorization:/g' /etc/mongod.conf
sudo sed -i 's/^ keyFile:/# keyFile:/g' /etc/mongod.conf
sudo systemctl restart mongod
# 连接MongoDB
不同版本连接方式可能有差别~
mongosh --host 192.168.109.137:27017
或
/apprun/mongodb/bin/mongosh mongodb://92.168.109.137:27017
# 创建管理员用户
> use admin
> db.createUser({
user: "admin",
pwd: "yourStrongPassword", # 替换为实际密码
roles: [{ role: "root", db: "admin" }]
})
> exit
角色说明:root角色是MongoDB最高权限角色,可执行创建用户、修改副本集、备份数据等所有操作。
# 恢复认证配置并重启服务
sudo sed -i 's/^#security:/security:/g' /etc/mongod.conf
sudo sed -i 's/^# authorization:/ authorization:/g' /etc/mongod.conf
sudo sed -i 's/^# keyFile:/ keyFile:/g' /etc/mongod.conf
sudo systemctl restart mongod
2.初始化副本集 使用管理员用户连接,执行初始化命令:
mongosh --host 192.168.109.137:27017 -u admin -p yourStrongPassword --authenticationDatabase admin
或
/apprun/mongodb/bin/mongosh mongodb://192.168.109.137:27017 -u admin -p yourStrongPassword --authenticationDatabase admin
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.109.137:27017" },
{ _id: 1, host: "192.168.109.138:27017" },
{ _id: 2, host: "192.168.109.139:27017" }
]
})
五、验证副本集状态
1.查看副本集配置
> rs.conf() # 确认成员列表正确
> rs.status() # 查看节点状态(主节点为PRIMARY,从节点为SECONDARY)
2.测试数据同步 在主节点插入数据,从节点验证同步:
# 主节点执行
> use test
> db.test.insert({name: "test"})
# 从节点执行(需先设置读偏好)
> rs.secondaryOk() # 允许从节点读
> db.test.find() # 应返回插入的数据
六、生产环境优化(可选)
设置从节点优先级:通过rs.reconfig()调整成员的priority(范围0-100,默认1),控制主节点选举优先级。
配置 oplog 大小:修改mongod.conf中的replication.oplogSizeMB(默认5%磁盘空间),适合大数据量场景。
监控集群状态:使用mongostat、mongotop或第三方工具(如Prometheus+Grafana)监控节点健康和性能。
常见问题解决:
1.节点无法加入副本集:检查防火墙是否开放27017端口,或bindIp是否配置正确(需允许其他节点访问)。
2.认证失败:确保所有节点的keyfile内容一致,权限为600,且配置文件中security.keyFile路径正确。
3.主节点选举失败:确保副本集成员数为奇数(3节点无需仲裁节点),且多数节点存活(至少2个)。
浙公网安备 33010602011771号