MongoDB高可用复制集分片集群搭建
1 逻辑架构
1.1 逻辑架构图

1.2 组件说明
一、mongos(query routers):查询路由,负责client的连接,并把任务分给shards,然后收集结果。一个集群可以有多个query routers(replica sets),以分担客户端请求(负载均衡)。
二、config server:配置服务器。保存了集群的元数据(比如数据放在哪个shards上),query router通过config server中的配置信息决定把任务分配到哪个shards上。从版本3.2开始,config servers可以做成replica sets。
三、shards:分片,即数据结点,存储数据和执行计算。为了保证高可用和数据一致性,生产环境中shards 应该做成replicasets(防止丢失数据)。
2 服务器规划
2.1 IP及端口规划

2.2 linux目录规划

3 集群搭建
3.1 准备工作
1、 根据服务器系统版本,来下载最新版MongoDB(3.2.x),下载地址:https://www.mongodb.com/download-center?jmp=nav#community
2、 根据2.2节的目录规划,在6台机器中的任意一台上建好相应目录,并将下载好的MongoDB解压到/data01/项目名/mongodb/下;
3、 执行以下指令创建keyfile:
a) openssl rand -base64 741 > /data01/项目名/mongodb/keyfile/keyfile
b) chmod 300 /data01/项目名/mongodb/keyfile/keyfile
4、 根据2.1节的端口规划,在6台机器上依次执行如下指令,以开放相应端口:
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17017 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 37017 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 47017 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 57017 -j ACCEPT
3.2 参数配置
3.2.1 configServer配置
新建2.2节中的configsvr.conf文件,文件内容如下:
dbpath =/data01/项目名/mongodb/data/configsvr
configsvr = true
port = 27017
logpath =/data01/项目名/mongodb/logs/configsvr.log
logappend = true
fork = true
replSet=configRS
keyFile =/data01/项目名/mongodb/keyfile/keyfile
3.2.2 routeServer配置
新建2.2节中的mongos.conf文件,文件内容如下:
configdb =C1:27017,C2:27017,C3:27017
port = 17017
chunkSize = 5
logpath =/data01/项目名/mongodb/logs/mongos.log
logappend = true
fork = true
keyFile =/data01/项目名/mongodb/keyfile/keyfile
3.2.3 Shard配置
新建2.2节中的shard1.conf、shard2.conf、shard3.conf文件,文件内容如下:
shard1.conf:
dbpath = /data01/项目名/mongodb/data/shard1
shardsvr = true
replSet = shard1
port = 37017
oplogSize = 100
logpath = /data01/项目名/mongodb/logs/shard1.log
logappend = true
fork = true
keyFile =/data01/项目名/mongodb/keyfile/keyfile
shard2.conf:
dbpath = /data01/项目名/mongodb/data/shard2
shardsvr = true
replSet = shard2
port = 47017
oplogSize = 100
logpath = /data01/项目名/mongodb/logs/shard2.log
logappend = true
fork = true
keyFile =/data01/项目名/mongodb/keyfile/keyfile
shard3.conf:
dbpath = /data01/项目名/mongodb/data/shard3
shardsvr = true
replSet = shard3
port = 57017
oplogSize = 100
logpath = /data01/项目名/mongodb/logs/shard3.log
logappend = true
fork = true
keyFile =/data01/项目名/mongodb/keyfile/keyfile
到此,所有配置文件都已经建好,通过scp指令将整个/data01/项目名/mongodb目录拷贝到其余5台机器。
3.2.4 创建用户
分别在C1、C2、C3上运行以下命令:
/data01/项目名/mongodb/bin/mongod -f /data01/项目名/mongodb/config/configsvr.conf
再在C1上运行:/data01/项目名/mongodb/bin/mongo --port 27017
配置config server为replica sets:
>use admin
>rs.initiate( {_id: "configRS",configsvr: true,members: [{ _id: 0, host: "C1:27017" },{ _id: 1, host: "C2:27017" },{ _id: 2, host: "C3:27017" }]})
>rs.status()
创建用户
- 启动routeServer。分别在C1、C2、C3上运行以下命令:
/data01/项目名/mongodb/bin/mongos -f /data01/项目名/mongodb/config/mongos.conf
- 在C1上执行:
/data01/项目名/mongodb/bin/mongo --port 17017
mongos> use admin
mongos>db.createUser( {user: "xxx", pwd: "xxx", roles: [ { role: "root", db: "admin" } ] })
mongos>db.auth(“xxx”,”xxx”)
mongos>exit
3.2.5 配置Shard
采用以下命令启动S1、S2和S3上的shard1、shard2、shard3:
备注:先依次启动S1的shard1、S2的shard2、S3的shard3,再启动其余的。
/data01/项目名/mongodb/bin/mongod -f /data01/项目名/mongodb/config/shard1.conf
/data01/项目名/mongodb/bin/mongod -f /data01/项目名/mongodb/config/shard2.conf
/data01/项目名/mongodb/bin/mongod -f /data01/项目名/mongodb/config/shard3.conf
查看是否正常启动:netstat -lnpt
启动后连接到shard1、shard2、shard3的任意一台机器,来配置每个shard为replica sets,以下是具体配置过程:
Shard1:
/data01/项目名/mongodb/bin/mongo --port 37017
>use admin
>config = {“_id”:"shard1", members: [ {“_id”: 0,”host”:"S1:37017"}, {“_id”: 1, “host”:"S2:37017"}, {“_id”: 2, “host”:"S3:37017"}] }
>rs.initiate(config)
>exit
Shard2:
/data01/项目名/mongodb/bin/mongo --port 47017
>use admin
>config = {“_id”:"shard2", members: [ {“_id”: 0,”host”:"S1:47017"}, {“_id”: 1, “host”:"S2:47017"}, {“_id”: 2, “host”:"S3:47017"}] }
>rs.initiate(config)
>exit
Shard3:
/data01/项目名/mongodb/bin/mongo --port 57017
>use admin
>config = {“_id”:"shard3", members: [ {“_id”: 0,”host”:"S1:57017"}, {“_id”: 1, “host”:"S2:57017"}, {“_id”: 2, “host”:"S3:57017"}] }
>rs.initiate(config)
>exit
3.2.6 配置分片
配置分片只需在一台机器上操作即可,这里选择在C1上执行:
/data01/项目名/mongodb/bin/mongo --port 17017
mongos> use admin
mongos>db.auth("xxx","xxx")(3.2.4中创建的用户)
mongos>db.runCommand({addshard:"shard1/S1:37017,S2:37017,S3:37017",name:"shard1", maxsize:20480} )
mongos>db.runCommand({addshard:"shard2/S1:47017,S2:47017,S3:47017",name:"shard2", maxsize:20480} )
mongos>db.runCommand({addshard:"shard3/S1:57017,S2:57017,S3:57017",name:"shard3", maxsize:20480} )
验证分片。继续在C1执行:
db.runCommand({listShards:1})
激活分片配置。使用
sh.enableSharding("库名");
新增库并进行分片。
使用
sh.shardCollection("库名.集合名",{"_id":"hashed"});
创建对应的表(collection)并进行hash分片。
使用
sh.shardCollection("库名.集合名",{"_id":1});
创建对应的表(collection)并进行并按_id区间分片。
例子:
使用 use 库名 切换到新建的库
使用
db.createUser({user:"xxx",pwd:"xxx",roles:[{role:"dbOwner", db:"库名"}]});
创建对应用户。
验证路由
1、 use 库名(上面新建的库);
2、 插入一批测试数据:for(var i=0;i<10;i++){db.集合名.insert({name:"jeff"+i});}
3、 验证:db.集合名.stats()
MongoDB高可用复制集分片集群搭建的更多相关文章
- MongoDB 高可用集群副本集+分片搭建
MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...
- MongoDB高可用集群搭建(主从、分片、路由、安全验证)
目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...
- MongoDB高可用集群+MMS集群监控搭建
备注: mongodb学习资料 http://www.runoob.com/mongodb/mongodb-tutorial.html 一. 集群的三个组件: mongos(query routers ...
- MongoDB 高可用集群架构简介
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. 转载自严澜的博文——<如何搭建高效的 ...
- Redis高可用复制集群实现
redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...
- Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群
大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...
- 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...
- mongoDB副本集+分片集群
首先搭建一个副本集(三台机器) 主,从,仲裁 然后搭建分片shard1,在每台机子上启用shard1(这里就写一个分片吧!!如果写多了怕初学者会混乱,先写一个.然后可以按照同样的方法写第二个,第三个) ...
- MongoDB 副本集+分片 认证方式搭建
MongoDB 副本集+分片 认证方式搭建 参考资料: https://www.cnblogs.com/ityouknow/p/7344005.htmlhttps://jorwen-fang.itey ...
随机推荐
- Play Framework 完整实现一个APP(五)
程序以及基本可用了,需要继续完善页面 1.创建页面模板 创建文件 app/views/tags/display.html *{ Display a post in one of these modes ...
- [AlwaysOn Availability Groups]AlwaysOn健康诊断日志
AlwaysOn健康诊断日志 为了监控primary可用副本的健康状况,SQL Server资源DLL使用SQL Server2012的过程sp_server_diagnostics. SQL Ser ...
- 最新版powerdesign16.5连接数据库错误解决
由于工作需要,需要将数据库中的表结构逆向生成到powerdesign中,但是连接数据库一直连接不上,Connection test failed报如下错误: 解决方案: 下载ojdbc14.jar,拷 ...
- Node.js 命令行程序开发教程
nodejs开发命令行程序非常方便,具体操作方式查看下面几篇文章 http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html ...
- 【Windows编程】系列第九篇:剪贴板使用
上一篇我们学习了常见的通用对话框,本篇来了解剪贴板的使用,它常用于复制粘贴功能. 剪贴板是Windows最早就加入的功能,由于该功能非常实用,我们几乎每天都会使用到.通过剪贴板,我们就可以将数据从一个 ...
- Neutron 理解 (7): Neutron 是如何实现负载均衡器虚拟化的 [LBaaS V1 in Juno]
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- 初识【Windows API】--文本去重
最近学习操作系统中,老师布置了一个作业,运用系统调用函数删除文件夹下两个重复文本类文件,Linux玩不动,于是就只能在Windows下进行了. 看了一下介绍Windows API的博客: 点击打开 基 ...
- zlib压缩一个文件为gzip格式
网上有很多针对zlib的总结,但是很零散,自己经过总结,实现了用zlib压缩一个文件为gzip格式,似的可以直接使用winr工具解压. 具体方法是使用zlib的deflate系列函数,将buffer压 ...
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- NOIP模拟赛20161114
幸运串 题意:长度为n,字符集大小为m的字符串中有多少不同的不含回文的串 n,m<10^9 我靠这不就是萌数的DP部分吗 有规律 f[2][j][k]=1 f[i][j][k]=sigma{f[ ...