MongoDB3.4的sharding集群搭建及JavaAPI的简易使用

在搭建mongoDB之前,我们要考虑几个小问题:

1、我们搭建集群的目的是什么?是多备份提高容错和系统可用性还是横向拓展存储大规模数据还是两者兼有?

  如果是为了多备份那么选择replication集群搭建即可,如果是为了处理大数据则需要搭建sharding集群,如果两者兼有需要对每个shardsvr创建replica。

2、什么是sharding?和replication有什么不同?

  简单而言,replica是mongo提供服务的一个基本单位,单机系统和replication集群对用户来讲没有区别,都只相当于一个服务节点,只不过replication集群有多备份,还有服务端选举,安全性更加有保证。而sharding集群包含3个角色:mongos,configsvr,shardsvr,对于一个集群来说mongos相当于master,负责对外提供服务,shardsvr相当于slave,负责分片存储数据,而configsvr相当于router,负责记录分片元信息。这3种角色中的任何一个角色中的子节点都是一个replica。具体说明参考官方网站对sharding和replication的描述:

  replication:https://docs.mongodb.com/manual/replication/

  sharding:https://docs.mongodb.com/manual/sharding/

3、我们集群的架构又该是什么样子?

  如果对问题1和2有足够的认知的话,那么根据本地硬件环境构建一个什么样的集群大致也就清楚了,每个shardsvr的replication相当于一个slave,我们需要几个子节点就需要创建多少个shardsvr,configsvr是router信息,我们可以将所有机器都组成一个configsvr的replication用以提供router服务,至于mongos,内部使用一个节点也可以,如果需要稳定运行的话也需要组一个小的mongos的replication。

 第二部分

下面是实战环节:

  我这可以有5台服务器用来跑mongodb还有一批数据,当然,这5台机器上也跑着其他框架如spark,Hadoop等等,由于spark和hadoop都是单点故障的(什么?多master?secondary?不存在的,老夫部署集群从来都是单点故障)所以mongos也是一台节点,数据端存放在5台机器上,又由于数据量较大,硬盘较小(别人组的raid5,加一起一台服务器也就1T多空间),所以肯定不考虑备份和稳定性了(2备份硬盘就没多大地方了,hdfs还有其他数据要放),那么架构可以构建如下:

  

MongoDB3.4的sharding集群搭建及JavaAPI的简易使用

下面shardsvr每一个都是一个单独的replica,开始部署:

1、创建配置文件:

  a) configsvr

systemLog: destination: file path: "/home/cloud/platform/logs/mongodb/configsvr.log" logAppend: true storage: dbPath: "/home/cloud/platform/data/configData" journal: enabled: true setParameter: enableLocalhostAuthBypass: false processManagement: fork: true replication: replSetName: "configsvr0" sharding: clusterRole: "configsvr"

  b) shardsvr

systemLog: destination: file path: "/home/cloud/platform/logs/mongodb/shardsvr.log" logAppend: true storage: dbPath: "/home/cloud/platform/data/shardData" journal: enabled: true setParameter: enableLocalhostAuthBypass: false processManagement: fork: true replication: replSetName: "shardsvr1" sharding: clusterRole: "shardsvr"

  c) mongos

systemLog: destination: file path: "/home/cloud/platform/logs/mongodb/mongos.log" logAppend: true net: bindIp: 192.168.12.161 port: 27017 setParameter: enableLocalhostAuthBypass: false processManagement: fork: true sharding: configDB: "configsvr0/192.168.12.161:27019,192.168.12.162:27019,192.168.12.163:27019,192.168.12.164:27019,192.168.12.169:27019"

  注意:每台机器上的配置都略有不同,简易参考官方文档进行修改,replSetName这个是replication的设置,每个角色的子replication应该有相同的值,不同的replication应该有不同的值

  接下来是启动脚本

  a)shardsvr

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9bd67adfc68ab1ea86f75b7b3421b634.html