mongodb 副本集学习

机器内存一定大于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台以上的备份节点
主从模式可以切换成副本集模式
副本集模式也可以模仿主从模式



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值