机器角色分配和拓扑环境如下:

-------------------配置副本集s1-------------------------------
1.创建目录
在s1h1上创建如下目录
[root@node3 db]# mkdir -p /db/s1/conf
[root@node3 db]# mkdir -p /db/s1/data
[root@node3 db]# mkdir -p /db/s1/log

在在s1h2上创建如下目录
[root@node4 db]# mkdir -p /db/s1/conf
[root@node4 db]# mkdir -p /db/s1/data
[root@node4 db]# mkdir -p /db/s1/log

2.创建配置文件
在s1h1和s1h2上创建s1.cnf,文件保存在conf目录下
port = 27017
fork = true
dbpath = /db/s1/data
logpath = /db/s1/log/logs
logappend = true
shardsvr = true
replSet = s1

3.安装mongodb
在在s1h1和s1h2上做同样的操作
[root@node3 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node3 soft]# mv mongodb-linux-x86_64-2.6.5 /db/s1/mongodb

4.启动各节点
在每个节点上做同样的操作
[root@node3 bin]# ./mongod -f /db/s1/conf/s1.cnf
[root@node4 bin]# ./mongod -f /db/s1/conf/s1.cnf

5.初始化副本集
登陆副本集中的其中一台机器,执行如下操,我这里登陆是的s1h1
[root@node3 bin]# ./mongo 192.168.56.103:27017
> use admin
>config={_id:"s1", members:[{_id:0,host:"192.168.56.103:27017"},{_id:1,host:"192.168.56.104:27017"}]}
>rs.initiate(config);

退出重新登陆可以看到该机器为主节点
[root@node3 bin]# ./mongo 192.168.56.103:27017
MongoDB shell version: 2.6.5
connecting to: 192.168.56.103:27017/test
s1:PRIMARY>

登陆另一台机器s1h2可以看到,该机器为该副本集的从节点
[root@node4 bin]# ./mongo 192.168.56.104:27017
MongoDB shell version: 2.6.5
connecting to: 192.168.56.104:27017/test
s1:SECONDARY>

到这里副本集s1配置完成

-------------------配置副本集s2-------------------------------
1.创建目录
在s2h1上创建如下目录
[root@node3 db]# mkdir -p /db/s2/conf
[root@node3 db]# mkdir -p /db/s2/data
[root@node3 db]# mkdir -p /db/s2/log

在在s2h2上创建如下目录
[root@node4 db]# mkdir -p /db/s2/conf
[root@node4 db]# mkdir -p /db/s2/data
[root@node4 db]# mkdir -p /db/s2/log

2.创建配置文件
在s2h1和s2h2上创建s2.cnf,文件保存在conf目录下
port = 27018
fork = true
dbpath = /db/s2/data
logpath = /db/s2/log/logs
logappend = true
shardsvr = true
replSet = s2

3.安装mongodb
在在s2h1和s2h2上做同样的操作
[root@node3 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node3 soft]# mv mongodb-linux-x86_64-2.6.5 /db/s2/mongodb

4.启动各节点
在每个节点上做同样的操作
[root@node3 bin]# ./mongod -f /db/s2/conf/s2.cnf
[root@node4 bin]# ./mongod -f /db/s2/conf/s2.cnf

5.初始化副本集
登陆副本集中的其中一台机器,执行如下操,我这里登陆是的s2h1

[root@node3 bin]# ./mongo 192.168.56.103:27018
> use admin
>config={_id:"s2", members:[{_id:0,host:"192.168.56.103:27018"},{_id:1,host:"192.168.56.104:27018"}]}
>rs.initiate(config);

登陆s2h1可以看到,该节点为主节点
[root@node3 bin]# ./mongo 192.168.56.103:27018
MongoDB shell version: 2.6.5
connecting to: 192.168.56.103:27018/test
s2:PRIMARY>

登陆s2h2可以看到,该节点为副节点
[root@node4 bin]# ./mongo 192.168.56.104:27018
MongoDB shell version: 2.6.5
connecting to: 192.168.56.104:27018/test
s2:SECONDARY>

到这里副本集s2配置完成

-------------------部署配置服务器01-------------------------------
1.创建目录
mkdir -p /db/config_server01/data
mkdir -p /db/config_server01/log
mkdir -p /db/config_server01/conf

2.安装mongodb
[root@node1 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node1 soft]# mv mongodb-linux-x86_64-2.6.5 /db/config_server01/mongodb

3.创建配置文件
配置参数文件为config_server.cnf,内容如下:
port = 27017
fork = true
dbpath = /db/config_server01/data
logpath = /db/config_server01/log/logs
logappend = true
configsvr = true
directoryperdb = true

4.启动
#./mongod -f /db/config_server01/conf/config_server.cnf

-------------------部署配置服务器02-------------------------------
1.创建目录
mkdir -p /db/config_server02/data
mkdir -p /db/config_server02/log
mkdir -p /db/config_server02/conf

2.安装mongodb
[root@node1 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node1 soft]# mv mongodb-linux-x86_64-2.6.5 /db/config_server02/mongodb

3.创建配置文件
配置参数文件为config_server.cnf,内容如下:
port = 27017
fork = true
dbpath = /db/config_server02/data
logpath = /db/config_server02/log/logs
logappend = true
configsvr = true
directoryperdb = true

4.启动
#./mongod -f /db/config_server02/conf/config_server.cnf

-------------------部署配置服务器03-------------------------------
1.创建目录
mkdir -p /db/config_server03/data
mkdir -p /db/config_server03/log
mkdir -p /db/config_server03/conf

2.安装mongodb
[root@node1 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node1 soft]# mv mongodb-linux-x86_64-2.6.5 /db/config_server03/mongodb

3.创建配置文件
配置参数文件为config_server.cnf,内容如下:
port = 27017
fork = true
dbpath = /db/config_server03/data
logpath = /db/config_server03/log/logs
logappend = true
configsvr = true
directoryperdb = true

4.启动
#./mongod -f /db/config_server03/conf/config_server.cnf

-------------------部署路由服务器01-------------------------------
1.创建目录
mkdir -p /db/route_server01/data
mkdir -p /db/route_server01/log
mkdir -p /db/route_server01/conf

2.安装mongodb
[root@node2 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node2 soft]# mv mongodb-linux-x86_64-2.6.5 /db/route_server01/mongodb

3.创建配置文件
配置参数文件为route_server.cnf,内容如下:
port = 27017
configdb=192.168.56.101:27017,192.168.56.101:27018,192.168.56.101:27019
logpath = /db/route_server01/log/logs
fork = true

4.启动
[root@node2 bin]# ./mongos -f /db/route_server01/conf/route_server.cnf

5.添加分片服务器
./mongo
mongos>use admin
mongos>db.runCommand({"addshard":"s1/192.168.56.103:27017,192.168.56.104:27017",allowLocal:true})
mongos>db.runCommand({"addshard":"s2/192.168.56.103:27018,192.168.56.104:27018",allowLocal:true})

6.查看分片情况
mongos> db.runCommand({listshards:1});db.runCommand({listshards:1});
{
        "shards" : [
                {
                        "_id" : "s1",
                        "host" : "s1/192.168.56.103:27017,192.168.56.104:27017"
                },
                {
                        "_id" : "s2",
                        "host" : "s2/192.168.56.103:27018,192.168.56.104:27018"
                }
        ],
        "ok" : 1
}

步骤5和步骤6只需要在第一台路由服务器上执行即可.

-------------------部署路由服务器02-------------------------------
1.创建目录
mkdir -p /db/route_server02/data
mkdir -p /db/route_server02/log
mkdir -p /db/route_server02/conf

2.安装mongodb
[root@node2 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node2 soft]# mv mongodb-linux-x86_64-2.6.5 /db/route_server02/mongodb

3.创建配置文件
配置参数文件为route_server.cnf,内容如下:
port = 27018
configdb=192.168.56.101:27017,192.168.56.101:27018,192.168.56.101:27019
logpath = /db/route_server02/log/logs
fork = true

4.启动
[root@node2 bin]# ./mongos -f /db/route_server02/conf/route_server.cnf

-------------------部署路由服务器03-------------------------------
1.创建目录
mkdir -p /db/route_server03/data
mkdir -p /db/route_server03/log
mkdir -p /db/route_server03/conf

2.安装mongodb
[root@node2 soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[root@node2 soft]# mv mongodb-linux-x86_64-2.6.5 /db/route_server03/mongodb

3.创建配置文件
配置参数文件为route_server.cnf,内容如下:
port = 27019
configdb=192.168.56.101:27017,192.168.56.101:27018,192.168.56.101:27019
logpath = /db/route_server03/log/logs
fork = true

4.启动
[root@node2 bin]# ./mongos -f /db/route_server03/conf/route_server.cnf

----------测试--------------------------
1.在路由服务器上执行

数据库hxl启用分片功能
mongos>db.runCommand({"enablesharding":"hxl"});

2.为集合person设置片键,这里使用id做hash分片
mongos>use admin
mongos>db.runCommand({"shardcollection":"hxl.person","key":{"_id":"hashed"}})
{ "collectionsharded" : "hxl.person", "ok" : 1 }

3.写入数据
mongos>use hxl
mongos>for (var i=0;i<100000;i++){db.person.insert({"name":"hxl"+i,"age":i})}
mongos> db.person.count();

4.查看数据分布情况
mongos> db.person.stats()
{
        "sharded" : true,
        "systemFlags" : 1,
        "userFlags" : 1,
        "ns" : "hxl.person",
        "count" : 100000,
        "numExtents" : 12,
        "size" : 11200000,
        "storageSize" : 22364160,
        "totalIndexSize" : 7636384,
        "indexSizes" : {
                "_id_" : 3254048,
                "_id_hashed" : 4382336
        },
        "avgObjSize" : 112,
        "nindexes" : 2,
        "nchunks" : 4,
        "shards" : {
                "s1" : {
                        "ns" : "hxl.person",
                        "count" : 49981,
                        "size" : 5597872,
                        "avgObjSize" : 112,
                        "storageSize" : 11182080,
                        "numExtents" : 6,
                        "nindexes" : 2,
                        "lastExtentSize" : 8388608,
                        "paddingFactor" : 1,
                        "systemFlags" : 1,
                        "userFlags" : 1,
                        "totalIndexSize" : 3826368,
                        "indexSizes" : {
                                "_id_" : 1627024,
                                "_id_hashed" : 2199344
                        },
                        "ok" : 1
                },
                "s2" : {
                        "ns" : "hxl.person",
                        "count" : 50019,
                        "size" : 5602128,
                        "avgObjSize" : 112,
                        "storageSize" : 11182080,
                        "numExtents" : 6,
                        "nindexes" : 2,
                        "lastExtentSize" : 8388608,
                        "paddingFactor" : 1,
                        "systemFlags" : 1,
                        "userFlags" : 1,
                        "totalIndexSize" : 3810016,
                        "indexSizes" : {
                                "_id_" : 1627024,
                                "_id_hashed" : 2182992
                        },
                        "ok" : 1
                }
        },
        "ok" : 1
}
mongos>

可以看到刚才写入的10万条记录已经进行了分片,其中s1分配了49981,s2分配了50019.

集群启动顺序:

1.启动副本集s1
192.168.56.103:27017
192.168.56.104:27017

[root@node3 bin]# ./mongod -f /db/s1/conf/s1.cnf
[root@node4 bin]# ./mongod -f /db/s1/conf/s1.cnf

2.启动副本集s2
192.168.56.103:27018
192.168.56.104:27018

[root@node3 bin]# ./mongod -f /db/s2/conf/s2.cnf
[root@node4 bin]# ./mongod -f /db/s2/conf/s2.cnf

3.启动配置服务器
192.168.56.101
启动
#./mongod -f /db/config_server/conf/config_server.cnf

4.启动路由服务器
192.168.56.102
启动
[root@node2 bin]# ./mongos -f /db/route_server/conf/route_server.cnf

问题

1.从副本集默认是不可读取的,需要设置进行可读取.

s1:SECONDARY> show tables
2016-03-21T16:21:57.258+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
s1:SECONDARY> db.getMongo().setSlaveOk();

2.遇到配置服务器不同步的情况下,需要将之前的配置服务器的config文件拷贝到其他配置服务器的相应路径
2016-03-29T16:36:09.927+0800 [mongosMain] ERROR: could not verify that config servers are in sync :: caused by :: config servers 192
.168.56.101:27017 and 192.168.56.101:27018 differ: { chunks: "458d90243d2642fcdadcbd6ea0dea87a", collections: "7afff57cb1d2cdca4eaed
f6c462c96cd", databases: "8659f3bdedc73744e099a248f94854c0", shards: "6be1adb78a41e5ab733bd10119b0ce1d", version: "bf167dc1df1dac1f

3.配置服务器必须是1个或是3个,或基数个,否则路由服务器无法启动.

 
 

MongoDB之shard_副本集和分片部署的更多相关文章

  1. mongodb副本集和分片存储理论整理

    目录 理论概述 一.各种集群简述 二.原理 主从复制 Mongodb副本集 理论概述 一.各种集群简述 mongodb有三种集群搭建方式: 分片:sharding.指为处理大量数据,将数据分开存储,不 ...

  2. 关于MongoDB副本集和分片集群有关用户和权限的说明分析

    1.MongoDB副本集 可以先创建超管用户,然后再关闭服务,创建密钥文件,修改配置文件,启动服务,使用超管用户登录验证,然后创建普通用户 2.MongoDB分片集群 先关闭服务,创建密钥文件,修改配 ...

  3. 搭建高可用mongodb集群—— 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...

  4. Mongodb分布式集群副本集+分片

    目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...

  5. mongodb集群搭建(分片+副本)开启安全认证

    关于安全认证得总结: 这个讲述的步骤也是先创建超管用户,关闭服务,然后生成密钥文件,开启安全认证,启动服务 相关概念 先来看一张图: 从图中可以看到有四个组件:mongos.config server ...

  6. Mongodb主从复制/ 副本集/分片集群介绍

    前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...

  7. Mongodb主从复制 及 副本集+分片集群梳理

    转载努力哥原文,原文连接https://www.cnblogs.com/nulige/p/7613721.html 介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 ...

  8. ClickHouse学习系列之四【副本&分片部署说明】

    背景 以前介绍过ClickHouse相关的系列文章,现在继续说明.本文开始说明ClickHouse的副本与分片,和其他数据库一样,ClickHouse也会出现单节点故障和单节点资源到达上限的情况.所以 ...

  9. 搭建mongodb集群(副本集+分片)

    搭建mongodb集群(副本集+分片) 转载自:http://blog.csdn.net/bluejoe2000/article/details/41323051 完整的搭建mongodb集群(副本集 ...

随机推荐

  1. vue之组件理解(一)

    组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data.computed.watch.methods 以及生命周期钩子等.仅有的例外是像 el 这样根实例特有的选项. ...

  2. 1861 奶牛的数字游戏 2006年USACO

    codevs——1861 奶牛的数字游戏 2006年USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Descript ...

  3. windows symbol server调试

    linux下gdb强大的调试功能让人印象深刻,一直以为windows下调试可执行程序非常让人头痛.经一些高人指点后知道原来windows下还有symbol server这种调试工具 参见下面两个文档 ...

  4. Java中jshell脚本

    1.当所编写的代码量少时,倘若要按照步骤会显得繁琐,可直接用JDk当中的jshell,进入cmd,输入jshell,即进入jshell脚本交互模式.省去繁琐的定义类,main方法,可直接输出Syste ...

  5. 配置 yum 源相关

    1. 修改yum配置 http://www.cnblogs.com/shuaixf/archive/2011/11/30/2268496.html 2. centos安装 epel 源 https:/ ...

  6. java学习笔记(四)面向对象

    一.形參长度可变的方法 当传入被调用的函数參数数量不确定时,在方法最后一个形參的类型后加上三个点号(...),表明该形參能够接受多个參数值.多个參数值被当做数组传入,这些參数必须为指定的类型. pac ...

  7. PS 图层后面有索引两字怎么办

    ps中图层后面有索引两字的怎么把它拖进别的图中?或怎么把索引去掉? 悬赏分:0 | 解决时间:2010-11-5 08:58 | 提问者:jk500pk 最佳答案 图像--模式 把索引颜色模式改成RG ...

  8. scss - 语法

    1.在一个样式导入另一个样式(@import "example.css") 2.scss单行注释不会显示出来 3.强大的变量(定义后,全局可使用) 4.全局默认变量(加!defau ...

  9. HDU 3118 Arbiter 判定奇圈

    题目来源:pid=3118">HDU 3118 Arbiter 题意:翻译过来就是不能有奇圈 每走一步状态会变化 当他回到起点时假设和原来的状态不一样 可能会死 求至少去掉多少条边能够 ...

  10. android 学习笔记四:控件

    1.android:gravity 指定控件的基本位置,比如居中.居右等位置 Top:顶部 bottom:底部 left:居左 right:居右 center_vertical:垂直居中 center ...