本文共 4178 字,大约阅读时间需要 13 分钟。
Mongodb的集群环境,的工作原理简单梳理下.当然也是站在别人的肩膀上(多人的肩膀上).做一个我认为比较好的梳理.
原理是个很重要的东西,可以帮助你解决 你不知道你不知道的问题. 同时也帮助你去理解.cuiyaonan2000@163.com
参考文章:
主(Master): 可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。
从(Slave): 只读不可写,自动从Master同步数据。
对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复. (只能人工介入,指定新的主节点,从节点不会自动升级为主节点。同时,在这段时间内,该集群架构只能处于只读状态。)
Master-Slave不支持链式结构,Slave只能直接连接Master。
Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。
从节点要知道主节点的地址,主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。(主节点记录数据的操作命令,然后从节点在执行一遍~)
主节点(Primary--图中的M):接收所有的写请求,然后把修改同步到所有从节点。一个Replica Set只能有一个Primary节点,当Primar挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。
副本节点(Secondary--图中的S):与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做
仲裁者(Arbiter--图中的A): 不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。
主节点负责数据的写入和更新,并在更新数据的同时,将操作信息写入名为 oplog 的日志文件当中。从节点会定时轮询读取 oplog 日志,根据日志内容同步更新自身的数据,保持与主节点一致。
副本集中的各节点会通过心跳信息来检测各自的健康状况(副本节点中有相互的心跳机制,同时跟主节点也有心跳),当主节点出现故障时,多个从节点会触发一次新的选举操作,并选举其中一个作为新的主节点。为了保证选举票数不同,副本集的节点数保持为奇数。MongoDB 的副本集是自带故障转移功能的主从复制。副本集可以解决主节点发生故障导致数据丢失或不可用的问题,但遇到需要存储海量数据的情况时,副本集机制就束手无策了。副本集中的一台机器可能不足以存储数据,或者说集群不足以提供可接受的读写吞吐量。这就需要用到 MongoDB 的分片(Sharding)技术,这也是 MongoDB 的另外一种集群部署模式。(副本集是对一个主节点的操作,所以高并发,大数据量的写就会让一台机器受不了,就算能读写分离,但是也不行)
MongoDB 的分片集群,需要三个重要的组件,A:Shard Server(分片服务器)、B:Config Server(配置服务器)C:Route Server(路由服务器)。
片键的概念:程序需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键称为片键(shard key).随着添加或者删除片,MongoDB会重新平衡数据,使每片的流量都比较均衡,数据量也在合理范围内。
在官网下载对应的Mongodb版本地址: 截图如下所示(当然是社区版本了,打包方式是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、mongorocksstorageEngine=wiredTiger #设置成全部ip可以访问,这样就可以在windows中去连虚拟机的MongoDB,#也可以设置成某个网段或者某个ip1234567891011bind_ip = 0.0.0.0 ~
[cuiyaonan2000@mzdssop soft]# vi /etc/profile##增加如下内容export MONGODB_HOME=/soft/mongodb-linux-x86_64-rhel70-4.4.1export 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")
转载地址:http://sbcmf.baihongyu.com/