前面我们介绍了简单的集群配置实例。在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离。
下面我们就介绍一个接近实际的解决方案:
  • Shard:使用Replica Sets,来确保数据的可靠性。通过这个方案,可以在每个节点有数据的备份、实现自动控制容错转移和自动恢复
  • Config:使用3个配置服务器,确保元数据完整性
  • Route:配合LVS,实现负载均衡,提高接入性能。
 

1、配置集群目录

 
数据存储目录:
 $ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/ $ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/
$ mkdir -p /home/scotte.ye/data/ $ mkdir -p /home/scotte.ye/data/config1
$ mkdir -p /home/scotte.ye/data/config2
$ mkdir -p /home/scotte.ye/data/config3

日志目录:

 $ mkdir -p /home/scotte.ye/data/logs
2、配置 Shard Replica Sets
 
配置第一组Sets
 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set1 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set1 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set1

配置集群

 $ ./mongo -port
MongoDB shell version: 2.0.
connecting to: 127.0.0.1:/test
>#配置集合1
>#构建参数
>cfg={_id:'set1',
members:[{_id:,host:'192.168.35.106:10001'},
{_id:,host:'192.168.35.106:10002'},
{_id:,host:'192.168.35.106:10003'}]
};
{
"_id":"set1",
"members":[
{
"_id":,
"host":"192.168.35.106:10001"
},
{
"_id":,
"host":"192.168.35.106:10002"
},
{
"_id":,
"host":"192.168.35.106:10003"
}
]
}
>#让参数生效
>rs.initiate(cfg);
{
"info":"Config now saved locally. Should come online in about aminute.",
"OK":
}
>#查看运行状态
>rs.status();
{
"set" : "set1",
"date" : ISODate("2012-02-29T12:02:46Z"),
"myState" : ,
"syncingTo" : "192.168.35.106:10003",
"members" : [
{
"_id" : ,
"name" : "192.168.35.106:10001",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"self" : true
},
{
"_id" : ,
"name" : "192.168.35.106:10002",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:45Z"),
"pingMs" :
},
{
"_id" : ,
"name" : "192.168.35.106:10003",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:46Z"),
"pingMs" :
}
],
"ok" :
}

配置第二组sets

 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set2 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set2 //
$ ./mongod --shardsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data// -port= --nohttpinterface --replSet set2

配置集群

 $ ./mongo -port
MongoDB shell version: 2.0.
connecting to: 127.0.0.1:/test
>#配置集合1
>#构建参数
>cfg={_id:'set2',
members:[{_id:,host:'192.168.35.106:10011'},
{_id:,host:'192.168.35.106:10012'},
{_id:,host:'192.168.35.106:10013'}]
};
{
"_id":"set2",
"members":[
{
"_id":,
"host":"192.168.35.106:10011"
},
{
"_id":,
"host":"192.168.35.106:10012"
},
{
"_id":,
"host":"192.168.35.106:10013"
}
]
}
>#让参数生效
>rs.initiate(cfg);
{
"info":"Config now saved locally. Should come online in about aminute.",
"OK":
}
>#查看运行状态
>rs.status();
{
"set" : "set2",
"date" : ISODate("2012-02-29T12:12:46Z"),
"myState" : ,
"syncingTo" : "192.168.35.106:10011",
"members" : [
{
"_id" : ,
"name" : "192.168.35.106:10011",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"self" : true
},
{
"_id" : ,
"name" : "192.168.35.106:10012",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:45Z"),
"pingMs" :
},
{
"_id" : ,
"name" : "192.168.35.106:10013",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"t" : ,
"i" :
},
"optimeDate" : ISODate("2012-02-28T13:22:19Z"),
"lastHeartbeat" : ISODate("2012-02-29T12:02:46Z"),
"pingMs" :
}
],
"ok" :
}

启用config servier

 $ ./mongod --configsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data/config1/ -port= --nohttpinterface
$ ./mongod --configsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data/config2/ -port= --nohttpinterface
$ ./mongod --configsvr --fork -logpath=/home/data/logs/null -dbpath=/home/data/config3/ -port= --nohttpinterface

启用Route server

 $ ./mongos -configdb="192.168.35.106:20000,192.168.35.106:20001,192.168.35.106:20002" --fork -logpath=/home/data/logs/null
>#查看是否正常运行
>ps aux|grep mongos|grep -v grep
root 0.0 0.1 ? Sl Feb16 : ./mongos -configdb=192.168.35.106:,192.168.35.106:,192.168.35.106: --fork -logpath=/home/data/logs/null

开始配置Sharding

 $ ./mongo -port
MongoDB shell version: 2.0.
connecting to: 127.0.0.1:/test
>#进入管理数据库
>use admin
switched to db admin
>#添加Sharding
> db.runcommand({addshard:'set1/192.168.35.106:10001,192.168.35.106:10002,192.168.35.106:10003'})
{"shardAdded":"set1","ok":}
> db.runCommand({addshard:'set2/192.168.35.106:10011,192.168.35.106:10012,192.168.35.106:10013'})
{"shardAdded":"set2","ok":}
>#让test数据库支持Sharding
>db.runCommand({enablesharding:'test'})
{"ok":}
>#让数据库中的一个集合生效,且根据ID来进行分片
>db.runCommand({shardcollection:'test.user',key:{_id:}})
{"collectionshrded":"test.user","ok":} 注:另外可以通过下面两个命令查看sharding情况:
>db.runCommand({listshards:}
>printShardingStatus();

Mongodb集群与分片 2的更多相关文章

  1. MongoDB集群搭建-分片

    MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...

  2. Mongodb集群与分片 1

    分片集群   Mongodb中数据分片叫做chunk,它是一个Collection中的一个连续的数据记录,但是它有一个大小限制,不可以超过200M,如果超出产生新的分片.   下面是一个简单的分片集群 ...

  3. MongoDB集群之分片

    原文:点击打开链接 MongoDB分片 分片(sharding)是将数据拆分,将其分散在不同的机器上的过程.MongoDB支持自动分片 片键(shard key)设置分片时,需要从集合里面选一个键,用 ...

  4. mongodb集群配置分片集群

    测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...

  5. mongodb 集群部署--分片服务器搭建

    部署分片服务器 1.分片 为了突破单点数据库服务器的I/O能力限制,对数据库存储进行水平扩展,严格地说,每一个服务器或者实例或者复制集就是一个分片. 2.优势 提供类似现行增·长架构 提高数据可用性 ...

  6. ubuntu docker 下mongodb集群和分片

    首先我们计划启动了三个mongo服务:master,salve,arbiter 1.准备工作 新建文件夹如图(每个文件夹下面有db和configdb文件夹): 生成认证文件并修改权限 openssl ...

  7. MongoDB集群之分片技术应用 —— 学习笔记

    课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...

  8. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  9. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

随机推荐

  1. Gen对于数组Array的处理

    举个例子,如下: public void t() { String[][] a = new String[][] { { "x", "y" } }; Strin ...

  2. Python爬取简书主页信息

    主要学习如何通过抓包工具分析简书的Ajax加载,有时间再写一个Multithread proxy spider提升效率. 1. 关键点: 使用单线程爬取,未登录,爬取简书主页Ajax加载的内容.主要有 ...

  3. Linux 各种运算符

    目录 - 算术运算符 - 关系运算符 - 逻辑运算符 - 按位运算符 - 文件测试符 - 算术运算符 算术运算符,常用的有+.-.*./.%.++.--.** + - 加法运算符 [root@www ...

  4. mysql dbcp Caused By: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy ...

  5. Vue怎么使用Echarts创建图表

    摘要:在后台管理系统中,我们经常会遇到图表,比如说:柱形图,饼状图,折线图,雷达图等等,而用来写图表插件有很多,我这里主要介绍Echarts在项目里怎么使用,官网地址如下:https://echart ...

  6. git 使用 VisualStudio 比较分支更改

    有时候需要比较两个分支的不同,这时如果提交到 github ,那么默认就可以看到.但是这时因为没有ide的高亮或者其他的功能,看起来觉得不好 默认的 VisualStudio 比较文件比 github ...

  7. 深入贯彻闭包思想,全面理解JS闭包形成过程

    谈起闭包,它可是JavaScript两个核心技术之一(异步和闭包),在面试以及实际应用当中,我们都离不开它们,甚至可以说它们是衡量js工程师实力的一个重要指标.下面我们就罗列闭包的几个常见问题,从回答 ...

  8. 第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数

    第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all;  ...

  9. 无法将类型“System.Collections.Generic.List<anonymous type:string ClassID,string ClsssName>”隐式转换为“System.Collections.Generic.List<Ecology.Model.EnergyFlowGraph>”

    无法将类型“System.Collections.Generic.List<anonymous type:string ClassID,string ClsssName>”隐式转换为“Sy ...

  10. SQL Server无法打开物理文件,操作系统错误 5:"5(拒绝访问。)的解决办法

    在新装的系统中使用SQL Server附加以前的数据库的时候可能会遇到“无法打开物理文件,拒绝访问”的错误,如下图: 解决方法为使用windows验证登录,或者更改SQL Server内置账户类型为L ...