zoukankan      html  css  js  c++  java
  • MongoDB 集群搭建(主从复制、副本及)(五)

    六:架构管理


    mongodb的主从集群分为两种:
    1:master-Slave 复制(主从)    --从server不会主动变成主server,须要设置才行
    2:replica Sets 复制(副本集)  --假设主server挂掉,会选举出一台从server当主server

    一:主从复制
    mongodb支持在多个机器中通过异步复制达到故障转移和实现冗余。
      多机器中统一时刻仅仅有一台是用于写操作。正是因为这个情况,为mongodb提供了数据一致性的保障。
      担当primary角色的机器能把读操作分发给slave。


      
      一主一从     一主多从方式
      
    仅仅须要在某一个server启动时加上-master參数,而另外一个server加上-slave与-source參数,就可以实现同步。


     mongodb的最新版本号已不推荐使用这样的方法 。
     
     開始模拟(直接开玩得,没实用户验证):
    1:打开2个终端(安装2台mongodb数据库)
    *--你能够再你同一台电脑上模拟。可是把dbpath logpath,相应的文件夹建上即可
    mongodb/   下创建文件就(仅仅须要打开2个终端链接即可,不用安装多个mongodb数据库)
    bin(mongodb自带的文件)  data1 data2 dblog1 dblog2    --1是主服务用的文件   2是从server用的文件
    2:主(设置一台主server)
    ./mongod --master --dbpath=/usr/local/mongodb/data1/ --logpath=/usr/local/mongodb/dblog1 --fork --port 20001       (port开启一个相应的端口)
       
    3:从  --source表示“源” ,链接那台server和port                
    ./mongod --slave --source 127.0.0.100:20001 --dbpath=/usr/local/mongodb/data2/ --logpath=/usr/local/mongodb/dblog2 --fork --port 20002       

      从:./mongo --port 20002

    4: 主:./mongo --port 20001
      db.c1.insert({name:"user1"});
      db.c1.insert({name:"user2"});
    5:从:会发现主创建的c1集合已经过来了
    db.c1.find();
    db.c1.insert({name:"user3"});   --在从server是插不进去的,会报错“not master”

    为了降低主server的压力备份什么的能够再从server完毕(比方数据较大,一备份就是几十分钟明显增大主server的压力):
    ./mongodump --port 20002 -d test    备份test数据库

      **这样增删改的时候能够操作主server。读的时候链接从server
     
      
     
    二:Replica Sets复制(副本集)
    mongodb在1.6版本号中开发了replica set,主要是添加了故障自己主动切换和自己主动修复成员节点。各个DB之间
    数据全然一致。最为显著的差别在于。副本集没有固定的主节点,它是整个集群选举出得到的一个主节点,当
    其不工作是变更其它节点强烈推荐使用。

    (主挂掉后会自己主动在从中选取出一个作为主server)

    部署Replica Sets:
    1):创建相应的文件  mongodb/(建立key 、 data 、 log目录)  --key是存同一个会议的小组成员,为选举主server用的
    bin  key(建立钥匙文件:touch key1 、 touch key2)  data(下创建目录data1 、data2)   log(下创建目录dblog1 、 dblog2)

    2): 在key文件夹下导入2个秘钥(linux的命令这个。win下的话能够自己手动建立)
    echo "123456" >key1
    echo "123456" >key2

    chmod 600 *     --记住:这2把钥匙一定要设置成600 (key文件下操作)

    3):准备完成。启动开玩(开启2个mongodb服务)
    rs1 :表示定义一个小组,小组组号叫rs1,开会用的
    ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key1 --port 20001 --dbpath=/usr/local/mongodb/data/data1/ --logpath=/local/mongodb/log/dblog1 --fork

    能后在启动一个:
    ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key2 --port 20002 --dbpath=/usr/local/mongodb/data/data2/ --logpath=/local/mongodb/log/dblog2 --fork


    *副本集就已经启动了

    4):2个成员会自己主动开会,如今建立下会议室的配置
    ./mongo --port 20001      ------>(20002也行,哪台机器都能够) 
     
    配置建立副本集(小组清单):
    config_rs1={  
    _id:"rs1",
    members:['
    {_id:0,host:"localhost:20001",priority:1},     --表示优先级,数字越大优先级就越高,选举主server就更大
    {_id:1,host:"localhost:20002",priority:2},
    ']
    }   --回车,   config_rs1能够直接回车查看

    初始化副本集配置(小组清单):
    rs.initiate(config_rs1);   --回车 在回车,你会发现mongodb的  ">" 符号 变成 "SECONDARY>"(从)  或者  "PRIMARY>"(主)

    为什么会变符号呢?(mongodb的  ">" 符号 变成 "SECONDARY>"(从)  或者  "PRIMARY>"(主)):
    以为当你初始化副本集的时候,他们就在开会能后把localhost:20002选举为主server(priority数字越大优先级越高),
      所以localhost:20002被选举为主server"PRIMARY>"

    5):数据測试
    ./mongo --port 20002   (主)
    db.c1.insert({name:"user1"});
    db.c1.insert({name:"user2"});
    db.c1.find();
    rs.status();   --查看副本集的状态

    在登录从server(从server同步是的增删改的数据):
    ./mongo --port 20001
    show tables;   --假设报错,说明你没权限,能后你敲下以下的命令
    rs.slaveOk();  --副本集主从里面,从要想有主的读权限的时候敲下该命令,来确认你的身份是从server
    show tables;   --就好使
    db.c1.find();  --主的数据就能读到了
    db.c1.insert({name:"user2"}); --副本集的主从也一样,不能再从里面插入数据,由于不是主server


    故障转移:
    要2台以上的mongodbserver哦。
    副本集比传统的master-salve有改进的地方是它能够进行故障的自己主动转移
    假设我们停掉复制集中的一个成员。那么剩下的成员就会自己主动选举出一个新的成员,做为主数据库




  • 相关阅读:
    win10+PHP 安装memcache
    win10+PHP 安装redis
    一个github搞定微信小程序支付系列
    Linux下新建一个站点
    Linux下更改mysql版本
    零基础配置Linux服务器环境
    手把手教你使用ueditor
    react学习三
    react学习二 生命周期
    window.location.replace和window.location.href区别
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6707144.html
Copyright © 2011-2022 走看看