MongoDB中副本集的示例分析

69次阅读
没有评论

共计 2729 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要介绍了 MongoDB 中副本集的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

具体如下:

replication set 复制集,
复制集,多台服务器维护相同的数据副本,提高服务器的可用性。
MongoDB 复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。

设置过程:

(1)创建示例

假设创建三台,创建三个实例目录和日志目录:
mkdir /home/m17 /home/m18 /home/m19 /home/mlog
启动三个示例,端口分别为 27017、27018、27019。

./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=rs2 --smallfiles
./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=rs2 --smallfiles
./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=rs2 --smallfiles

说明:

参数 –replSet 设置一样,才能属于同一个复制集
参数 –smallfiles 可以节省空间,提高速度。

然后使用 ps aux | grep mongo 可以查看到启动起来的三个端口。

(2)配置

使用客户端连接 mongo 进行配置:

[test@localhost bin]$ ./mongo

要管理配置,所以切换到 admin 上:

use admin

(配置是 json 格式)

var rsconf = {
_id: rs2 ,
members:[{ _id :0,host: 192.168.8.172:27017},
{_id:1,host: 192.168.8.172:27018},
{_id:2,host: 192.168.8.172:27019}
}

如果没有配置 ip,使用 127.0.0.1

var rsconf = {
_id: rs2 ,
members:[{_id:0,host: 127.0.0.1:27017},
{_id:1,host: 127.0.0.1:27018},
{_id:2,host: 127.0.0.1:27019}
}

执行后,使用 printjson(rsconf)查看刚才的配置。

然后执行初始化:

rs.initiate(rsconf);
  rs.initiate(rsconf);
 ok  : 1,
 operationTime  : Timestamp(1539933041, 1),
 $clusterTime  : {clusterTime  : Timestamp(1539933041, 1),
 signature  : {hash  : BinData(0, AAAAAAAAAAAAAAAAAAAAAAAAAAA=),
 keyId  : NumberLong(0)
rs2:SECONDARY

查看节点:

rs.status()

删除节点:

rs.remove(127.0.0.1:27019)

添加节点:

rs.add(127.0.0.1:27019)

切换节点:

默认是在 27017 端口,即 rs2:PRIMARY 状态,
退出 mongo 客户端命令模式,
切换到另一个端口:

[test@localhost bin]$ ./mongo --port=27018,

即切换到 rs2:SECONDARY 状态。

测试:

在主服务上,创建库和集合,

rs2:PRIMARY  use student
switched to db student
rs2:PRIMARY  db.user.insert({uid:1,name: zhang san})
WriteResult({  nInserted  : 1 })
rs2:PRIMARY  db.user.find();
{  _id  : ObjectId( 5bc9889f85a0986431fd2499),  uid  : 1,  name  :  zhang san  }

去从服务上查看

show dbs

然后看到有错误,具体错误信息是:


errmsg : not master and slaveOk=false ,

是因为 slave 默认不允许读写:

rs.slaveOk();

然后就可以看到主服务器创建的库和集合了。

同理 27019 也需要执行这个命令才能自动同步和读写。

当主服务器 27017 停掉的时候,
第二个 27018 就自动变成主服务器 master 状态。
但是 27019 需要再次执行 rs.slaveOk()才能自动同步读写。

shell 脚本:

#!/bin/bash
IP=127.0.0.1
NA=rs2
sudo mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog
sudo chmod -R 777 /home/m17 /home/m18 /home/m19 /home/mlog
./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=${NA} --smallfiles
./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=${NA} --smallfiles
./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=${NA} --smallfiles
./mongo  EOF
use admin
var rsconf = {
_id: rs2 ,
members:[{_id:0,host: ${IP}:27017 },
{_id:1,host: ${IP}:27018 },
{_id:2,host: ${IP}:27019 }
rs.initiate(rsconf)

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“MongoDB 中副本集的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计2729字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)