一 副本集:
实现集群搭建,冗余备份,故障自动切换,读写分离,java访问集群。
1 搭建
a.conf:
dbpath=/opt/data/mongo100a
port=1111
bind_ip=192.168.1.100
replSet=child/192.168.1.100:2222
# /opt/mongo/mongo100a/bin/mongod --config /opt/mongo/replset/a.conf
dbpath=/opt/data/mongo100b
port=2222
bind_ip=192.168.1.100
replSet=child/192.168.1.100:3333
# /opt/mongo/mongo100b/bin/mongod --config /opt/mongo/replset/b.conf
dbpath=/opt/data/mongo100c
port=3333
bind_ip=192.168.1.100
replSet=child/192.168.1.100:1111
# /opt/mongo/mongo100c/bin/mongod --config /opt/mongo/replset/c.conf
# /opt/mongo/mongo100a/bin/mongo 192.168.1.100:1111
# /opt/mongo/mongo100b/bin/mongo 192.168.1.100:2222
# /opt/mongo/mongo100c/bin/mongo 192.168.1.100:3333
任意一台,初始化副本集
[root@Master ~]# /opt/mongo/mongo100b/bin/mongo 192.168.1.100:2222
use admin
db.runCommand({"replSetReconfig" : {
"_id" : "child",
"members" : [
{
"_id" : 1,
"host" : "192.168.1.100:1111"
},
{
"_id" : 2,
"host" : "192.168.1.100:2222"
},
{
"_id" : 3,
"host" : "192.168.1.100:3333"
}
]}})
local.oplog.r
初始化完,选出活跃点,不再有连接不上同伴的提示。如下:
Sun Sep 22 05:48:21.340 [rsStart] trying to contact 192.168.1.100:2222
Sun Sep 22 05:48:21.342 [rsStart] couldn't connect to 192.168.1.100:2222: couldn't connect to server 192.168.1.100:2222
Sun Sep 22 05:48:21.344 [rsStart] replSet info Couldn't load config yet. Sleeping 20sec and will try again.
初始化后显示Sun Sep 22 04:36:27.135 [initandlisten] connection accepted from 192.168.1.100:33909 #13 (2 connections now open)
查看状态:
child:SECONDARY> rs.status()
{
"set" : "child",
"date" : ISODate("2013-09-21T20:40:12Z"),
"myState" : 2,
"syncingTo" : "192.168.1.100:2222",
"members" : [
{
"_id" : 1,
"name" : "192.168.1.100:1111",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 373,
"optime" : Timestamp(1379795635, 1),
"optimeDate" : ISODate("2013-09-21T20:33:55Z"),
"lastHeartbeat" : ISODate("2013-09-21T20:40:12Z"),
"lastHeartbeatRecv" : ISODate("2013-09-21T20:40:11Z"),
"pingMs" : 0,
"syncingTo" : "192.168.1.100:2222"
},
{
"_id" : 2,
"name" : "192.168.1.100:2222",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 373,
"optime" : Timestamp(1379795635, 1),
"optimeDate" : ISODate("2013-09-21T20:33:55Z"),
"lastHeartbeat" : ISODate("2013-09-21T20:40:12Z"),
"lastHeartbeatRecv" : ISODate("2013-09-21T20:40:12Z"),
"pingMs" : 1
},
{
"_id" : 3,
"name" : "192.168.1.100:3333",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1277,
"optime" : Timestamp(1379795635, 1),
"optimeDate" : ISODate("2013-09-21T20:33:55Z"),
"self" : true
}
],
"ok" : 1
}
child:PRIMARY> use testdb
switched to db testdb
child:PRIMARY> db.testdb.insert({name:"thrillerzw",age:27})
child:SECONDARY> show dbs;
local 0.09375GB
testdb 0.0625GB
child:SECONDARY> use testdb
switched to db testdb
child:SECONDARY> db.testcol.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
重新配置报错:
"errmsg" : "local.oplog.rs is not empty on the initiating member. cannot initiate."
db.runCommand({replSetReconfig: config});
{
"startupStatus" : 1,
"ok" : 0,
"errmsg" : "loading local.system.replset config (LOADINGCONFIG)"
}
解决: Reconfigure the replicaset with the new configuration
> rs.config()
{
"_id" : "child",
"version" : 1,
"members" : [
{
"_id" : 1,
"host" : "192.168.1.100:1111"
},
{
"_id" : 2,
"host" : "192.168.1.100:2222"
},
{
"_id" : 3,
"host" : "192.168.1.100:3333"
}
]
}
> var cfg = rs.config()
> cfg.members = [
... {
... "_id" : 1,
... "host" : "192.168.1.100:1111"
... },
... {
... "_id" : 2,
... "host" : "192.168.1.100:2222"
... },
{
... {
... "_id" : 3,
... "host" : "192.168.1.100:3333"
... }
... ]
[
{
"_id" : 1,
"host" : "192.168.1.100:1111"
},
{
"_id" : 2,
"host" : "192.168.1.100:2222"
},
{
"_id" : 3,
"host" : "192.168.1.100:3333"
}
]
> rs.reconfig(cfg , {force : true})
{
"msg" : "will try this config momentarily, try running rs.conf() again in a few seconds",
"ok" : 1
}
> rs.conf()
{
"_id" : "child",
"version" : 96789,
"members" : [
{
"_id" : 1,
"host" : "192.168.1.100:1111"
},
{
"_id" : 2,
"host" : "192.168.1.100:2222"
},
{
"_id" : 3,
"host" : "192.168.1.100:3333"
}
]
}
rs.status()查看正确,重连mongo shell就好了,不用重启mongod。
只剩一个节点活着:Exception in thread "main" com.mongodb.MongoException: can't find a master
child:SECONDARY> db.getMongo().setSlaveOk() 设置以后所有从库都可读。
添加一台服务器:
# /opt/mongo/mongo101a/bin/mongod --config /opt/mongo/replset/a.conf
在活跃节点上执行
child:PRIMARY> rs.add("192.168.1.101:1111")
{ "ok" : 1 }
如果要删除某一个节点可以执行rs.remove(“主机名:端口号”)
PRIMARY修改优先级:
cfg = rs.conf()
cfg.members[3].priority = 0
rs.reconfig(cfg)
2 java 调用
package mongo; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.MongoException; import com.mongodb.MongoOptions; import com.mongodb.ReadPreference; import com.mongodb.ReplicaSetStatus; import com.mongodb.ServerAddress; /** * MongoDB 连接器 * * @author thrillerzw */ public class MongoConn { private static Mongo[] mongos = new Mongo[10]; private static short mongoCount = 0; private static DB db = null; static Mongo m; static Mongo mread; static { List<ServerAddress> addresslist = new ArrayList<ServerAddress>(); try { addresslist.add(new ServerAddress("192.168.1.100:1111")); addresslist.add(new ServerAddress("192.168.1.100:2222")); } catch (UnknownHostException e) { System.err.println("address check error."); System.exit(-1); } List<ServerAddress> readAddresslist = new ArrayList<ServerAddress>(); try { readAddresslist.add(new ServerAddress("192.168.1.101:1111")); readAddresslist.add(new ServerAddress("192.168.1.100:3333")); } catch (UnknownHostException e) { System.err.println("address check error."); System.exit(-1); } MongoOptions options = new MongoOptions(); options.autoConnectRetry = true; options.connectionsPerHost = 20; options.connectTimeout = 6000; options.maxAutoConnectRetryTime = 12000; options.maxWaitTime = 12000; options.socketKeepAlive = true; options.socketTimeout = 2000; try { m = new Mongo(addresslist, options); mread=new Mongo(readAddresslist,options); } catch (MongoException e) { System.err.println("mongo create error."); System.exit(-1); } } public final static Mongo getMongo() { return m; } public final static DB getDB(String dbName) { Mongo mongo = getMongo(); if (db == null && mongo != null) { try { db = mongo.getDB(dbName); } catch (Exception e) { e.printStackTrace(); } } return db; } public static void main(String[] args) { Mongo mongo= getMongo() ; ReplicaSetStatus replicaSetStatus=mongo.getReplicaSetStatus(); ReadPreference readPreference =mongo.getReadPreference(); DB readDb = mread.getDB("testdb"); DB db=getDB("testdb"); DBCollection dBCollection =db.getCollection("testcol"); DBCursor dBCursor =dBCollection.find(); while(dBCursor.hasNext()){ DBObject dBObject=dBCursor.next(); System.out.println(dBObject.get("name")+" "+dBObject.get("age")); } System.out.println("----------"); DBCollection rdBCollection =db.getCollection("testcol"); DBCursor rdBCursor =dBCollection.find(); while(rdBCursor.hasNext()){ DBObject dBObject=rdBCursor.next(); System.out.println(dBObject.get("name")+" "+dBObject.get("age")); } try { Mongo m2 = new Mongo("192.168.1.100:3333"); DB db2=m2.getDB("testdb"); db2.slaveOk(); DBCollection c2=db2.getCollection("testcol"); DBCursor dBCursor2 =c2.find(); //Exception in thread "main" com.mongodb.MongoException: not talking to master and retries used up //加db2.slaveOk();解决。 while(dBCursor2.hasNext()){ DBObject dBObject=dBCursor2.next(); System.out.println(dBObject.get("name")+" "+dBObject.get("age")); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
三:乱七八糟
可变列,灵活。
bson格式跟json相同,数据类型多。
shell封装了js引擎,可以用for(var i=0...)在 shell批量插入。
强硬的更新会替换掉老的文档,想要的是局部更新。
remove不会删除索引且效率低,用db.集合名.drop()更好。
saveOrUpdate: update({查询器},{修改器},true);
批量更新$set update({查询器},{修改器},false,true);
addToSet 和each判断式批量导入。
不支持多表关联查询,嵌套查询。单表可以使用正则查询,比sql强大。
查询符在对象内部,更新符在对象外部。
$size只能等于,不能用其它比较运算符,如大于,小于。可以给表加数组的大小字段,注意更新。
[root@Slave1 bin]# ./mongo 127.0.0.1:27017/admin
show dbs;
use testdb;
db.thrillerzw.insert({name:"testName2"});
db.thrillerzw.findOne();
db.thrillerzw.find();
db.thrillerzw.help();
相关推荐
sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo 写入: [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpg...
资源名称:MongoDB应用设计模式内容简介:无论是在构建社交媒体网站,还是在开发一个仅在内部使用的企业应用程序,《MongoDB应用设计模式》展示了MongoDB需要解决的商业问题之间的连接。你将学到如何把MongoDB设计...
MongoDB Community Server(mongodb-org-server_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
MongoDB Community Server(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)适用于Ubuntu 18.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...
MongoDB Community Server(mongodb-src-r5.0.4.tar.gz)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非...
mv mongodb-linux-x86_64-4.0.18 mongodb 3、进入 mongodb 目录创建目录 db 和 logs cd /usr/local/mongodb mkdir db mkdir logs 4、进入到 bin 目录下,编辑 mongodb.conf 文件,内容如下: dbpath=/usr/local/...
mongodb-log 是一个基于MongoDB的Python日志系统。 MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小...
赠送jar包:mongodb-driver-core-4.2.3.jar; 赠送原API文档:mongodb-driver-core-4.2.3-javadoc.jar; 赠送源代码:mongodb-driver-core-4.2.3-sources.jar; 赠送Maven依赖信息文件:mongodb-driver-core-4.2.3....
本系统是本人初学MongoDb时所写,代码不是很完美,基本实现图书管理系统的增删改查等基本功能,目前尚有一处缺陷未解决——在查询后只能在控制台看到结果,没有反馈到界面上,有兴趣的朋友可以加以修改,相信这是一...
day1:MongoDB数据库与其他数据库区别介绍及学习方法 day2:MongoDB运行环境搭建及运行 day3:MongoDB增删改查操作实践 day4:教你学会MongoDB聚合操作 day5:索引的特性及应用 day6:MongoDB实例搭建仓位管理API day7:...
php-mongodb的扩展包,MongoDB [2] 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据...
本课程是一套关于MongoDB应用开发的实战性教程,名为《深入浅出MongoDB应用实战开发(基础、开发指南、系统管理、集群及系统架构)》,教程侧重于讲解MongoDB的常用特性及高级特性,从实际开发的角度出发对MongoDB...
一、MongoDB简介 3 二、MongoDB结构 3 二、MongoDB 数据库关系型(这里并不是值关系型数据库的关系) 3 1、MongoDB一对一关系型 3 2、MongoDB一对多关系型 4 3、MongoDB多对多关系型 4 三、创建数据库(mongodb_test...
教程名称:MongoDB教程基础入门 课程目录:【】MongoDB教程基础入门-代码【】MongoDB教程基础入门01第一讲上【】MongoDB教程基础入门02第一讲下【】MongoDB教程基础入门03第二讲上【】MongoDB教程基础入门04第二讲...
MongoDB Community Server(mongodb-windows-x86_64-5.0.4.zip)适用于Windows MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于...
【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT...
MongoDB图形化管理工具 MongoDB Compass
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
mongodb安装 《Windows上安装MongoDB:完整步骤详解.pdf》是一份适用于Windows操作系统的MongoDB安装教程,适用于初学者和有经验的开发人员。本教程包括完整的步骤详解,可帮助您快速掌握MongoDB的安装配置,包括...
真实有效的mongodb视频教程地址 深入浅出 MongoDB 高清IT教程视频下载 1.1、-nosql与MongoDB.mp4 1.2、-MongoDB安装配置.mp4 1.3、-MongoDB?shell详.mp4 1.4、-MongoDB文档、集合、数据库的概念.mp4 1.5、-...