您当前的位置: 首页 >  mongodb

cuiyaonan2000

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Mongodb的集群

cuiyaonan2000 发布时间:2020-08-26 20:48:00 ,浏览量:0

序言

       Mongodb的集群环境,的工作原理简单梳理下.当然也是站在别人的肩膀上(多人的肩膀上).做一个我认为比较好的梳理.

       原理是个很重要的东西,可以帮助你解决 你不知道你不知道的问题. 同时也帮助你去理解.cuiyaonan2000@163.com

参考文章:

  • https://blog.csdn.net/wang1144/article/details/53964999
  • https://www.jianshu.com/p/2825a66d6aed
  • http://c.biancheng.net/view/6567.html
  • https://blog.csdn.net/zhangcongyi420/article/details/92738646

Master-Slaver(主重模式)

  • 主(Master): 可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。

  • 从(Slave): 只读不可写,自动从Master同步数据。

     对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复. (只能人工介入,指定新的主节点,从节点不会自动升级为主节点。同时,在这段时间内,该集群架构只能处于只读状态。)

       Master-Slave不支持链式结构,Slave只能直接连接Master。

       Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。

       从节点要知道主节点的地址,主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。(主节点记录数据的操作命令,然后从节点在执行一遍~)

Replica Set(副本集)

在这里插入图片描述

  • 主节点(Primary--图中的M):接收所有的写请求,然后把修改同步到所有从节点。一个Replica Set只能有一个Primary节点,当Primar挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。

  • 副本节点(Secondary--图中的S):与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes

  • 仲裁者(Arbiter--图中的A): 不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。

       主节点负责数据的写入和更新,并在更新数据的同时,将操作信息写入名为 oplog 的日志文件当中。从节点会定时轮询读取 oplog 日志,根据日志内容同步更新自身的数据,保持与主节点一致。        副本集中的各节点会通过心跳信息来检测各自的健康状况(副本节点中有相互的心跳机制,同时跟主节点也有心跳),当主节点出现故障时,多个从节点会触发一次新的选举操作,并选举其中一个作为新的主节点。为了保证选举票数不同,副本集的节点数保持为奇数。MongoDB 的副本集是自带故障转移功能的主从复制。

Sharding(分片--水平切割,目前垂直切割的工具还没见到过)

        副本集可以解决主节点发生故障导致数据丢失或不可用的问题,但遇到需要存储海量数据的情况时,副本集机制就束手无策了。副本集中的一台机器可能不足以存储数据,或者说集群不足以提供可接受的读写吞吐量。这就需要用到 MongoDB 的分片(Sharding)技术,这也是 MongoDB 的另外一种集群部署模式。(副本集是对一个主节点的操作,所以高并发,大数据量的写就会让一台机器受不了,就算能读写分离,但是也不行)

       MongoDB 的分片集群,需要三个重要的组件,A:Shard Server(分片服务器)、B:Config Server(配置服务器)C:Route Server(路由服务器)。

  • Shard Server:    每个 Shard Server 都是一个 mongod 数据库实例,用于存储实际的数据块。整个数据库集合分成多个块存储在不同的 Shard Server 中。在实际生产中,一个 Shard Server 可由几台机器组成一个副本集来承担,防止因主节点单点故障导致整个系统崩溃。(实际存储,且可以使用副本集来增强高可用性)
  • Config Server:   这是独立的一个 mongod 进程,保存集群和分片的元数据,在集群启动最开始时建立,保存各个分片包含数据的信息。(相当于注册中心,记录各个分片的位置)
  • Route Server:  这是独立的一个 mongos 进程,Route Server 在集群中可作为路由使用,客户端由此接入,让整个集群看起来像是一个单一的数据库,提供客户端应用程序和分片集群之间的接口。Route Server 本身不保存数据,启动时从 Config Server 加载集群信息到缓存中,并将客户端的请求路由给每个 Shard Server,在各 Shard Server 返回结果后进行聚合并返回客户端。(最后这句话有没有想分布式事务的二次提交的功能.~~~~)

片键的概念:程序需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键称为片键(shard key).随着添加或者删除片,MongoDB会重新平衡数据,使每片的流量都比较均衡,数据量也在合理范围内。

Centos7---单机版Mongodb安装 安装配置Mongodb

在官网下载对应的Mongodb版本地址:https://www.mongodb.com/try/download/community 截图如下所示(当然是社区版本了,打包方式是tgz)

[cuiyaonan2000@mzdssop soft]# tar -zxvf mongodb-linux-x86_64-rhel70-4.4.1.tgz 

## 在安装目录下创建data文件夹用于存放数据和日志
[cuiyaonan2000@mzdssop soft]# mkdir mongodb_data


[cuiyaonan2000@mzdssop soft]# cd mongodb_data

##在mongodb_data文件夹下创建db文件夹,用于存放数据
[cuiyaonan2000@mzdssop soft]# mkdir db

##在mongodb_data文件夹下创建logs文件夹,用于存放日志
[cuiyaonan2000@mzdssop soft]# mkdir logs

##设置文件夹权限,方便操作
[cuiyaonan2000@mzdssop soft]# chmod 777 logs

##设置文件夹权限,方便操作
[cuiyaonan2000@mzdssop soft]# chmod 777 db

##在logs文件夹下创建log文件
[cuiyaonan2000@mzdssop soft]# touch mongodb.log


在data文件夹下创建mongodb.conf配置文件
[cuiyaonan2000@mzdssop soft]# vi mongodb.conf

##mongodb.conf 中增加如下内容

#端口号
port = 27017

#数据目录
dbpath = /soft/mongodb_data/db

#日志目录
logpath = /soft/mongodb_data/logs/mongodb.log

#设置后台运行
fork = true

#日志输出方式----是否追加日志
logappend = true

#开启认证
#auth = true

#最大同时连接数
maxConns=100 

#不启用验证
noauth=true 

#每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,
#然后重放后续的journal日志来恢复。
journal=true 

#存储引擎,有mmapv1、wiretiger、mongorocks
storageEngine=wiredTiger 

#设置成全部ip可以访问,这样就可以在windows中去连虚拟机的MongoDB,
#也可以设置成某个网段或者某个ip1234567891011
bind_ip = 0.0.0.0  





~                    
设置Mongodb环境变量
[cuiyaonan2000@mzdssop soft]# vi /etc/profile

##增加如下内容
export MONGODB_HOME=/soft/mongodb-linux-x86_64-rhel70-4.4.1
export PATH=$PATH:$MONGODB_HOME/bin


[cuiyaonan2000@mzdssop soft]# source /etc/profile 


 输入如下的 [cuiyaonan2000@mzdssop soft]# mongod -version 则表示成功

启动和关闭
#     -config 后面跟的是配置文件
#     -dbpath 后面跟的是存放数据的目录

# 启动
bin/mongod -config ./data/mongodb.conf --dbpath /usr/ywq/mongodb-linux-x86_64-4.0.8/data/db
# 关闭
bin/mongod -shutdown -config ./data/mongodb.conf --dbpath /usr/ywq/mongodb-linux-x86_64-4.0.8/data/db
第三方工具连接

因为Mongodb的conf中设置了不需要验证,所以可以直接用Robo 3T 1.4.1进行连接

这其中可能会因为客户端版本跟服务器版本不配的报错,直接下载最新的客户端就可以了。

另外如果连接失败的话可以在Linux中增加一个用户。

#进入Mongodb的环境
[cuiyaonan2000@mzdssop db]# mongo

#选择数据库
use admin
    
#创建一个用户,并分配root超级管理员角色
db.createUser({user:"admin", pwd: "123456", roles: ["root"]})
   
#对账号授权:db.auth(“账号”,”密码”)
db.auth("admin", "123456") 

关注
打赏
1638267374
查看更多评论
立即登录/注册

微信扫码登录

0.0379s