MongoDB

黑马文档补充

使用场景

  • 数据量大
  • 读写都很频繁
  • 价值较低的数据,对事务性要求不高
  • 数据模型经常更改
  • 应用需要大量的地理位置查询、文本查询

体系结构

在这里插入图片描述
☆、副本集:读写分离。
☆、分片:数据拆分,将其分散存在不同的机器上,实现集群。

目录

☆、单机:/mydata/mongodb/single
☆、副本集:/mydata/mongodb/replica_sets
☆、分片:/mydata/mongodb/sharded_cluster

命令

☆、退出:exit
☆、登录:db.auth(“bobo”,“123456”)

再次使用

☆、分片集群后面再使用的时候,需要启动第一套副本集、第二套副本集,配置节点副本,两个路由节点。

相关概念

应用场景

☆、对海量数据需要高并发读写、高效率存储。

单机部署- Linux系统中的安装启动和连接

☆、配置文件

systemLog:
   destination: file
   path: "/mydata/mongodb/single/log/mongod.log"
   logAppend: true
storage:
   dbPath: "/mydata/mongodb/single/data/db" 
   journal:
      enabled: true
processManagement:
   fork: true
net:
   bindIp: localhost,192.168.56.10
   port: 27017

☆、启动

/mydata/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongod -f /mydata/mongodb/single/mongod.conf

集群和安全

副本集

☆、概念:一组维护相同数据集的mongod服务。
☆、作用:
-.数据备份。
-.主从集群,增加读取性能。

副本集的两种类型、三个角色

副本集的创建

创建主节点

☆、配置文件:基本和创建单机节点的配置一致,多出来processManagement.pidFilePath和replication用于命名副本集的名称,注意三个节点副本集名称要一致

systemLog:
   destination: file
   path: "/mydata/mongodb/replica_sets/myrs_27017/log/mongod.log"
   logAppend: true
storage:
   dbPath: "/mydata/mongodb/replica_sets/myrs_27017/data/db" 
   journal:
      enabled: true
processManagement:
   fork: true
   pidFilePath: "/mydata/mongodb/replica_sets/myrs_27017/log/mongod.pid"
net:
   bindIp: localhost,192.168.56.10
   port: 27017
replication: 
   replSetName: myrs

☆、启动

/mydata/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongod -f /mydata/mongodb/replica_sets/myrs_27017/mongod.conf

创建副本节点

☆、配置文件:除了目录好端口号之外和创建主节点一致。

systemLog:
   destination: file
   path: "/mydata/mongodb/replica_sets/myrs_27018/log/mongod.log"
   logAppend: true
storage:
   dbPath: "/mydata/mongodb/replica_sets/myrs_27018/data/db" 
   journal:
      enabled: true
processManagement:
   fork: true
   pidFilePath: "/mydata/mongodb/replica_sets/myrs_27018/log/mongod.pid"
net:
   bindIp: localhost,192.168.56.10
   port: 27018
replication: 
   replSetName: myrs   

☆、启动

/mydata/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongod -f /mydata/mongodb/replica_sets/myrs_27018/mongod.conf

创建仲裁节点

☆、配置文件:除了目录好端口号之外和创建主节点一致。

systemLog:
   destination: file
   path: "/mydata/mongodb/replica_sets/myrs_27019/log/mongod.log"
   logAppend: true
storage:
   dbPath: "/mydata/mongodb/replica_sets/myrs_27019/data/db" 
   journal:
      enabled: true
processManagement:
   fork: true
   pidFilePath: "/mydata/mongodb/replica_sets/myrs_27019/log/mongod.pid"
net:
   bindIp: localhost,192.168.56.10
   port: 27019
replication: 
   replSetName: myrs   

☆、启动

/mydata/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongod -f /mydata/mongodb/replica_sets/myrs_27019/mongod.conf

查看是否启动成功

在这里插入图片描述

初始化配置副本集和主节点

☆、命令(也是linux的连接mongo数据库命令)

/mydata/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongo --host=192.168.56.10 --port=27017 
rs.initiate()

☆、rs.initiate()输入之后再按一下,切换到主节点
在这里插入图片描述

添加副本从节点

注意添加副从本节点和仲裁从节点都要在主节点下
在这里插入图片描述

☆、命令

rs.add("192.168.56.10:27018")

添加仲裁从节点

☆、命令

rs.addArb("192.168.56.10:27019")

副本集的数据读写操作

☆、登录副本(从)节点,默认情况下从节点是没有读写权限的,可以增加读权限但是需要进行设置。

rs.slaveOk()

☆、设置了之后查看里面的数据,它会自动同步主节点的数据。就实现了读写分离,让主插入数据,让从来读取数据
☆、如果要取消从节点的读权限的命令

rs.slaveOk(false)

故障测试

☆、关闭副本节点:往主节点写入数据,再启动从节点后发现主节点写入的数据会自动同步给从节点。
☆、关闭主节点:副本节点变为主节点,再启动之前的主节点时它变为了副本节点。
☆、仲裁节点和主节点故障:剩余的一个副本节点任是副本节点,只能读无法写入。如果要触发选举,随便加入一个成员即可,如果只加入一个仲裁节点,那么主节点一定是这个副本节点;如果加入一个副本节点,则按照谁数据新,谁当主节点。
☆、仲裁节点和从节点故障:剩余的那个主节点会降级为副本节点,并且只能读无法写。

主节点登录

☆、进入任意节点,输入连接命令连接后,输入

 rs.status()

☆、查看主节点是哪个,然后新开个窗口连接
在这里插入图片描述

分片集群

分片的概念

☆、把数据拆分分散存在不同的机器上。实现非常大的数据集和高吞吐量操作的部署。
☆、数据库存有大量的数据或者大量对数据库的操作会挑战单个服务器的容量。解决方法:
1.垂直扩展
(1)使用更强大的CPU,添加更多RAM。
(2)硬件配置有上限,这样垂直扩展有实际的最大值。
2.水平扩展
(1)把数据根据业务划分分配到各个服务器上。(水平分表)
☆、组件:
1.分片:储存数据, 每个分片都可以部署为副本集。
2.mongos(路由):查询路由器,在客户端应用程序和分片集群之间提供接口。
3.配置服务(config servers):配置服务器存储群集的元数据和配置设置。(从MongoDB 3.4开
始,必须将配置服务器部署为副本集)

分片节点副本集的创建

☆、创建前先杀掉服务器上正在启动的mongo服务

第一套副本集搭建

☆、一主一副本一仲裁。
☆、配置文件,相较于副本集的创建多出来了sharding用来指定角色(要么是一个分片,要么是一个配置服务)。

systemLog:
   destination: file
   path: "/mydata/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.log"
   logAppend: true
storage:
   dbPath: "/mydata/mongodb/sharded_cluster/myshardrs01_27018/data/db" 
   journal:
      enabled: true
processManagement:
   fork: true
   pidFilePath: "/mydata/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.pid"
net:
   bindIp: localhost,192.168.56.10
   port: 27018
replication: 
   replSetName: myshardrs01 
sharding:  
   clusterRole: shardsvr

☆、依次启动第一套副本集的三个服务。
例:

/mydata/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongod -f /mydata/mongodb/sharded_cluster/myshardrs01_27018/mongod.conf

☆、查看是否启动成功
在这里插入图片描述
☆、初始化配置副本集和主节点,和创建副本集那里一样的。

/mydata/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongo --host=192.168.56.10 --port=27018
rs.initiate()

☆、添加副本节点

rs.add("192.168.56.10:27118")

☆、添加仲裁节点

rs.addArb("192.168.56.10:27118")

第二套副本集搭建

☆、和第一套搭建的方式一样。
☆、初始化配置副本集和主节点,添加副本节点,添加仲裁节点。

配置节点副本集搭建

☆、和第一套搭建的方式一样,配置文件改两个地方。
在这里插入图片描述
☆、初始化配置副本集和主节点,添加两个副本节点。
注意配置节点没有仲裁节点,是添加两个副本节点

rs.add("192.168.56:27119")
rs.add("192.168.56:27219")

路由节点的创建和操作

第一个路由节点的创建和连接

☆、配置文件(和之前的很多地方不一样了)

systemLog:
   destination: file
   path: "/mydata/mongodb/sharded_cluster/mymongos_27017/log/mongod.log"
   logAppend: true
processManagement:
   fork: true
   pidFilePath: "/mydata/mongodb/sharded_cluster/mymongos_27017/log/mongod.pid"
net:
   bindIp: localhost,192.168.56.10
   port: 27017 
sharding:  
   configDB: myconfigrs/192.168.56.10:27019,192.168.56.10:27119,192.168.56.10:27219

☆、在路由节点上进行分片配置操作
1.添加第一套分片副本集:

sh.addShard("myshardrs01/192.168.56.10:27018,192.168.56.10:27118,192.168.56.10:27218")

若果分片是单机的,使用sh.addShard(“IP:Port”)就可以。
2.添加第二套分片副本集:

sh.addShard("myshardrs02/192.168.56.10:27318,192.168.56.10:27418,192.168.56.10:27518")

3.使用sh.status()查看分片状态,发现是不把仲裁节点加进来的,因为它不存具体的数据。
在这里插入图片描述
4.开启分片功能
(1)在mongos上的articledb数据库配置sharding

sh.enableSharding("articledb")

(2)对集合分片,指定集合和分片键。(MongoDB按照片键将数据划分到不同的 数据块 中,并将 数据块 均衡地分布到所有分片中,为了按照片键划分数据块,MongoDB使用 基于哈希的分片方式(随机平均分配)或者基于范围的分片方式(数值大小分配))
哈希策略:(分片规则用哈希策略的比较多一些)

用什么字段当片键都可以,如:nickname作为片键,但一定是必填字段。
sh.shardCollection("articledb.comment",{"nickname":"hashed"})

范围策略

sh.shardCollection("articledb.author",{"age":1})

注意点
<1>一个集合只能指定一个片键,否则报错。
<2>一旦对一个集合分片,分片键和分片值就不可改变。
(3)哈希策略和范围策略性能对比
<1>范围策略的分片方式提供了更高效的范围查询,给定一个片键的范围,分发路由可以很简单地确定哪个数据块存储了请求需要的数据,并将请求转发到相应的分片中。不过范围策略的分片会导致数据在不同分片上不均衡,有时候,带来的消极作用会大于查询性能的积极作用.比如,如果片键所在的字段是线性增长的,一定时间内的所有请求都会落到某个固定的数据块中,最终导致分布在同一个分片中.在这种情况下,一小部分分片承载了集群大部分的数据,系统并不能很好地进行扩展。
<2>哈希策略的分片方式以范围查询性能的损失为代价,保证了集群中数据的均衡.哈希值的随机性
使数据随机分布在每个数据块中,因此也随机分布在不同分片中.但是也正由于随机性,一个范围查询很难
确定应该请求哪些分片,通常为了返回需要的结果,需要请求所有分片。
<3>无特殊情况,推荐使用哈希策略。如果范围查询比较多,比如查询年龄段这种场景,可以用范围策略。
<4>使用 _id 作为片键是一个不错的选择,因为它是必有的,可以使用数据文档 _id 的哈希作为片键。
这个方案能够是的读和写都能够平均分布,并且它能够保证每个文档都有不同的片键所以数据块能够很
精细。

再增加一个路由节点

☆、第一个路由节点之后的路由节点的添加不需要再去进行分片配置操作了,因为所有的分片信息已经同步到配置服务里面去了。添加完配置文件之后直接启动就可以了。

清除所有的节点数据

安全认证

角色

☆、常用:readWrite、root。

单实例环境

☆、关闭已开启的服务。
这一块没有跟着做,只是看了一下,用到的时候照着文档做就可以了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值