Ensemble de réplicas MongoDB
Architecture d'ensemble de répliques
![](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)
Afficher les rôles de nœud actuels :
db.isMaster()
Commandes de jeu de répliques de Mongo Shell
commande |
décrire |
rs . ajouter() |
Ajouter de nouveaux nœuds |
rs.ad dArb () |
Ajouter un |
rs.conf() |
Renvoyer les informations de configuration du jeu de répliques |
rs.fr eeze () |
Empêcher le nœud actuel d'être élu comme nœud maître pendant un certain temps |
rs.help() |
Renvoyer l'aide de la commande pour le jeu de réplicas |
rs. initier () |
Initialiser un nouveau jeu de répliques |
rs.printReplicationInfo ( ) |
Renvoie un rapport d'état de la réplication du point de vue du nœud maître |
rs.printSeconda ryReplicationInfo () |
Renvoie un rapport sur l'état de la réplication du point de vue du nœud esclave |
rs. reconfigurer () |
Mettre à jour la configuration du jeu de répliques en |
rs.re déplacer () |
Supprimer un nœud d' un jeu de répliques |
rs . secondaireOk ( ) |
Définit le nœud esclave pour qu'il soit lisible pour la connexion actuelle |
rs.st atus () |
Renvoie les informations d'état du jeu de répliques. |
rs. stepDown () |
Laisser le primaire actuel devenir un nœud esclave et déclencher l'élection |
rs. syncDepuis () |
Définissez le nœud à partir duquel le nœud du jeu de répliques synchronise les données, ce qui remplacera la logique de sélection par défaut |
Méthode de connexion de l'ensemble de répliques
![](https://img-blog.csdnimg.cn/300c8deb97164303a079e57740e95143.png)
configuration du jeu de répliques de l'opération 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)
Configurer les nœuds cachés
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)
Ajouter un nœud de vote
# 为仲裁节点创建数据目录,存放配置数据。该目录将不保存数据集
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)
Membres votants |
la plupart |
Nombre de pannes tolérées |
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)
Évaluation de l'impact sur les entreprises
# MongoDB Drivers 启用可重试写入
mongodb://localhost/?retryWrites=true
# mongo shell
mongo ‐‐retryWrites
![](https://img-blog.csdnimg.cn/aeb618bff59042cd8430d593a6f85d3b.png)
qu'est-ce qu'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" })