MongoDB复制集副本集(Replica Set)搭建

MongoDB复制集副本集(Replica Set)搭建,第1张

mongo副本集/复制集是mongo高可用性特征之一,是有自动故障恢复功能的主要集群。由一个Primary节点和一个或多个Secondary节点组成。

复制是在多台服务器之间同步数据的过程,由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点

Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据

通过上述方式来保持复制集内所有成员存储相同的数据集,提供数据的高可用

Failover (故障转移,故障切换,故障恢复)

Redundancy(数据冗余)

避免单点,用于灾难时恢复,报表处理,提升数据可用性

读写分离,分担读压力

对用户透明的系统维护升级

主节点记录所有的变更到oplog日志

辅助节点(Secondary)复制主节点的oplog日志并且将这些日志在辅助节点进行重放(做)

各个节点之间会定期发送心跳信息,一旦主节点宕机,则触发选举一个新的主节点,剩余的辅助节点指向新的主

10s内各辅助节点无法感知主节点的存在,则开始触发选举

通常1分钟内完成主辅助节点切换,10-30s内感知主节点故障,10-30s内完成选举及切换

用户恢复数据,防止数据丢失,实现灾难恢复

人为误 *** 作导致数据删除,程序Bug导致数据损坏等

首要复制节点,由选举产生,提供读写服务的节点,产生oplog日志

备用(辅助)复制节点,Secondary可以提供读服务,增加Secondary节点可以提供复制集的读服务能力

在故障时,备用节点可以根据设定的优先级别提升为首要节点。提升了复制集的可用性

Arbiter节点只参与投票,不能被选为Primary,并且不从Primary同步数据

Arbiter本身不存储数据,是非常轻量级的服务。

当复制集成员为偶数时,最好加入一个Arbiter节点,以提升复制集可用性

Mongodb版本3.0以上, 三台服务器均为64位

三台服务器    --------  Primary(Centos7)、 Secondary(Centos7)、 Secondary(Debian8);架设IP分别为 192.168.1.1、1.2、 1.3

三台服务器关闭防火墙    -------- systemctl  stop firewalld.service

三台服务器修改mongo配置文件    --------  vi  /etc/mongod.conf 

        侦听地址除了 localhost 外再加上服务器IP; 设置复制集名字(RepliSetName)。

开启mongod服务: mongod

三台服务器mongo各自初始化: rs.initiate()

Primary上副本集配置:

rsconf(配置名称,可随意取)={_id:"副本集名",member:[{_id:0,host:"IP:port",priority:2},{_id:1,host:"IP:port",priority:1},{_id:2,host:"IP:port",priority:1}]}

在初始化:rs.initiate(变量名,如下面的config)

Secondary上配置:

rs.slaveOk()    #承认自己是Secondary

三台服务器上互相添加副本集成员:

rs.add("IP:port"), 如在Primary上 rs.add("192.168.1.2:27017"), rs.add("192.168.1.3:27017")

查看状态

rs.status()

3、rs(replication set) 常用命令:

初始化副本集  ----  rs.initiate()

mongo查看状态 ---- rs.status()

初始化副本集配置

rsconf = {_id: "rs0",

members: [{

_id: 0,

host: ":27017"}]}

rs.initiate( rsconf )

验证副本集配置  ----  rs.config()

增加副本集成员  ----  rs.add("Ip:port")

移除副本集成员  ----  rs.remove("IP:port")    #此步骤在Primary上 *** 作

改变成员变量的优先级

cfg = rs.conf()

cfg.members[0].priority = 3

cfg.members[1].priority = 1

cfg.members[2].priority = 2

rs.reconfig(cfg)

配置延迟副本集

cfg = rs.conf()

cfg.members[0].priority = 0

cfg.members[0].hidden = true

cfg.members[0].slaveDelay = 3600

rs.reconfig(cfg)

#  07/03/2017

顾名思义,副本集是一个集合,即MongoDB实例的集合,集合中的每个成员拥有相同的数据集合;一个副本集包含多个数据节点和一个可选的仲裁节点,在数据节点中,只有一个可以作为主节点(Primary Node),其他节点只能是第二节点(Secondary Nodes)。

主节点接收所有的写 *** 作,一个副本集只能有一个能够确认写入的主节点(Primary Node),如下图:

第二节点复制主节点的 *** 作日志并且将所有的 *** 作应用到自己的数据集合中,复制过程是异步的,如果主节点不可用,一个可以被选举的第二节点将会被选举为主节点,所以在副本集中,即使一个或者多个成员没有正常运行,但整个副本集仍然可以正常工作;主副节点关系如下图:

在某些情况下(比如受硬件条件所限,只有一个主节点和一个副节点,无法添加更多的副节点),你可以选择将mongod实例添加进副本集,并作为仲裁者(仲裁者只负责选举新的主节点,不持有数据),在副本集中,如果主节点与其他节点无法通信的时间超过配置的时间值( electionTimeoutMillis ),那么副本集将视主节点出现故障,此时将会重新选举一个正常副节点来作为新的主节点,从而让整个副本集系统正常工作,如下图:

副本集的搭建的步骤为:同时启动多个mongod实例(可以在一台服务器上,也可以在不同的服务器上),然后在每个实例的配置文件中配置相应的配置项,最后启动实例后,登录并且在做一次配置即可。

注意: 文中都是通过配置文件的方式来启动mongod实例的,你也可以通过启动参数来启动实例,同时本文中的mongod实例是通过 supervisor 来管理的,关于如何通过supervisor管理进程,可以自行查阅相关资料或者参考 这里

对于每一个配置项,如果不明白每个配置项的释义,请参考: mongo配置文件 。另外,如果实例在同一台机器上,则针对每个实例,需要区分 path , pidFilePath , port , dbPath 这几个的配置值,并且每个配置文件中的 replSetName 必须相同。

在supervisorctl中执行update,此时三个实例便启动成功。

分片是将MongoDB中的数据集分割成多个数据片,每片数据存放在不同的MongoDB实例中,可以理解为将一个MongoDB数据集拆分成多个小型数据集,而小数据集分布在相同或者不同的物理机器上,分割只是从物理层面进行分割,逻辑上仍然属于同一个数据集合。

分片包含三部分, 如下图所示:

注意: 不同的分片集群必须使用不同的配置服务器(Config Servers),不能使用同一个配置服务器(Config Servers)

分片实例的搭建与副本集类似,都是配置不同的配置文件,然后启动相应的实例:

这里只给出了关键配置项,其他配置项根据自己的实际情况配置,图中的 replSetName 表示当前实例属于哪个副本集,该副本集中的每个节点的该配置项必须一致, clusterRole 表示当前节点在分片中的的角色,可选值有: shardsvr 和 configsvr , shardsvr 表示该节点是作为Shards节点提供服务,而 configsvr 表示该节点作为Config Server节点提供服务。

至此,分片搭建完成。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/8019517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存