作者:周洪飞,新炬网络高级技术专家。
MongoDB 的Sharding机制解决了海量存储和动态扩容的问题,但离实际生产环境所需要的高可靠、高可用还有些距离,例如Shard Server的单点故障就无法解决,所以提出”ReplicatSets + Sharding”的解决方案。本方案是某某公司真实实例介绍采用MongoDB复制集和Sharding高可能用方案。本方案采用MongoDB 3.06版本。
MongoDB3.0以上版本提升7到10倍的写入效率以及增加80%的数据压缩率,还能减少95%的运维成本 。
MonoDB3.0新特性主括:可插入式的存储引擎API、支持WiredTiger存储引擎、MMAPv1提升、复制集全面提升、集群方面的改进、提升了安全性。
MongoDB3.0以上版本拥有大幅度的改进,本作者所以采用最新的3.06版本讲解。本实例采用最新的配置文件,在官方网可以看到。
Replica Sets+sharding解决方案内容如下:
Shard服务器:使用Replica Sets确保每个数据节点都具有备份、自动容错转移、自动恢复能力;
配置服务器:使用3个配置服务器确保元数据完整性;
路由进程:使用3个路由进程实现负载均衡,提高客户端接入性能。
配置完成的Replica Sets+sharding环境如下图所示:
采用 Replica Sets+sharding 架构,可以避免单机Sharding架构中的Shard Server单点故障,这方案组合解决的sharding架构中的高可用问题。
各服务器开放的监听端口如图所示。
在三台服务器中创建mongo用户,如下面的代码所示:
首先要在mongo用户下创建shard server和Config Server的数据目录,用于存储数据,创建logs的日志目录、创建config存放配置文件目录。
在mongodb01上创建shard server和Config Server的数据目录、logs的日志目录、config存放配置文件目录。
如以上代码所示,目录/home/mongo/data/shard1_1供 shard1主节点使用,目录/home/mongo/data/shard2_1供shard2仲裁使用,目录/home/mongo/data/shard3_1 供shard3副本使用,目录/home/mongo/data/config 供整个Replica Sets+sharding架构中的1个config Server使用,目录/home/mongo/data/logs供日志使用,
目录/home/mongo/config供配置文件使用。
在mongodb02上创建shard server和Config Server的数据目录、logs的日志目录、config存放配置文件目录。
如以上代码所示,目录/home/mongo/data/shard1_2供 shard1副本使用,目录/home/mongo/data/shard2_2供shard2主节点使用,目录/home/mongo/data/shard3_1 供shard3仲裁使用,目录/home/mongo/data/config 供整个Replica Sets+sharding架构中的1个config Server使用,目录/home/mongo/data/logs供日志使用,
在mongodb03上创建shard server和Config Server的数据目录、logs的日志目录、config存放配置文件目录。
如以上代码所示,目录/home/mongo/data/shard1_3供 shard1仲裁使用,目录/home/mongo/data/shard2_3供shard2副本使用,目录/home/mongo/data/shard3_3 供shard3主节点使用,目录/home/mongo/data/config 供整个Replica Sets+sharding架构中的1个config Server使用,目录/home/mongo/data/logs供日志使用,
在三台服务器上解压mongodb-linux-x86_64-3.0.6.tgz
在mongodb01上操作,如下的代码所示:
如以上代码所示,在mongodb01启动Replica Set1中的1个成员节点,复制集名字是shard1,监听端口是11731。
在mongodb02上操作,如下的代码所示:
如以上代码所示,在mongodb2启动Replica Set1中的1个成员节点,复制集名字是shard1,监听端口是11731。
在mongodb03上操作,如下的代码所示:
如以上代码所示,在mongodb3启动Replica Set1中的1个成员节点,复制集名字是shard1,监听端口是11731。
连接mongodb01的11731端口的mongod,初始化Replicat Set1,如下代码所示:
以上代码通过执行rs.initiate(config)命令来初始化shard1的复制集Replica Set 1。
如以上代码所示,在mongodb01启动Replica Set1中的1个成员节点,复制集名字是shard2,监听端口是11732。
如以上代码所示,在mongodb2启动Replica Set1中的1个成员节点,复制集名字是shard2,监听端口是11732。
如以上代码所示,在mongodb3启动Replica Set1中的1个成员节点,复制集名字是shard2,监听端口是11732。
连接mongodb02的11732端口的mongod,初始化Replicat Set1,如下代码所示:
以上代码通过执行rs.initiate(config)命令来初始化shard2的复制集Replica Set 1。
如以上代码所示,在mongodb01启动Replica Set1中的1个成员节点,复制集名字是shard3,监听端口是11733。
如以上代码所示,在mongodb2启动Replica Set1中的1个成员节点,复制集名字是shard3,监听端口是11733。
如以上代码所示,在mongodb3启动Replica Set1中的1个成员节点,复制集名字是shard3,监听端口是11733。
连接mongodb03的11733端口的mongod,初始化Replicat Set1,如下代码所示:
三台上执行操作如下代码所示:
如以上代码所示,在三台服务器上分别执行启动Config Server进程,并指定此进程监听是30000
如以上代码所示,在三台服务器上分别启动路由控制器,并指定此进程监听端口是60000,同时指定三台服务器上的Config Server的IP和端口。
连接到其中一台机器的端口60000的mongos进程,并切换到admin数据到开始配置Sharding环境,如下面的代码所示:
以上代码通过执行以下命令:
将Replica Set 1在三台服务器上的3个成员节点作为Shard Server 1添加进sharding环境中。
将Replica Set 2在三台服务器上的3个成员节点作为Shard Server 2添加进sharding环境中。
将Replica Set 3在三台服务器上的3个成员节点作为Shard Server 3添加进sharding环境中。
接下来激活分片,如下面的代码所示: 采用hash分片
如以上代码所示,首先执行db.runCommand({enablesharding:"logs"})命令激活logs库上的分片功能;然后执行
命令激活users表的分片功能。
上一篇:传送表空间-通过跨平台增量备份 下一篇:MYSQL存储引擎介绍及选择