mongoDB的复制集1----复制集的特点、快速搭建复制集

来源:互联网 发布:淘宝司法拍卖后悔报名 编辑:程序博客网 时间:2024/05/21 09:43


单点模式的优点是什么?
  部署方便,节省资源
但单点模式会有如下问题:
  硬盘的存储空间要满了,怎么办?
  如何出现网络通信或者是机房电力故障,服务器无法正常提供服务怎么办?
  进行备份时,为了保证数据的一致性,要将实例关闭或者上个写锁保证备份有有效怀这时怎么办?

复制集概念
  传统主从结构MASTER/SLAVE --> 复制集(mongodb replica sets)
  复制集是由一组拥有相同数据集的mongodb实例所组成的集群

两类节点
  数据节点:存储数据,可以充当主从节点
  投票结点:负责选举,不存储数据,不能充当主从节点

复制集的工作方式:


一、复制集的特点

1).主唯一不固定
  数据一致性,主是唯一的,但不固定,没有Mysql那样的双主结构
2).大多数原则
  集群存活节点小于等于二分之一时集群不可写,只可读。
  是否能选举出新的主节点,是由当前复制集成员存活数量来决定的
3).从库无法写入
  Mysql从库的readonly对具有super权限的账户无效
4).自动容灾
  复制集不支持只复制指定的库
  在3.0以前的版本中,复制集中参与选举的数据节点只能有7个

二、快速搭建复制集

2-1、复制的集的启动

1).配置文件编写
    编写三个配置文件,分别为28001.conf,28002.conf,28003.conf。需要注意的是,如果配置文件里的目录没有,需要先创建
bind_ip=192.168.23.129
port = 28001
dbpath = /usr/local/mongoDB/data/db/28001
logpath = /usr/local/mongoDB/logs/28001.log
logappend=true
pidfilepath=/usr/local/mongoDB/data/db/28001/28001.pid
fork =true
oplogSize=1024MB
verbose = vvvvv
replSet = changwen上面配置参数的详解:http://blog.csdn.net/ochangwen/article/details/52344680
2).启动实例

changwen@ubuntu:~$ ps -ef|grep mongo
root       7051   5546  1 21:48 ?        00:00:03 /usr/local/mongoDB/bin/mongod -f /usr/local/mongoDB/conf/28003.conf
root       7124   5546  0 21:50 ?        00:00:02 /usr/local/mongoDB/bin/mongod -f /usr/local/mongoDB/conf/28001.conf
root       7157   5546  1 21:50 ?        00:00:02 /usr/local/mongoDB/bin/mongod -f /usr/local/mongoDB/conf/28002.conf
changwen   7208   7196  0 21:54 pts/19   00:00:00 grep --color=auto mongo
3).复制集初始化
先连接主节点

# 连接服务器changwen@ubuntu:~$ sudo /usr/local/mongoDB/bin/mongo 192.168.23.129:28001# 定义一个对象> config = {... _id:"changwen",... members:[... {_id:0,host:"192.168.23.129:28001"},... {_id:1,host:"192.168.23.129:28002"},... {_id:2,host:"192.168.23.129:28003"}]}{"_id" : "changwen","members" : [{"_id" : 0,"host" : "192.168.23.128:28001"},{"_id" : 1,"host" : "192.168.23.128:28002"},{"_id" : 2,"host" : "192.168.23.128:28003"}]}> config.members...> config.members[2]{ "_id" : 2, "host" : "192.168.23.128:28003" }# 修改> config.members[2]={ "_id" : 2, "host" : "192.168.23.128:28003" ,"arbiterOnly":true}{ "_id" : 2, "host" : "192.168.23.128:28003", "arbiterOnly" : true }> rs.initiate(config){ "ok" : 1 }> use changwenswitched to db changwenchangwen:PRIMARY> db.changwen2.insert({"name":"changwen"})WriteResult({ "nInserted" : 1 })
打开从节点 服务,可以看到主服务器上创建的数据已经存储到从服务器上
# 连接从节点服务 changwen@ubuntu:$ sudo /usr/local/mongoDB/bin/mongo 192.168.23.129:28002changwen:SECONDARY> show tables2016-08-28T06:16:49.031-0700 E QUERY    [thread1] Error: listCollections failed: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :_getErrorWithCode@src/mongo/shell/utils.js:25:13rs.slaveOk(1)或者turechangwen:SECONDARY> rs.slaveOk(true)changwen:SECONDARY> show dbschangwen  0.000GBlocal     0.000GBchangwen:SECONDARY> db.changwen2.find(){ "_id" : ObjectId("57c2f4a177f0574f2e53ba7d"), "name" : "changwen" }
打开投票结点
changwen@ubuntu:~$ sudo /usr/local/mongoDB/bin/mongo 192.168.23.129:28003> rs.slaveOk(true)# 投票结点不存储任何物理数据<pre name="code" class="sql">changwen:ARBITER> show dbs
local 0.000GB

2-2.复制集成员节点

按是否存放数据区分
  数据节点:存放数据(实体物理文件*.ns *.0等)的节点,包括主节点,从节点
  投票节点:不存放数据仅作选举和充当复制集节点

按功能区分

2-3.复制集配置文件参数

_id整数 _id:0host字符串host:"192.168.23.129:28001"arbiterOnly布尔值 arbiterOnly:truepriority整数priority = 0|1hidden布尔值hidden = true|false, 0|1votes整数votes = 0|1slaveDelay整数slaveDelay = 3600buildIndexes布尔值buildIndexes = true|false, 0|1节点属性
  主节点     priority(优先级)至少为1
  从节点     priority(优先级)可以为0
  延迟节点   priority(优先级)为0并且hidden = true 并且salveDelay = XX(XX表示 延迟时间,用数字)
  隐藏节点   priority(优先级)为0并且hidden = true
  无索引     priority(优先级)为0并且buildIndexes= true

# 在主节点服务输入changwen:PRIMARY>rs.stepDown(5)# 可以看到主节点变成了从节点 changwen:SECONDARY>#在从节点端口可以看到变成了主节点# 修改节点优先级changwen:PRIMARY>config.members[0].priority=1



0 0
原创粉丝点击