美文网首页
mongodb复制集

mongodb复制集

作者: 山口肅彧 | 来源:发表于2018-08-22 18:20 被阅读0次

mongodb复制集技术

mongodb复制结构功能

  • 1、failover过程
    选主
    切换
  • 2、是否对应用透明化
    vip
  • 3、数据补偿的问题
    两阶段数据补偿
    对于mysql用的MHA+vip+binlogserver

mongodb通过复制集技术就可以很好的解决以上所有问题
不需要第三方任何的辅助软件。自己原生态支持的。基于paxos和RAFT算法,带有投票功能,一种分布算法协议。

Replcation Set配置过程详解

1、规划

三个以上的mongodb节点(或多实例)
多实例:

  • 1.多个端口:29017、29018、29019、29020
  • 2.多套目录:
    mkdir -p /mongodb/290{17..20}/{conf,data,log}
  • 3.多套配置文件
    touch /mongodb/290{17..20}/conf/mongod.conf
  • 4.配置文件

配置文件内容如下

    cat /mongodb/29017/conf/mongod.conf
    systemLog:  
      destination: file  
      path: /mongodb/29017/log/mongodb.log  
      logAppend: true  
    storage:  
      journal:  
        enabled: true  
      dbPath: /mongodb/29017/data  
      directoryPerDB: true  
      #engine: wiredTiger  
      wiredTiger:  
        engineConfig:  
          cacheSizeGB: 1  
          directoryForIndexes: true  
        collectionConfig:  
          blockCompressor: zlib  
        indexConfig:  
          prefixCompression: true  
    processManagement:  
      fork: true  
    net:  
      port: 29017  
    replication:  
      oplogSizeMB: 2048  
      replSetName: my_repl  

复制并修改配置文件

\cp  /mongodb/29017/conf/mongod.conf          /mongodb/290{18..20}/conf/

//修改端口
sed 's#29017#29018#g'     /mongodb/29018/conf/mongod.conf -i

sed 's#29017#29019#g'     /mongodb/29019/conf/mongod.conf -i

sed 's#29017#29020#g'     /mongodb/29020/conf/mongod.conf -i

//修改属主和属组
chown -R mongod:mongod /mongodb

多实例部署脚本

#!/bin/bash  
id mongod &>/dev/null  
if [ $? == 0 ];then  
    :  
else  
    groupadd -g 800 mongod&&useradd -u 801 -g mongod  
fi  
a=1  
for i in 290{17..20};do  
    [ -d /application/mongodb/$i ] && : || mkdir -p  /application/mongodb/$i/{conf,data,log}  
    cat >/application/mongodb/$i/conf    /mongodb.conf <<EOF  
systemLog:  
  destination: file  
  path: /application/mongodb/$i/log/m  ongodb.log  
  logAppend: true  
storage:  
  journal:  
    enabled: true  
  dbPath: /application/mongodb/$i/dat  a  
  directoryPerDB: true  
  #engine: wiredTiger  
  wiredTiger:  
    engineConfig:  
      cacheSizeGB: 1  
      directoryForIndexes: true  
    collectionConfig:  
      blockCompressor: zlib  
    indexConfig:  
      prefixCompression: true  
processManagement:  
  fork: true  
net:  
  port: $i  
replication:  
  oplogSizeMB: 2048  
  replSetName: my_repl  
EOF  
   chown -R mongod:mongod    /application/mongodb/*  
done  
  • 5.启动多个实例备用

      su - mongod  
      mongod -f  /mongodb/29017/conf/mongod.        conf  
      mongod -f  /mongodb/29018/conf/mongod.        conf  
      mongod -f  /mongodb/29019/conf/mongod.        conf  
      mongod -f  /mongodb/29020/conf/mongod.        conf  
    

多实例命令脚本

#!/bin/bash
#chkconfig: 2345 80 90
#description:mongodb
MONGODIR=/application/mongodb
MONGOD=$MONGODIR/bin/mongod
. /etc/init.d/functions
start() {
  for i in 290{17..20};do
    MONGOCONF=$MONGODIR/$i/conf/mongo       db.conf
    su - mongod -c "$MONGOD -f      $MONGOCONF"
    [ $? == 0 ] && action $0        /bin/true || action $0 /bin/false
  done
}

stop() {
  for i in 290{17..20};do
    MONGOCONF=$MONGODIR/$i/conf/mongo       db.conf
    su - mongod -c "$MONGOD -f      $MONGOCONF --shutdown"
    [ $? == 0 ] && action $0        /bin/true || action $0 /bin/false
  done
}
case "$1" in
  start)
 start
 ;;
  stop)
 stop
 ;;
  restart)
 stop
sleep 2
 start
 ;;
  *)
 echo $"Usage: $0   {start|stop|restart}"
 exit 1
esac

2、配置复制集:

  • 1.一主两从,从库是两个普通从库

      //在primary节点进行配置操作  
      mongo --port 29017  
     //设置复制集参数信息  
      >use admin
      >config = {_id: 'my_repl', members: [
                                {_id: 0,host:'10.0.0.220:29017'}   ,
                                {_id: 1,host:'10.0.0.220:29018'}   ,
                                {_id: 2,host:'10.0.0.220:29019'}   ]
                }
    
      //初始化复制集
      >rs.initiate(config) 
    
  • 2.一主两从,有一个是arbiter(投票节点,只参与投票不参与数据复制)

      >config = {_id: 'my_repl', members: [
                        {_id: 0, host: '10.0.0.52:29017'},
                        {_id: 1, host: '10.0.0.52:29018'},
                        {_id: 2, host: '10.0.0.52:29019',"arbiterOnly":true}]
        }
      >rs.initiate(config) 
    
  • 3、复制集测试:

      my_repl:PRIMARY> db.movies.insert([ 
      ... { "title" : "Jaws", "year" :1975,"imdb_rating" : 8.1 },
      ... { "title" : "Batman", "year" :1989, "imdb_rating" : 7.6 },
      ... ] );
      //成功结果  
      BulkWriteResult({  
          "writeErrors" : [ ],  
          "writeConcernErrors" : [ ],  
          "nInserted" : 2,  
          "nUpserted" : 0,  
          "nMatched" : 0,  
          "nModified" : 0,  
          "nRemoved" : 0,  
          "upserted" : [ ]  
      })
    

切换到从库19,18或20查看

mongo --port 29018    
my_repl:SECONDARY> db.movies.find().pretty();
**在mongodb复制集当中,默认从库不允许读写。**
//要打开读写功能,需要如下参数
rs.slaveOk();
my_repl:SECONDARY> db.movies.find().pretty(); 
  • 4、复制集管理操作:

    • 1.查看复制集状态:

      rs.status();//查看整体复制集状态     
      rs.isMaster();//查看当前是否是主节点
      
    • 2.添加删除节点

      rs.add("ip:port"); //新增普通从节点
      rs.addArb("ip:port"); //新增仲裁节点
      rs.remove("ip:port"); //删除一个节点
      

    注:添加特殊节点时,
    1.可以在搭建过程中设置特殊节点;
    2.可以通过修改配置的方式将普通从节点 设置为特殊节点;
    找到需要改为延迟性同步的数组号;

      >config = {_id: 'my_repl', members: [
                        {_id: 0, host: '10.0.0.220:29017'},
                        {_id: 1, host: '10.0.0.220:29018'},
                        {_id: 2, host: '10.0.0.220:29019',"arbiterOnly":true}]}  
    
    • 3.配置延时节点(一般延时节点也配置成hidden)

      cfg=rs.conf()  
      cfg.members[2].priority=0    
      //members[N]  
      //[N]代表_id号码,选择操作对象     
      //priority设定为0,代表不被选主,但参与投票过程
      cfg.members[2].slaveDelay=120  
      //slaveDelay=120  //延时120秒      
      cfg.members[2].hidden=true  
      //hidden=true
      //代表设置为隐藏节点
      
      rs.reconfig(cfg) 
      
    • 4.更新复制集的ip或端口

      cfg=rs.conf()    
      cfg.members[0].host=[newip:port]
      cfg.members[1].host=[newip:port]
      cfg.members[2].host=[newip:port]
      rs.reconfig(cfg)
      

    配置投票节点
    cfg=rs.conf()
    cfg.members[2].arbiterOnly=true //arbiterOnly=true,代表设置为投票节点,不复制数据
    rs.reconfig(cfg)

    • 6.配置成功后,通过以下命令查询配置后的属性

      rs.conf(); 
      
  • 5、副本集其他操作命令:

    • 查看副本集的配置信息

      admin> rs.config()  
      
    • 查看副本集各成员的状态

      admin> rs.status()
      
    • 副本集角色切换(不要人为顺便操作)

      admin> rs.stepDown()
      

    注:
    admin> rs.freeze(300)
    //锁定从,使其不会转变成主库
    freeze()和stepDown单位都是秒。

    • 设置副本节点可读:在副本节点执行

      admin> rs.slaveOk()
      

    例:

    admin> use app  
    switched to db app  
    app> db.createCollection('a')  
    { "ok" : 0, "errmsg" : "not   master", "code" : 10107 }  
    
    • 查看副本节点

      admin> rs.printSlaveReplicationInfo()
      source: 192.168.1.22:27017
      syncedTo: Thu May 26 2016 10:28:56 GMT+0800 (CST)
      0 secs (0 hrs) behind the primary  
      

复制集重点掌握内容:
1、mongodb实现过程(raft)
2、搭建
3、添加删除节点
4、节点特性设置

相关文章

  • mongodb——分布式

    复制集 mongodb在集群环境中,通过复制的形式对数据进行冗余。mongodb复制集有Primary、Secon...

  • MongoDB 分片集群技术

    1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。...

  • MongoDB复制集 搭建

    MongoDB复制集概述 准备 初始化复制集主节点、添加从节点和仲裁节点 检查各个节点local库信息 检查复制集...

  • mongodb复制集

    mongodb复制集技术 mongodb复制结构功能 1、failover过程选主切换 2、是否对应用透明化vip...

  • MongoDB复制集

    1、MongoDB复制集(副本集)简介 复制集模式(replicaSet mode),也叫副本集模式,指两个及以上...

  • Mongodb复制集

    为什么需要使用复制集 如果系统只存在一个数据库,当这个数据库发生故障不可用,那整个系统将不可用。Mongodb复制...

  • Mongodb复制集

    Mongodb复制集 作用 复制集的主要意义是实现服务高可用 实现依赖两个方面功能: 1)数据写入的时候,会将数据...

  • mongodb复制集

    1. 高可用 ● MongoDB 复制集的主要意义在于实现服务高可用● 它的现实依赖于两个方面的功能:• 数据写入...

  • mongodb性能问题诊断与优化

    mongodb目前在业界的使用一般可分为两种架构:主从复制集和分片复制集集群。 因为分片复制集包含了主从复制集的功...

  • Mongodb复制集配置

    配置环境:centos7配置mongodb复制集 VMware+centos7+mongodb4.2.0 1.搭...

网友评论

      本文标题:mongodb复制集

      本文链接:https://www.haomeiwen.com/subject/ibgyiftx.html