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 ...
随机推荐
- PL/SQL重新编译包无反应
前几天碰到一个有趣的事情:早上同事执行一个包很久没有反应,就中断了执行,发邮件让我帮忙查看具体情况,我用PL/SQL Developer登录后,找到这个包的过程中发现这个包的图标有红色叉叉,也就是说这 ...
- Java 中的 Filter 过滤器详解
Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...
- Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Android 手势操作识别
(转自:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html) 首先,在Android系统中,每一次手势交互都会依照 ...
- openwrt 安装 ser2net 配置
//--- openwrt中的ipk应用 opkg install /tmp/ser2net_2.7-2_brcm63xx.ipk 看到安装成功的信息后启动ser2net Ser2net –c /et ...
- sql server全文索引使用中的小坑
一.业务场景 我们在实际生产环境中遇到了这样一种需求,即需要检索一个父子关系的子树数据 估计大家也遇到过类似的场景,最典型的就是省市数据,其中path字段是按层级关系生成的行政区路径: 如果我们已知某 ...
- centos yum update kernel
1.查看当前kernel版本 uname -r 2.查看已安装版本 rpm -q kernel 3.查看可升级kernel版本 yum list kernel 4.升级kernel版本 yum upd ...
- WinRAR的命令行模式用法介绍
因工作中要对数据打包,顺便研究了下WinRAR的命令行模式,自己写了些例子,基本用法如下: 测试压缩文件准备:文件夹test_data,内部包含子文件夹,分别存放了一些*.log和*.txt文件. 测 ...
- 帆软报表FineReport数据连接中游标问题解决方案汇总
1. 概念 在数据库中, 游标是一个十分重要的概念.游标是一种能从包括多条数据记录的结果集中,每次提取一条记录的机制. 用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,往往是一个含有多个记 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 地图和区域)
地图的数据以及区域的信息是场景的重要组成部分,这些数据同时存在客户端和服务器,而且都是由编辑器生成的.那么保存的文件数据结构是怎样的?一张3D的场景地图又是怎样处理这些数据的?同时告诉大家这里同样只是 ...