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 ...
随机推荐
-
Javascript中DOM的练习
第一个题:html计时器 方法一: <body onLoad="show()" > <div id="b"></div> & ...
-
[shell基础]——read命令
read命令:在shell中主要用于读取输入.变量.文本 1. 接受标准输入(键盘)的输入,并将输入的数据赋值给设置的变量 [按回车键——表示输入完毕] [若输入的数据多于设置的变 ...
-
zoj 1119 /poj 1523 SPF
题目描述:考虑图8.9中的两个网络,假定网络中的数据只在有线路直接连接的2个结点之间以点对点的方式传输.一个结点出现故障,比如图(a)所示的网络中结点3出现故障,将会阻止其他某些结点之间的通信.结点1 ...
-
Log4net创建日志及简单扩展
转:http://blog.csdn.net/CHENFEIYANG2009/article/details/5397342 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log ...
-
[置顶] 【SQL】查询重复人名的次数并列出
select count(姓名) as 重复次数,姓名from 某表 group by 姓名order by 重复次数 asc 首先,group by 姓名,可以将所有相同姓名的项集合在一起.然后,c ...
-
BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
-
NSCalendar 日历类
NSCalendar 日历类 Cocoa中对日期和时间的处理 NSCalendar (一) (2008-11-12 21:54:10) NSCalendar用于处理时间相关问题.比如比较时间前后.计算 ...
-
剑指OFFER——正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字 ...
-
python -- 小数据池 is和 == 再谈编码
1.小数据池 python程序是由代码块构成的,一个代码块的文本作为python程序的执行单元. 代码块:一个模块,一个函数,一个类,甚至一个command命令都是一个代码块,一个文件也是一个代码块, ...
-
【VBA】杨辉三角
Private Sub Workbook_Open() Dim loopA As Integer Dim loopB As Integer Dim loopNum As Integer Dim top ...