一、mongodb的集群

mongodb有两种架构:

第一种架构:和mysql的结构类似,也有主从结构,但是他不能实现故障自动切换

于是有了第二种架构。官方不推荐使用这种架构。

第二种:mongodb的复制集(副本集)。

一般至少有3台机器,这两边也有主从,但是主从是通过选举出来的。

主负责读写(写入到oplog日志中),从负责监控主服务器,同步主的数据。一旦主挂掉,然后代替主。

二、设置副本集的参数

(1)replset:设置副本集名称

(2)oplogsize:设置oplog日志文件大小

(3)fastsync:完成快速同步。

(4)replindexprefetch:在实现复制时,根据索引实现数据预取

可以实现快速装载主节点上的数据的。尤其是在修改量特别大的情况下。

可以使用它。它只能在2.2版本以后才能使用。它也只能基于ID索引实现

三.设置集群

实验环境

主机              IP                虚拟通道

centos1       192.168.3.10         vmnet8

centos2       192.168.3.11         vmnet8

centos3       192.168.3.12         vmnet8

1.将三台服务器全部安装mongo

tar xf mongodb-linux-x86_64-amazon-3.2.7.tgz

mv mongodb-linux-x86_64-amazon-3.2.7 /usr/local/mongodb

创建数据目录

mkdir /data/db -p

创建配置文件

cd /usr/local/mongodb/

vim mongodb.conf   #增加以下内容

dbpath = /data/db

logpath = /data/mongo.log

logappend = true

port = 27017

noauth = true

fork = true

replSet = mongo

#注意这里的"s" 必须大写

将配置文件复制到其他的两台服务器上

启动mongdb

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf

child process started successfully, parent exiting

此时启动成功。

2.初始化副本集

连接任意一台mongo

> rs.status()   #查看状态

{

"info" : "run rs.initiate(...) if not yet done for the set",

"ok" : 0,

"errmsg" : "no replset config has been received",

"code" : 94

定义初始化配置文件

cfg={"_id":"mongo","members":[{"_id":0,"host":"192.168.3.10:27017"},{"_id":1,"host":"192.168.3.11:27017"},{"_id":2,"host":"192.168.3.12:27017"}]}

显示以下内容为定义成功。

{

"_id" : "mongo",

"members" : [

{

"_id" : 0,

"host" : "192.168.3.10:27017"

},

{

"_id" : 1,

"host" : "192.168.3.11:27017"

},

{

"_id" : 2,

"host" : "192.168.3.12:27017"

}

]

}

初始化配置文件.

初始化的时候注意关闭另外两台从服务器的Iptables,否则会报错。

> rs.initiate(cfg)

{ "ok" : 1 }

如果配置文件中有bind_ip=127.0.0.1初始化会报以下错误。

"errmsg" : "No host described in new configuration 1 for replica set mongo maps to this node",

>rs.status() 可以查看集群信息

 mongo:PRIMARY> db.isMaster()   #也可以查看本机的身份

{

"hosts" : [

"192.168.3.10:27017",

"192.168.3.11:27017",

"192.168.3.12:27017"

],

"setName" : "mongo",

"setVersion" : 1,

    "ismaster" : true,

"secondary" : false,

"primary" : "192.168.3.10:27017",

    "me" : "192.168.3.10:27017",

 

测试:

我们在主节点上插入数据

mongo:PRIMARY> use test

switched to db test

mongo:PRIMARY> db.test.insert({name:"xiaoming",age:50})

WriteResult({ "nInserted" : 1 })

mongo:PRIMARY> db.test.find()

{ "_id" : ObjectId("58b540f952cbd488f553914a"), "name" : "xiaoming","age" : 50 }

在从节点上查看数据

mongo:SECONDARY> rs.slaveOk()

mongo:SECONDARY> show dbs;

admin  0.000GB

local  0.000GB

test   0.000GB

mongo:SECONDARY> db.test.find()

{ "_id" : ObjectId("58b540f952cbd488f553914a"), "name" : "xiaoming", "age" : 50 }

测试数据库是否能够自动切换

我们停止主服务器。

退出第二台的mongo,重新登录

我们发现第二台mongo 自动成为了主。

最新文章

  1. Python 2.x闭包(enclosure)中的变量访问&修改
  2. C#编程之委托与事件四(一)【转】
  3. HDOJ 3177 Crixalis's Equipment
  4. PenetrationTest
  5. unity脚本的基础语法
  6. Fxcop 初体验
  7. DBA 思想天空笔记
  8. C51函数的递归调用
  9. MATLAB快速注释方法
  10. TD数量不确定时如何让其宽度平均分布
  11. RSA密码系统 基于大数环境编写 密码学课程设计
  12. UDP vs. TCP
  13. OC 截取字符串
  14. EM最大期望算法-走读
  15. linux操作系统基础篇(四)
  16. ubuntu下双网卡桥接
  17. Install Windows 2016 on VirtualBox
  18. 阿里巴巴开源项目汇总-(JAVA)
  19. C++ string中的find()函数
  20. (三)juc高级特性——虚假唤醒 / Condition / 按序交替 / ReadWriteLock / 线程八锁

热门文章

  1. python web框架学习笔记
  2. Redis,Memcache,MongoDb的特点与区别
  3. Linux 下使用rtcwake实现定时休眠和唤醒设备
  4. 如何将java对象转换成json数据
  5. 使用Modbus批量读取寄存器地址
  6. QPS和TPS的区别于理解
  7. <转>libevent使用demo
  8. CF749B Parallelogram is Back 题解
  9. CF248A Cupboards 题解
  10. 在myeclipse里加大tomcat内存,jdk内存方法