Conjunto de réplicas do MongoDB
Arquitetura do Conjunto de Réplicas
![](https://img-blog.csdnimg.cn/715ef07d1b204a8ba99bccd1ff97f1d1.png)
![](https://img-blog.csdnimg.cn/daed29a64c744de0b41103e9ad9e55b7.png)
![](https://img-blog.csdnimg.cn/19b621da5af04aa2b1ee07cdb82f80c2.png)
![](https://img-blog.csdnimg.cn/329d641d9b1840f7a352711288ce315a.png)
![](https://img-blog.csdnimg.cn/12fc9880944f43c288b5659d43bf6194.png)
mkdir ‐p /data/db{1,2,3}
systemLog:
destination: file
path: /data/db1/mongod.log # log path
logAppend: true
storage:
dbPath: /data/db1 # data directory
net:
bindIp: 0.0.0.0
port: 28017 # port
replication:
replSetName: rs0
processManagement:
fork: true
mongod ‐f /data/db1/mongod.conf
mongod ‐f /data/db2/mongod.conf
mongod ‐f /data/db3/mongod.conf
# 永久关闭,将SELINUX=enforcing改为SELINUX=disabled,设置后需要重启才能生效
vim /etc/selinux/config
# 查看SELINUX
/usr/sbin/sestatus ‐v
# mongo ‐‐port 28017
# 初始化复制集
> rs.initiate()
# 将其余成员添加到复制集
> rs.add("192.168.65.174:28018")
> rs.add("192.168.65.174:28019")
# mongo ‐‐port 28017
# 初始化复制集
> rs.initiate({
_id: "rs0",
members: [{
_id: 0,
host: "192.168.65.174:28017"
},{
_id: 1,
host: "192.168.65.174:28018"
},{
_id: 2,
host: "192.168.65.174:28019"
}]
})
# mongo ‐‐port 28017
rs0:PRIMARY> db.user.insert([{name:"fox"},{name:"monkey"}])
# mongo ‐‐port 28018
# 指定从节点可读
rs0:SECONDARY> rs.secondaryOk()
rs0:SECONDARY> db.user.find()
rs.status()
![](https://img-blog.csdnimg.cn/a60ec4b7e5394f7facc24805f8901ebe.png)
Veja as funções atuais do nó:
db.isMaster()
Comandos do Conjunto de Réplicas do Mongo Shell
comando |
descrever |
rs . adicionar() |
Adicionar novos nós |
rs.ad dArb () |
Adicionar um |
rs.conf() |
Retorne as informações de configuração do conjunto de réplicas |
rs.fr eeze () |
Impedir que o nó atual seja eleito como o nó mestre por um período de tempo |
rs.ajuda() |
Ajuda de comando de retorno para conjunto de réplicas |
rs. iniciar () |
Inicializar um novo conjunto de réplicas |
rs.printReplicationInfo ( ) |
Retorna um relatório de status da replicação da perspectiva do nó mestre |
rs.printSeconda ryReplicationInfo () |
Retorna um relatório de status de replicação da perspectiva do nó escravo |
rs. reconfigurar () |
Atualize a configuração para o conjunto de réplicas reaplicando |
rs.re mover () |
Remover um nó de um conjunto de réplicas |
rs . secundárioOk ( ) |
Define o nó escravo para ser legível para a conexão atual |
rs.st atus () |
Retorna informações de status do conjunto de réplicas. |
rs. stepdown () |
Deixe o primário atual se tornar um nó escravo e acionar a eleição |
rs. sincronizarDe () |
Defina o nó do qual o nó do conjunto de réplicas sincroniza os dados, o que substituirá a lógica de seleção padrão |
Método de conexão do conjunto de réplicas
![](https://img-blog.csdnimg.cn/300c8deb97164303a079e57740e95143.png)
configuração do conjunto de réplicas da operação springboot
spring:
data:
mongodb:
uri:
mongodb://yanqiuxiang:[email protected]:192.168.30.130:192.168.30.130:28019/test?authSource=admin&replicaSet=rs0
![](https://img-blog.csdnimg.cn/72b14d563fd44f878af40e8eb7d9f8d5.png)
Configurar nós ocultos
cfg = rs.conf()
cfg.members[1].priority = 0
cfg.members[1].hidden = true
rs.reconfig(cfg)
cfg = rs.conf()
cfg.members[1].priority = 0
cfg.members[1].hidden = true
#延迟1分钟
cfg.members[1].slaveDelay = 60
rs.reconfig(cfg)
![](https://img-blog.csdnimg.cn/06de9985fa1a45e1aadbb080e955c358.png)
![](https://img-blog.csdnimg.cn/260ec141427244a8bd0c35ab5e5ee01f.png)
Adicionar nó de votação
# 为仲裁节点创建数据目录,存放配置数据。该目录将不保存数据集
mkdir /data/arb
# 启动仲裁节点,指定数据目录和复制集名称
mongod ‐‐port 30000 ‐‐dbpath /data/arb ‐‐replSet rs0
# 进入mongo shell,添加仲裁节点到复制集
rs.addArb("ip:30000")
rs.remove("ip:port")
cfg = rs.conf()
cfg.members.splice(2,1) #从2开始移除1个元素
rs.reconfig(cfg)
cfg = rs.conf()
cfg.members[0].host = "ip:port"
rs.reconfig(cfg)
Membros votantes |
maioria |
Número de Falhas Toleradas |
1 |
1 |
0 |
2 |
2 |
0 |
3 |
2 |
1 |
4 |
3 |
1 |
5 |
3 |
2 |
6 |
4 |
2 |
7 |
4 |
3 |
![](https://img-blog.csdnimg.cn/4db8b05a4b8a4cb48aae52a150df9d9f.png)
![](https://img-blog.csdnimg.cn/b22ca3927dfe44c6b40fb517f36e64a4.png)
Avaliação de impacto nos negócios
# MongoDB Drivers 启用可重试写入
mongodb://localhost/?retryWrites=true
# mongo shell
mongo ‐‐retryWrites
![](https://img-blog.csdnimg.cn/aeb618bff59042cd8430d593a6f85d3b.png)
o que é oplog
![](https://img-blog.csdnimg.cn/12839f709b9949368585d18ff60f6e5c.png)
use local
db.oplog.rs.find().sort({$natural:‐1}).pretty()
![](https://img-blog.csdnimg.cn/ea082e47961b4a73a281af656cdcc60c.png)
oplogSizeMB = min(磁盘可用空间*5%,50GB)
# 将复制集成员的oplog大小修改为60g 指定大小必须大于990M
db.adminCommand({replSetResizeOplog: 1, size: 60000})
# 查看oplog大小
use local
db.oplog.rs.stats().maxSize
db.coll.insert({_id:1,x:[1,2,3]})
rs0:PRIMARY> db.coll.update({_id: 1}, {$push: {x: { $each: [4, 5] }}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
rs0:PRIMARY> db.coll.find()
{ "_id" : 1, "x" : [ 1, 2, 3, 4, 5 ] }
rs0:PRIMARY> use local
switched to db local
rs0:PRIMARY> db.oplog.rs.find({ns:"test.coll"}).sort({$natural:‐1}).prett
()
{
"op" : "u",
"ns" : "test.coll",
"ui" : UUID("69c871e8‐8f99‐4734‐be5f‐c9c5d8565198"),
"o" : {
"$v" : 1,
"$set" : {
"x.3" : 4,
"x.4" : 5
}
},
"o2" : {
"_id" : 1
},
"ts" : Timestamp(1646223051, 1),
"t" : NumberLong(4),
"v" : NumberLong(2),
"wall" : ISODate("2022‐03‐02T12:10:51.882Z")
}
![](https://img-blog.csdnimg.cn/155c764c26db418dbf1816da333c1a26.png)
mongorestore ‐‐host 192.168.30.130:27018 ‐‐db test ‐‐collection emp ‐u yanqiuxiang ‐p
yanqiuxiang
‐‐authenticationDatabase=admin rollback/emp_rollback.bson
cfg = rs.config()
cfg.settings.chainingAllowed = false
rs.reconfig(cfg)
db.adminCommand( { replSetSyncFrom: "hostname:port" })