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 ...
随机推荐
- ORACLE字符集基础知识
概念描叙 ORACLE数据库有国家字符集(national character set)与数据库字符集(database character set)之分.两者都是在创建数据库时需要设置的.国家 ...
- SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)
在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...
- jQuery标签选择器
$(function() { //alert("hello jquery"); //选择器 //id选择器 $("#bt1").click( function( ...
- 【hbase】——bulk load导入数据时value=\x00\x00\x00\x01问题解析
一.存入数据类型 Hbase里面,rowkey是按照字典序进行排序.存储的value值,当用filter进行数据筛选的时候,所用的比较算法也是字典序的. 1.当存储的value值是float类型的时候 ...
- PostgreSQL-join多表连接查询和子查询
一.多表连接查询 1.连接方式概览 [inner] join 内连接:表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on 语句后边的限制条件的内容. left [outer] ...
- SCCM 2012 R2安装部署过程和问题(三)
上篇 SCCM 2012 R2安装部署过程和问题(二) 个人认为对于使用SCCM 2012的最重要的经验是耐心. SCCM采用分布式部署的架构,不同的站点角色可以部署在不同的服务器上,站点角色之间的通 ...
- PuTTY配置
目录 1.作用? 2.中文问题解决 ? 3.GUI支持? 4.使用密钥对实现安全快捷的无密码登陆? 5.操作习惯(Alt+Enter全屏以及字体配置) 6.附录(sshd服务器配置) 1.作用? Pu ...
- android 开启本地相册选择图片并返回显示
.java package com.jerry.crop; import java.io.File; import android.app.Activity; import android.conte ...
- [WPF系列]-基础系列 TabControl应用
引言 Tabcontrol控件也是我们在项目中经常用到的一个控件,用它将相关的信息组织在一起分类显示. 简介 ========================================= ...
- Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...