mongodb搭建副本集
一、副本集介绍
副本集有两种类型三种角色 1、两种类型: 主节点(Primary)类型:数据操作的主要连接点,可读写。 次要(辅助、从)节点(Secondaries)类型:数据冗余备份节点,可以读或选举。
2、三种角色: 主要成员(Primary):主要接收所有写操作。就是主节点。 副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可 以读操作(但需要配置)。是默认的一种从节点类型。 仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副 本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。
二、安装mongoDB
https://blog.csdn.net/qq_27378621/article/details/80933354
三、配置副本集
1、业务比较简单,搭建主从就好了。文件夹流程图。
2、主配置文件master.conf
# mongodb端口
port=27017
# 绑定ip,只有这个ip才可以访问上mongodb
bind_ip=127.0.0.1
# 日志文件的路径
logpath=D:\MongoDB\rs\data\main\main.log
# 数据文件的目录
dbpath=D:\MongoDB\rs\data\main\db
# 日志以追加的方式存在
logappend=true
# mongodb进程的pid的值将存入此文件
pidfilepath=D:\MongoDB\rs\data\main\main.pid
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
# oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=mosh
# 开启数据验证
auth=true
oplogSize=100
#数据验证配置文件
keyFile=D:\MongoDB\rs\conf\keyfile
3、从配置文件slaver.conf
# mongodb端口
port=27018
# 绑定ip,只有这个ip才可以访问上mongodb
bind_ip=127.0.0.1
# 日志文件的路径
logpath=D:\MongoDB\rs\data\master\master.log
# 数据文件的目录
dbpath=D:\MongoDB\rs\data\master\db
# 日志以追加的方式存在
logappend=true
# mongodb进程的pid的值将存入此文件
pidfilepath=D:\MongoDB\rs\data\master\master.pid
# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
# oplogSize=1024
# 复制集的名称,同一个复制集的名称必须要相同
replSet=ms
4、执行节点启动命令,注意先启动的为主节点。我按我的顺序来,先配置主节点、后配置从节点
主节点配置 打开2个cmd Cmd1: mongod --config “D:\mongodb6.0.0\rs\conf\master.conf”
Cmd2: mongo --port 27017
rs.initiate() 第一次会初始化成功 1成功 0失败 如果报错 already initialized 关闭mongo重新启动 重新 rs.initiate()
rs.status() 查看副本集状态
从节点配置 mongod --config “D:\mongodb6.0.0\rs\conf\slaver.conf”
主节点配置
rs.add(127.0.0.1:27018) 添加从节点到副本集
rs.status() 查看副本集状态
此时可以用数据库连接软件调试主节点添加数据库和集合子节点会默认复制。
5、为了安全考虑,使用Keyfile访问控制部署新副本集
主从都需要配置 需要安装openssl openssl rand -base64 666 > D:\mongo\conf 生成keyfile文件
6、给mongodb设置密码
https://dandelioncloud.cn/article/details/1486526183390171138
7、持续运行
注册命令 mongod.exe --config “D:\mongodb6.0.0\rs\conf\master.conf” --service --serviceName “mongodbMaster” --install
mongod.exe --config “D:\mongodb6.0.0\rs\conf\slaver.conf” --service --serviceName “mongodbSlaver” --install
启动注册好的两个服务 net start mongodbMaster net start mongodbSlaver
8、node连接mongodb
var express = require('express')
var app = express()
//mongoose这个模块的作用是在node环境中操作mongodb数据库 不需要在cmd窗口中操作mongodb数据库
const mongodb=require('mongoose')
const db='mongodb://ms:ms123@localhost:27017/power'
//链接数据库 如果project这个数据库不存在 就会自动创建的
mongodb.connect(db, { useNewUrlParser: true, useUnifiedTopology: true })
.then(async(res) => {
console.log("远程数据库连接成功~~")
//设计集合中的数据名字与数据类型
let studentSchema=new mongodb.Schema({
name:String,
age:Number
})
//让banji这个集合应用studentSchema
let Student = mongodb.model('user',studentSchema)
app.get('/', function (req, res) {
console.log(req.query)
// Student.create(req.query)
res.send('hello world')
})
app.listen(3500)
// let add=[
// {
// name:'李四',
// weight:"60.5",
// height:"173"
// },{
// name:"张三",
// weight:"71",
// height:'174'
// }
// ]
//增加数据
// Student.create(add)
// //删除数据
// let delect= await Student.deleteOne({name:"李四"})
// console.log(delect)
//修改数据
// let updete= await Student.updateOne({name:"李四"},{$set:{name:"王五"}})
// console.log(updete)
// //查找数据 findOne
const result= await Student.find({name:"李四"}).sort({_id:1})
console.log(result)
}).catch((err) => {
console.log(err)
});
9、Q&A
Q1:无法注册服务
方法一:可以先将原本已有注册的mongodb(刚安装完会自动注册一个mongodb端口为27017的服务)删除,可以在W+R输入services.msc找到mongoDB的服务使用管理员打开cmd然后输入sc delele 服务名即可删除,之后再重新注册一下副本集的服务。
方法二:不适用conf文件注册,将conf文件上所需的配置一一提到命令行,例子: mongod.exe --dbpath “” ----profileFilter “” --logpath “” --replSet “” … --service --serviceName “” --install
#特别注意 replSet这个配置一定不能忘记,并且两个服务的replSet必须一样
Q2:数据库软件无法连接
是否对外开放了你的服务端口 如若用户密码设置了,检查是否真确 如果报错 node is not in primary or recovering state这个错误,就需要进行 3、启动副本集 找到第2步骤进行配置主从节点
|