MongoDB副本集搭建及在springboot中使用

一、mongoDB副本集的搭建

原则就是一台master(主),一台salve(从),一台arbiter(仲裁)

1、下载mongoDB
https://www.mongodb.com/download-center/community/releases/archive

2、上传到准备好的三台服务器135、136、137,并解压

tar -zxvf mongodb-linux-x86_64-rhel70-4.2.12.tgz

3、创建目录、文件

在每个解压目录创建如下
数据存放文件夹data:mkdir data
日志存放文件夹 logs:mkdir logs
配置文件夹conf:mkdir conf
在三台服务器的logs对应文件夹再创建日志文件master.log(135)、slave.log(136)、arbiter.log(137)

135: touch master.log
136: touch slave.log
137:touch arbiter.log
在每个的conf目录创建:mongodb.conf(3个都一样的名字) 135/136/137:touch mongodb.conf

4、编辑三个mongodb.conf
#主
#mongo数据安装目录
dbpath=/home/soft/mongodb/mongodb-linux-x86_64-rhel70-4.2.12/data
#日志打印的目录
logpath=/home/soft/mongodb/mongodb-linux-x86_64-rhel70-4.2.12/logs/master.log
#数据是否故障恢复
journal=true
#复制集日志是以追加的方式进行
logappend=true
#绑定主机
bind_ip=192.168.200.135
#端口
port=27017
#是否后台启动
fork=true
#noprealloc=true
##集群编号
replSet=mymongo

#从

dbpath=/home/soft/mongodb/mongodb-linux-x86_64-rhel70-4.2.12/data
logpath=/home/soft/mongodb/mongodb-linux-x86_64-rhel70-4.2.12/logs/slave.log
logappend=true
bind_ip=192.168.200.136
port=27017
fork=true
##集群编号
replSet=mymongo

#仲裁

dbpath=/home/soft/mongodb/mongodb-linux-x86_64-rhel70-4.2.12/data
logpath=/home/soft/mongodb/mongodb-linux-x86_64-rhel70-4.2.12/logs/arbiter.log
logappend=true
bind_ip=192.168.200.137
port=27017
fork=true
#noprealloc=true
##集群编号
replSet=mymongo
5、把这几个文件设为可执行

命令:chmod -R +777 mongodb.conf

6、启动

在与bin平级的目录执行:bin/mongod -f conf/mongodb.conf

7、连接mongo客户端,设置主从关系

在135bin目录下执行:./mongo 192.168.200.135:27017
使用admin:use admin
执行这段,设置主从关系:

cfg={_id:"mymongo",members:[{_id:0,host:'192.168.200.135:27017',priority:2},{_id:1,host:'192.168.200.136:27017',priority:1},{_id:2,host:'192.168.200.137:27017',arbiterOnly:true}]};

执行:rs.initiate(cfg);
查看状态:rs.status()

8、连接客户端的常用操作命令

切换/创建数据库:use mydb --如果数据库不存在,则创建数据库,否则切换到指定数据库
查询所有数据库:show dbs;
删除当前使用数据库:db.dropDatabase();
查看当前使用的数据库:db.getName();
显示当前db状态:db.stats();
当前db版本:db.version();
查看当前db的链接机器地址:db.getMongo();
创建一个集合(table):db.createCollection( "collName");
得到指定名称的集合(table ):db.getCollection("user");
插入数据(User是集合名):db.User.save({name:'zhangsan',age:21,sex:true})
查询User集合: db.User.find()
根据字段查找:db.User.find({name:"zhangsan"})
查找并排序:db.User.find().sort({age:1}) sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列
分页查找:db.User.find().skip(0).limit(3) 在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据
更新数据:db.User.update({name:"zhangsan"}, {$set:{age:100, sex:0}})
移除对应id的数据:db.User.remove(id)
创建索引:db.User.createIndex({"name":1}) 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

9、设置密码(也可以不设置)
userAdminAnyDatabase角色只用与admin这个库,user是账号,pwd是密码role是角色,db是对应哪个库

设置密码 db.createUser({user:"mongo",pwd:"123456",roles:[{role:"userAdmin",db:"admin"}]})

数据库用户角色:read、readWrite; 数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root;这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner
、userAdmin、userAdminAnyDatabase) 内部角色:__system 这些角色对应的作用如下:
Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

二、springboot中使用mongoDB

1、导包
 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
2、配置
spring:data:mongodb:uri: mongodb://mongo:123456@192.168.3.233:27017,192.168.3.233:27018,192.168.3.233:27019/bugs?replicaSet=mymongo&readPreference=secondaryPreferred&connectTimeoutMS=300000

连接配置说明:

mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
mongodb:// 这是固定的格式,必须要指定。 username:password@
可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库 host1 必须的指定至少一个host, host1
是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。 portX
可选的指定端口,如果不填,默认为27017 /database
如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。 ?options
是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

replicaSet=name 指定的集群名称。 Impliesconnect=replicaSet.
slaveOk=true|false
true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。
false: 在 connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet
模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器 journal=true|false 如果设置为 true, 同步到
journal (在提交到数据库前写入到实体中). 应用于 safe=true connectTimeoutMS=ms 可以打开连接的时间

3、java代码中使用

引入这个即可使用:

@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private GridFsTemplate gridFsTemplate;
@Autowired
private GridFSBucket gridFSBucket;
/*** 保存 对象*/
@PostMapping("/saveEntity")
@ApiOperation(value = "保存 对象")
public R saveEntity(MongoEntity entity) {MongoEntity result = mongoTemplate.save(entity, "bugutils");log.info("result:" + result);return R.ok("保存成功!");
}
/*** 查询所有*/
@GetMapping("/findAll")
@ApiOperation(value = "查询所有")
public R findAll() {List<MongoEntity> result = mongoTemplate.findAll(MongoEntity.class, "bugutils");return R.ok("查询成功").put("result", result);
}
/*** 根据id查询*/
@PostMapping("/queryById")
@ApiOperation(value = "根据id查询")
public R queryById(String id) {/*** import org.springframework.data.mongodb.core.query.Criteria* import org.springframework.data.mongodb.core.query.Query*/Query query = new Query(Criteria.where("_id").is(id));MongoEntity result = mongoTemplate.findOne(query, MongoEntity.class, "bugutils");return R.ok().put("result", result);
}
/*** 更新或添加对象*/
@PostMapping("/updateEntity")
@ApiOperation(value = "更新或添加对象")
public R updateEntity(MongoEntity mongoEntity, String id) {Query query = new Query(Criteria.where("_id").is(id));Update update = new Update().set("name", mongoEntity.getName()).set("job", mongoEntity.getJob());UpdateResult upsert = mongoTemplate.upsert(query, update, MongoEntity.class, "bugutils");return R.ok().put("upsert", upsert);
}/*** 根据id删除*/
@PostMapping("/deleteById")
@ApiOperation(value = "根据id删除")
public R deleteById(String id) {//1、根据id查出数据Query query = new Query(Criteria.where("_id").is(id));MongoEntity result = mongoTemplate.findOne(query, MongoEntity.class, "bugutils");mongoTemplate.remove(result);return R.ok();
}
/*** 条件查询+分页*/
@ApiOperation(value = "条件查询+分页")
@PostMapping("/queryByCondition")
public R queryByCondition(int pageSize, int pageNo, String name) {Query query = new Query();/*** 模糊查询*/String regex = String.format("%s%s%s", "^.*", name, ".*$");Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);query.addCriteria(Criteria.where("name").regex(pattern));/*** 总数查询*/long count = mongoTemplate.count(query, "bugutils");/*** 排序*/query.with(new Sort(Sort.Direction.DESC, "_id"));/*** 分页* 如果代码中的不能用试试这个,我就遇到了* query.with(Sort.by(Sort.Order.desc("_id")));* 导入的是这个包:org.springframework.data.domain.Sort;*/List<Map> list = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), Map.class, "bugutils");int totalPage = (int) Math.ceil((double) count / pageSize);ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();map.put("list", list);map.put("count", count);map.put("currentPage", pageNo);map.put("pageSize", pageSize);map.put("totalPage", totalPage);return R.ok().put("map", map);
}

三、mongoDB实现文件的上传下载

1、导包

除了上面用的mongodb的包再导入一个

 <!--文件类的工具包--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>
2、配置类

springboot 2.x需要为下载写一个配置类

@Configuration
public class GridConfig {@Autowiredprivate MongoDbFactory mongoDbFactory;@Autowiredprivate GridFSBucket gridFSBucket;public GridFsResource convertGridFSFile2Resource(GridFSFile gridFSFile) {GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());return new GridFsResource(gridFSFile, gridFSDownloadStream);}@Beanpublic GridFSBucket getGridFSBucket() {MongoDatabase db = mongoDbFactory.getDb();return GridFSBuckets.create(db);}
}
3、上传下载的代码@RestController
@RequestMapping("/mongDb/uploadAndDownLoad")
@Api(tags = "mongDb实现文件的上传下载")
public class MongDbUploadAndDownLoad {@Autowiredprivate GridConfig gridConfig;@Autowiredprivate GridFsTemplate gridFsTemplate;@PostMapping("/uploadFile")@ApiOperation(value = "上传文件")public ObjectId uploadFile(@RequestParam("file") MultipartFile file) throws IOException {ObjectId store = gridFsTemplate.store(file.getInputStream(), file.getOriginalFilename(), file.getContentType());return store;}@GetMapping ("/getFile")@ApiOperation(value = "下载文件")public void getFile(@RequestParam(value = "id")String id, HttpServletResponse response) throws IOException {GridFSFile gridFSFile = gridFsTemplate.findOne(new Query().addCriteria(Criteria.where("_id").is(id)));GridFsResource gridFsResource = gridConfig.convertGridFSFile2Resource(gridFSFile);IOUtils.copy(gridFsResource.getInputStream(),response.getOutputStream());}@DeleteMapping("/deleteFile")@ApiOperation(value = "删除文件")public int deleteFile(@RequestParam(value = "id")String id){gridFsTemplate.delete(new Query().addCriteria(Criteria.where("_id").is(id)));return 0;}
}

MongoDB副本集搭建及在springboot中使用相关推荐

  1. MongoDB副本集搭建、连接php

    文章目录 PHP连接MongoDB MongoDB副本集介绍 MongoDB副本集搭建 MongoDB副本集测试 PHP连接MongoDB php连接MongoDB需要安装拓展包有两种,分别是mong ...

  2. MongoDB副本集搭建(超级详细)

    MongoDB 副本集原理 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据 ...

  3. Linux下MongoDB副本集搭建(主--从--仲裁模式)

    1.下载MongoDB安装文件:mongodb-linux-x86_64-3.2.1.tgz(版本随意): 2.解压安装MongoDB:tar  -zxvf  mongodb-linux-x86_64 ...

  4. mongodb副本集搭建

    cat >> /etc/sysctl.conf< cat >>/etc/security/limits.conf<<EOF soft nproc 65535 ...

  5. 小丸子学MongoDB系列之——部署MongoDB副本集

    1.以副本集的方式启动mongodb实例 1.1 创建副本集目录 [mgousr01@vm1 ~]$ mkdir -p mongorep/{mg17/{bin,conf,data,logs,pid}, ...

  6. Mongodb 副本集+分片集群搭建

    环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar ...

  7. mongodb的架构 副本集搭建

    早期的版本使用master-slave,一主一从和mysql类型,但slave在此架构中为只读,如果主库宕机后,从库不能自动切换为主 需要手动才行 后期mongodb开发了个新的架构方案副本集,所以呢 ...

  8. MongoDB副本集学习(一):概述和环境搭建

    MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...

  9. MongoDB副本集(Replica Sets)搭建教程

    MongoDB副本集(Replica Sets)搭建教程 最近在生产环境下部署公司项目.由于项目中有使用到MongoDB,所以参考网上的博客,在服务器上进行搭建MongoDB副本集.今天打算将其记录成 ...

最新文章

  1. mfc 加密解密_[源码和文档分享]基于MFC实现的AES加密解密程序
  2. 前向业务中间层的意义,架构,技能要求
  3. Qt 学习之路 2(80):定位器
  4. 一个css文件里实际并不存在的class,不能给element layout产生任何影响
  5. python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂
  6. ##API(一)————枚举
  7. 开源不等于免费!谷歌如何通过安卓开源成为移动时代霸主? | 涛滔不绝
  8. 本地如何搭建FPT服务
  9. iOS:菜单控制器和菜单项:UIMenuController和UIMenuItem
  10. live2d内嵌html,live2d web端加载moc3模型
  11. 安川g7接线端子图_安川G7(IP)+蓝光STB板同步
  12. ChinaSkills-网络系统管理001(网络应用赛项改革)
  13. 一文带您读懂FCC、CE、CCC认证的区别
  14. Linux背后的大脑-传奇人物Linus
  15. 华为计算机魔术,华为荣耀magic给大家变了一个魔术,想“拆穿”他吗?
  16. 数据源的配置简单介绍
  17. 给IDA7.0的python2.7安装模块库
  18. 团队管理者是团队凝聚力的维系者。
  19. 无盘工作站(三)-配置 PXE 无盘站软件
  20. zw和nt开头的系统调用的区别

热门文章

  1. linux中英文环境的切换
  2. 很有深意的12句话!
  3. 五子棋算杀c语言,五子棋AI算法-算杀(示例代码)
  4. VideoWriter的用法
  5. 在线导播台(网页导播台)混流效果
  6. 释放云手机的想象力,百度是怎样出手的?
  7. 拥抱iPhone,拥抱软件开发的未来 ——转帖:中华读书报
  8. MATLAB-自定义函数拟合(lsqcurvefit)
  9. 重启计算机后桌面顺序是反的,win10系统修改桌面后重启电脑桌面又回到初始状态的方案...
  10. datagridview中读取数据判断+考勤每月上班天数判断