mongodb 副本集学习

原创 2015年11月20日 14:51:05
机器内存一定大于4G 要不然会失败
linux下的安装管理
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.4.tgz
tar -zxvf mongodb-linux-x86_64-3.0.4.tgz
mv  mongodb-linux-x86_64-3.0.4 mongodb
创建一个mongodb的文件夹
mkdir -p /data/app/mongodb
mkdir -p /data/app/mongodb/db
mkdir -p /data/app/mongodb/log
mkdir -p /data/app/mongodb/config
创建配置文件
vim /data/app/mongodb/mongodb.conf
port=27017                //端口
dbpath=/home/kkm/mongodb/db    //数据库存放地方
logpath=/home/kkm/mongodb/log/mongodb.log    //日志文件地址
logappend=true        //日志追加的方式
fork=true        //以守护进程的方式运行MongoDB,创建服务器进程
auth=true        //启用验证
replSet=mktest
其他的见别的文件

启动mongodb
/home/kkm/mongodb/bin/mongod -f /home/kkm/mongodb/config/mongodb.conf


然后进入任意一个机器的shell下
./bin/mongo
config={"_id":"mktest","members":[{"_id":0,"host":"xxx.xxx.146.220:27017"},{"_id":1,"host":"xxx.xxx.146.144:27017"},{"_id":2,"host":"xxxx.xxx.148.211:27017"}]}
rs.initiate(config)
如果出现结果 ok=1 那么就成功了
db.person.insert({"name":"mkk"})
在另外两台机器上
db.person.find();
如果出现错误  { "$err" : "not master and slaveOk=false", "code" : 13435 }
在上面配置
rs.slaveOk();
缺点是每次进入shell都需要这个命令。。可以用以下方案解决
vim ~/.mongorc.js 每次打开shell都会自动加载这个文件

rs.slaveOk();


mongodb 副本集 多台机器中同一时刻只有一台是用于写操作,这为mongoDB提供了数据一致性的保障.担当Primary角色的机器能把读操作分发给slave机器

修改副本集
rs.add("server-4:27017")
rs.remove("server-1:27017")
重新配置副本集时 主节点会退化成普通节点,以便接受新的配置,然后会恢复,这个期间副本集中暂时没有主节点 之后会恢复正常
修改配置信息
var config=rs.config()
config.members[1].host="server-2:27017"

rs.reconfig(config)


选举仲裁者
当剩下的可用节点数是偶数的时候 这时候就需要仲裁者投票了
如果可能 尽量在副本集中使用奇数个数的数据成员 而不要使用仲裁者

优先级 优先级用于表示一个成员渴望成为主节点的程序 范围是0-100 默认是1  优先级为0的永远不能成为主节点
rs.add({"_id":4,"host":"xxx","priority":1.5}) 添加一个优先级为1.5的成员
如果设置成功。。那么之前默认为1的主节点就会自动退位,这个节点就会成为新的主节点,但是如果数据不是最新的 那么需要等数据更新完成之后才会成为主节点

隐藏成员
隐藏成员不会作为复制源
var config=rs.config()
config.members[2].hidden = 0
config.members[2].priority=0
rs.reconfig(config)

延迟备份节点
主要是为了防止不小心删除主数据库,延迟备份节点比主节点延迟一定的时间 秒  如果不小心删除了主数据库 可以在这个时间内把数据恢复过来
slaveDelay

创建索引
有时候 备份节点并不需要与主节点拥有相同的索引,甚至可以没有索引。可以使用 buildIndex : false 阻止备份创建索引
另外这个选项是需要成员的优先级为0



从应用程序链接到副本集

等待写入复制
如果希望不管发生什么都将写入操作保存到副本集中,那么必须要确保写入操作被同步到了副本集的 大多数
使用getLastError命令检查写入是否成功,也可以使用这个命令来确保写入操作被复制到备份节点
db.runCommand({"getLastError":1,"w":"majority"})
假设在执行这个命令的时候 只有主节点和一个仲裁节点可以用。那么主节点就无法将这个写入操作复制到副本集中的任何成员,getlasterror并不知道需要等待多久,所以会一直等待下去
db.runCommand({"getLastError":1,"w":"majority","wtimeout":1000})
设置getlasterror等待1000秒
通常使用w来控制写入速度,mongodb的写入速度太快,主节点上执行完毕之后,备份节点来不及跟上。
定期调用getlasterror把w的参数值设置成大于1的值  如果w的值只1的话 相当于没有设置这个参数

副本集只允许在主节点上进行写操作
如果考虑写入之后马上读取 并且负载均衡的话 应该使用 分片


副本集管理
单机启动 主要是把这个主节点重新用另外一个端口启动,那么这个副本集就会重新选择一个主节点。。然后在操作完成之后把这个节点重新加入到副本集中 那么它会自动与其他的副本集中的节点进行同步

副本集最多只能拥有12个成员

主节点降为备份节点 并维持60秒
rs.stepDown(60)

复制单个数据库的情况下 可以使用主从模式   或者需要11台以上的备份节点
主从模式可以切换成副本集模式
副本集模式也可以模仿主从模式



相关文章推荐

MongoDB副本集学习(一):概述和环境搭建

MongoDB副本集学习(一):概述和环境搭建 MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/co...

MongoDB学习笔记(3)主从复制和副本集

概述 环境配置 简单的在本机c盘下方了两个目录,mongodb模拟主服务,_1模拟从服务。唯一不同的是配置文件的区别。 master: dbpath=C:\mongodb\data\db logpa...

MongoDB副本集学习(二):基本测试与应用

MongoDB副本集学习(二):基本测试与应用 简单副本集测试 这一节主要对上一节搭建的副本集做一些简单的测试。 我们首先进入primary节点(37017),并向test....

MongoDB学习记录08-复制(副本集)

什么是复制?保障数据的安全性 数据高可用性 (24*7) 灾难恢复 无需停机维护(如备份,重建索引,压缩) 分布式读取数据 故障自动转移副本集配置新建如下文件夹启动三个mongodb节点(一...

学习MongoDB--(9-4):复制(副本集)

先说一下副本集的概念:有自动故障恢复功能的主从结构!前面讲到的主从结构和副本集最大的区别就是:副本集没有固定的“主节点”,整个集群结构会动态选举出一个“主节点”,当其不能工作了,则会动态变更到其他节点...

(学习笔记)MongoDB 分布式搭建 --- 副本集分片

目的:搭建一个简易的 MongoDB副本集–分片集群 工具:一台虚拟机 环境:Linux(CentOS 6) 大体流程: 创建2个副本集 shard1,shard2。每个副本集有1个主节点,2...

MongoDB搭建副本集教程

  • 2015年03月24日 16:16
  • 384KB
  • 下载

MongoDB学习记录11-分片-副本集(mongodb3.2版本以后)

结构图配置分片A1 新建如下目录 2 分别启动分片A的三个节点[root@localhost bin]# ./mongod --port 30001 --shardsvr --replSet sh...

mongodb分片与副本集详细配置方案

  • 2014年05月07日 14:00
  • 255KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mongodb 副本集学习
举报原因:
原因补充:

(最多只允许输入30个字)