MongoDB之shard_副本集和分片部署

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

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

在在s1h2上创建如下目录
[[email protected] db]# mkdir -p /db/s1/conf
[[email protected] db]# mkdir -p /db/s1/data
[[email protected] 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上做同样的操作
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] soft]# mv mongodb-linux-x86_64-2.6.5 /db/s1/mongodb

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

5.初始化副本集
登陆副本集中的其中一台机器,执行如下操,我这里登陆是的s1h1
[[email protected] 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);

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

登陆另一台机器s1h2可以看到,该机器为该副本集的从节点
[[email protected] 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上创建如下目录
[[email protected] db]# mkdir -p /db/s2/conf
[[email protected] db]# mkdir -p /db/s2/data
[[email protected] db]# mkdir -p /db/s2/log

在在s2h2上创建如下目录
[[email protected] db]# mkdir -p /db/s2/conf
[[email protected] db]# mkdir -p /db/s2/data
[[email protected] 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上做同样的操作
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] soft]# mv mongodb-linux-x86_64-2.6.5 /db/s2/mongodb

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

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

[[email protected] 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可以看到,该节点为主节点
[[email protected] bin]# ./mongo 192.168.56.103:27018
MongoDB shell version: 2.6.5
connecting to: 192.168.56.103:27018/test
s2:PRIMARY>

登陆s2h2可以看到,该节点为副节点
[[email protected] 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
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] 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
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] 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
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] 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
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] 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.启动
[[email protected] 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
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] 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.启动
[[email protected] 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
[[email protected] soft]# tar -xvf mongodb-linux-x86_64-2.6.5.tgz
[[email protected] 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.启动
[[email protected] 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

[[email protected] bin]# ./mongod -f /db/s1/conf/s1.cnf
[[email protected] bin]# ./mongod -f /db/s1/conf/s1.cnf

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

[[email protected] bin]# ./mongod -f /db/s2/conf/s2.cnf
[[email protected] 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
启动
[[email protected] 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个,或基数个,否则路由服务器无法启动.

原文地址:https://www.cnblogs.com/ExMan/p/9696055.html

时间: 2024-10-08 10:41:56

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

Mongodb副本集和分片的概念

副本集(Replica Set): 通俗的说,副本集就是集群,主从复制,读写分离,故障切换. 副本集是Mongodb原来的主从模式的升级版本,官方已经不再推荐使用主从模式. MongoDB的副本集与主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况. mongodb的复制至少需要两个节点.其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据. mongodb各个节点常见的搭配方式为:一主一从.一主多从. 主

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

目录 理论概述 一.各种集群简述 二.原理 主从复制 Mongodb副本集 理论概述 一.各种集群简述 mongodb有三种集群搭建方式: 分片:sharding.指为处理大量数据,将数据分开存储,不同服务器保存不同的数据,它们的数据总和即为整个数据集.追求的是高性能. 复制集:Master-Slave 模式(主从复制). 副本集:副本集其实一种互为主从的关系,可理解为主主.副本集指将数据复制,多份保存,不同服务器保存同一份数据,在出现故障时自动切换.对应的是数据冗余.备份.镜像.读写分离.高可

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

完整的搭建mongodb集群(副本集+分片)的例子... 准备四台机器,分别是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0 副本集及分片策略确定如下: 将创建3个副本集,命名为shard1,shard2,shard3: 以上3个副本集作为3个分片: 每个副本集包含2个副本(主.辅): 副本分开存储,即shard1存在bluejoe1和bluejoe2上各一份...以此类推 将创建3个配置库实例,一台机器一个 bluejoe0上配置一个mongos(mongos一般可

mongodb分片部署

Mongodb 分片部署 配置mongodb集群,比如 在3个server上配置 3 shard的Mongodb集群: 架构: 1.每片数据需要3个mongod server,2个为主从数据节点:1个为仲裁节点(arbiter),不存数据. 一共三片,可以做成: 20.220-mongo1: 20001(sh1主),20002(sh2从),20003(sh3仲裁) 20.221-mongo2: 20002(sh2主),20003(sh3从),20001(sh1仲裁) 20.222-mongo3:

Mongodb 副本集+分片集群搭建

环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar zxvf mongodb-linux-x86_64-rhel62-3.4.4.tgz cp -rvf  mongodb-linux-x86_64-rhel62-3.4.4  /opt/mongodb_3.4.4 cd /opt/mongodb_3.4.4/ mkdir -pv conf logs

MongoDB 副本集+分片 认证方式搭建

MongoDB 副本集+分片 认证方式搭建 参考资料: https://www.cnblogs.com/ityouknow/p/7344005.htmlhttps://jorwen-fang.iteye.com/blog/2031756https://www.cnblogs.com/bjx2020/p/9350232.htmlhttps://www.jb51.net/article/161315.htmhttps://blog.51cto.com/beigai/1751381 环境规划: 服务器

mongodb基础学习11-复制集和分片结合使用

实际的使用中复制集和分片是结合使用的,即一个分片由一个复制集构成,多个分片存储数据库的数据 调用脚本启动两个复制集 启动configsvr的节点 启动mongos 增加分片,这次要加上复制集的id,节点为复制集的主节点 下面来看一下效果 对数据库启用分片 对数据库表启用分片 先预分一些片 先插入数据 其中一个分片复制集的主节点数据数量 从节点的数据数量 另一个分片复制集的主节点数据数量 可见演示是成功的 原文地址:https://www.cnblogs.com/liunianfeiyu/p/10

MongoDB3.0.1分片部署,国内3.0的部署文档还不是很多(何志雄)。

一).分片包括: 1.至少3个config服务器:存储了数据块对分片的映射,用于判断数据存储在那个片上. 2.分发路由器:1个以上的mongos,将用户的读.写请求分发到分片中,该服务器被应用程序访问,应用程序不直接访问分片. 3.2个以上的分片,每个分片是单独的 mongod 或者是 replica set,如果是开发.测试环境,分片可以使独立的mongod而不一定要是副本集. 二).分片读写原理: 应用程序访问mongos(又称为查询路由),mongos向config服务器(又称为配置服务器

MongoDB 基础(九)分片

分片(sharding)是通过多台服务器存储数据的方法.Mongodb使用分片可支持部署非常大的数据集和高的吞吐量操作.单台服务器的能力在各方面都有限,如CPU.IO.RAM.存储空间等.解决扩展的问题,数据库提供了两种方法:垂直扩展和分片. 垂直扩展:增加CPU.RAM,存储资源等,这也受限于硬件设备.而有些基于云的供应商也规定用户使用小的系统. 分片(水平扩展):划分数据集,将数据分布到多台服务器中,每个碎片(chard)是一个独立的数据库,这些碎片共同组成了一个逻辑的数据库.(这类似于Wi