MongoDB 复制(副本集)学习笔记

本文实例讲述了MongoDB 复制(副本集)。分享给大家供大家参考,具体如下:

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)

希望本文所述对大家MongoDB数据库程序设计有所帮助。

(0)

相关推荐

  • MongoDB在不同主机间复制数据库和集合的教程

    1. db.cloneCollection() db.cloneCollection(from, collection, query) 在不同的mongodb实例间复制数据,db.cloneCollection是cloneCollection数据库命令的一个外在体现. function (from, collection, query) { assert( isString(from) && from.length ); assert( isString(collection) &

  • 详解mongoDB主从复制搭建详细过程

    详解mongoDB主从复制搭建详细过程 实验目的搭建mongoDB主从复制 主 192.168.0.4 从 192.168.0.7 mongodb的安装 1: 下载mongodb www.mongodb.org 下载最新的stable版 查看自己服务器 适合哪个种方式下载(wget 不可以的 可以用下面方式下载) wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.0.5.tgz curl -O -L https

  • mongodb主从复制_动力节点Java学院整理

    从这一篇开始我们主要讨论mongodb的部署技术. 我们知道sql server能够做到读写分离,双机热备份和集群部署,当然mongodb也能做到,实际应用中我们不希望数据库采用单点部署,如果碰到数据库宕机或者被毁灭性破坏那是多么的糟糕. 一:主从复制 1: 首先看看模型图 2: 从上面的图形中我们可以分析出这种架构有如下的好处: <1> 数据备份. <2> 数据恢复. <3> 读写分离. 3:下面我们就一一实践 实际应用中我们肯定是多服务器部署,限于自己懒的装虚拟机,

  • MongoDB 主从复制实例讲解

    主从复制可以用来做数据库的备份,故障恢复,读写分离. 本实验使用Mongodb 3.2版本,我们先查看一下mongod的帮助 [root@localhost mongodb]# mongod --help .....省略 Master/slave options (old; use replica sets instead): --master master mode --slave slave mode --source arg when slave: specify master as <s

  • MongoDB入门教程之主从复制配置详解

    从这一篇开始我们主要讨论mongodb的部署技术. 我们知道sql server能够做到读写分离,双机热备份和集群部署,当然mongodb也能做到,实际应用中我们不希望数据库采用单点部署, 如果碰到数据库宕机或者被毁灭性破坏那是多么的糟糕.  一:主从复制 1: 首先看看模型图   2: 从上面的图形中我们可以分析出这种架构有如下的好处: <1>  数据备份. <2>  数据恢复. <3>  读写分离.  3:下面我们就一一实践 实际应用中我们肯定是多服务器部署,限于自

  • MongoDB的Master-Slave主从模式配置及主从复制要点解析

    主从配置 mongodb的master-slave模式配置方式如下 1.keyFile 生成key_file openssl rand -base64 741 > mongo_key 将mongo_key 分别置于master 和 slave mongodb user可以access的地方. 设置权限 chmod 700 mongo_key 设置 onwer chown mongodb:nogroup mongo_key 2.master配置 编辑/etc/mongodb.conf, 设置如下

  • Mongodb 副本集搭建问题总结及解决办法

    Mongodb 副本集搭建问题总结及解决办法 Mongodb数据库的副本集是由多台服务器组成,基中一台是主节点,其它为从节点,如果主节点宕机就自动切换到任意一个从节点.如果以前的主节点修复完成和正常运行就自动变成从节点,从节点不能查询数据.也可以在一台服务器装多个Mongodb端口不一样. 在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天主要负责

  • MongoDB的主从复制及副本集的replSet配置教程

    复制 MongoDB的复制功能很重要,尤其是现在的存储引擎还不支持单击持久性.不仅可以用复制来应对故障切换,数据集成,还可以做读扩展,热备份或作为离线批处理的数据源. 1.主从复制 主从复制是MongoDB最常用的复制方式.可用于备份,故障恢复和读扩展等. 基本就是搭建一个主节点和一个或多个从节点,每个从节点需要知道主节点的地址.运行mongod --master启动主服务器.运行mongod --slave --source master_address启动从服务器. [root@test02

  • MongoDB副本集丢失数据的测试实例教程

    在MongoDB副本集的测试中发现了一个丢数据的案例. 1. 概要描述 测试场景为:一主一从一验证 测试案例 step1 :关闭从副本: step 2 :向主副本中插入那条数据: step 3 :关闭主副本: step 4 :开启辅助副本,此副本升级为主副本,这是后会看到新的主副本没有刚才插入的几笔数据. ----测试时,请注意测试步骤. step 5 :原主节点 再次加入到集群中后,会变成新的辅助副本.测试插入的数据会产生回滚. 2. 具体的测试步骤 (1)测试服务器,原测试环境 主Serve

  • Mongodb副本集和分片示例详解

    前言 因为之前没用过mongo,所以最近的开发踩了不少坑,现在熟练了不少. mongo在许多地方用起来还有许多不如意的地方,比如不知道如何加行锁,虽然mongo本身可以加写锁, 多写的时候保证原子性,但不能向mysql在事务中 select ... for update 这样加锁, 这样可以在应用代码中添加逻辑并且保证该对应行不被读取或修改. 还好的是Mongodb4.0是支持事务的(看网上貌似3.6就支持了,但得自己开启).刚好前端时间有些业务需求需要用到事务来保证数据的准确性,因为一个动作内

  • MongoDB复制集原理详解

    复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用. 下图(图片源于Mongodb官方文档)是一个典型的Mongdb复制集,包含一个Primary节点和2个Secondary节点. Primary选举 复制集通过replSetInitiate命令(或

随机推荐