Replica Sets+Sharding方案之真枪实弹篇

话说在虚拟机中会报各种错误。在真实的环境中就不会那么痛苦了。

想了一下虚拟机中报错的原因有。

机器卡,处理的时间长就会抛出错误

还有虚拟机假设给的空间太小。也会报异常。

此处讲讲我的大致思路。

第一,选择三台server,最好不是虚拟的

第二,设计三台server的IP。port。和各自的角色

第三,检查防火墙有没有关闭,时间是不是同步

假设上面都能够了。那你就能够操作了。

当然,mongodb版本号和mongodb前提搭建就建在前面吧

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz

解压mongodb文件

主机1 版本不一样。我的是2.0.4

[[email protected] ~]# tar zxvfmongodb-linux-x86_64-2.4.7.tgz

[[email protected] ~]# mvmongodb-linux-x86_64-2.4.7 /home/mongodb

主机2

[[email protected]~]# tar zxvfmongodb-linux-x86_64-2.4.7.tgz

[[email protected]~]# mvmongodb-linux-x86_64-2.4.7 /home/mongodb

主机3

[[email protected] ~]# tar zxvfmongodb-linux-x86_64-2.4.7.tgz

[[email protected]~]# mvmongodb-linux-x86_64-2.4.7 /home/mongodb

mongo集群分片实战

server三台

主机1(172.16.0.40)                主机2(172.16.0.41)                               主机3(172.16.0.250)

第一片(11731)                    主                                               副本                                                                             仲裁

第二片(11732)                 仲裁                                              主                                                                                 副本

第三片(11733)                    副本                                       仲裁                                                                                   主

30000                    configServer                                configServer                                                           config
Server

60000                          RouteProcess                        RouteProcess                                                        Route
Process

创建数据库文件夹

主机1(172.16.0.40)配置文件

[[email protected] ~]# mkdir -p/home/data/shard1_1

[[email protected] ~]# mkdir -p/home/data/shard2_1

[[email protected] ~]# mkdir -p/home/data/shard3_1

[[email protected] ~]# mkdir -p/home/data/config                            #config
server文件夹

[[email protected] ~]# mkdir -p/home/config                                       #放配置文件

[[email protected] ~]# mkdir -p/home/data/logs

这个地方的全部配置文件夹都放在/home/config文件夹下,切记切记啊。由于我在这里吃过亏。不知一次。

分片1

[[email protected] config]# catshard1_1.conf

port=11731

dbpath=/home/data/shard1_1

logpath=/home/data/logs/shard1_1.log

directoryperdb=true

logappend=true

replSet=shard1

#bind_ip=172.16.0.40

shardsvr=true

fork=true

pidfilepath=/home/data/shard1_1.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

分片2

[[email protected] config]# catshard2_1.conf

port=11732

dbpath=/home/data/shard2_1

logpath=/home/data/logs/shard2_1.log

directoryperdb=true

logappend=true

replSet=shard2

#bind_ip=172.16.0.40

shardsvr=true

fork=true

pidfilepath=/home/data/shard2_1.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

分片3

[[email protected] config]# catshard3_1.conf

port=11733

dbpath=/home/data/shard3_1

logpath=/home/data/logs/shard3_1.log

directoryperdb=true

logappend=true

replSet=shard3

#bind_ip=172.16.0.40

shardsvr=true

fork=true

pidfilepath=/home/data/shard3_1.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

config server
配置文件

[[email protected] config]# catconfig.conf

port=30000

dbpath=/home/data/config

logpath=/home/data/logs/config.log

directoryperdb=true

configsvr=true

logappend=true

#bind_ip=172.16.0.40

fork=true

pidfilepath=/home/data/config.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

RouteProces
配置文件

[[email protected] config]# catmongos.conf

port=60000

logpath=/home/data/logs/mongos.log

logappend=true

configdb=172.16.0.40:30000,172.16.0.41:30000,172.16.0.250:30000

#bind_ip=172.16.0.40

fork=true

pidfilepath=/home/data/mongos.pid

chunkSize=5

maxConns=20000

nohttpinterface=true

主机2(172.16.0.41)配置文件

[[email protected] ~]# mkdir -p/home/data/shard1_2

[[email protected] ~]# mkdir -p/home/data/shard2_2

[[email protected] ~]# mkdir -p/home/data/shard3_2

[[email protected] ~]# mkdir -p/home/data/config                      #config server文件夹

[[email protected] ~]# mkdir -p/home/config          #放配置文件

[[email protected] ~]# mkdir -p/home/data/logs

分片1

[[email protected] config]# catshard1_2.conf

port=11731

dbpath=/home/data/shard1_2

logpath=/home/data/logs/shard1_2.log

directoryperdb=true

logappend=true

replSet=shard1

#bind_ip=172.16.0.41

shardsvr=true

fork=true

pidfilepath=/home/data/shard1_2.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

分片2

[[email protected] config]# catshard2_2.conf

port=11732

dbpath=/home/data/shard2_2

logpath=/home/data/logs/shard2_2.log

directoryperdb=true

logappend=true

replSet=shard2

#bind_ip=172.16.0.41

shardsvr=true

fork=true

pidfilepath=/home/data/shard2_2.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

分片3

[[email protected] config]# catshard3_2.conf

port=11733

dbpath=/home/data/shard3_2

logpath=/home/data/logs/shard3_2.log

directoryperdb=true

logappend=true

replSet=shard3

#bind_ip=172.16.0.41

shardsvr=true

fork=true

pidfilepath=/home/data/shard3_2.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

config server
配置文件

[[email protected] config]# catconfig.conf

port=30000

dbpath=/home/data/config

logpath=/home/data/logs/config.log

directoryperdb=true

configsvr=true

logappend=true

#bind_ip=172.16.0.41

fork=true

pidfilepath=/home/data/config.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

RouteProces
配置文件

[[email protected] config]# catmongos.conf

port=60000

logpath=/home/data/logs/mongos.log

logappend=true

configdb=172.16.0.40:30000,172.16.0.41:30000,172.16.0.250:30000

#bind_ip=172.16.0.41

fork=true

pidfilepath=/home/data/mongos.pid

chunkSize=5

maxConns=20000

nohttpinterface=true

主机3(172.16.0.250)配置文件

[[email protected] ~]# mkdir -p/home/data/shard1_3

[[email protected] ~]# mkdir -p/home/data/shard2_3

[[email protected] ~]# mkdir -p/home/data/shard3_3

[[email protected] ~]# mkdir -p/home/data/config                      #config server文件夹

[[email protected] ~]# mkdir -p/home/config          #放配置文件

[[email protected] ~]# mkdir -p/home/data/logs

分片1

[[email protected] config]# catshard1_3.conf

port=11731

dbpath=/home/data/shard1_3

logpath=/home/data/logs/shard1_3.log

directoryperdb=true

logappend=true

replSet=shard1

#bind_ip=172.16.0.250

shardsvr=true

fork=true

pidfilepath=/home/data/shard1_3.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

分片2

[[email protected] config]# catshard2_3.conf

port=11732

dbpath=/home/data/shard2_3

logpath=/home/data/logs/shard2_3.log

directoryperdb=true

logappend=true

replSet=shard2

#bind_ip=172.16.0.250

shardsvr=true

fork=true

pidfilepath=/home/data/shard2_3.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

分片3

[[email protected] config]# catshard3_3.conf

port=11733

dbpath=/home/data/shard3_3

logpath=/home/data/logs/shard3_3.log

directoryperdb=true

logappend=true

replSet=shard3

#bind_ip=172.16.0.250

shardsvr=true

fork=true

pidfilepath=/home/data/shard3_3.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

config server
配置文件

[[email protected] config]# catconfig.conf

port=30000

dbpath=/home/data/config

logpath=/home/data/logs/config.log

directoryperdb=true

configsvr=true

logappend=true

#bind_ip=172.16.0.250

fork=true

pidfilepath=/home/data/config.pid

maxConns=20000

oplogSize=5000

noprealloc=true

nohttpinterface=true

RouteProces
配置文件

[[email protected] config]# catmongos.conf

port=60000

logpath=/home/data/logs/mongos.log

logappend=true

configdb=172.16.0.40:30000,172.16.0.41:30000,172.16.0.250:30000

#bind_ip=172.16.0.250

fork=true

pidfilepath=/home/data/mongos.pid

chunkSize=5

maxConns=20000

nohttpinterface=true

启动shard1,shard2,shard3

主机1

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard1_1.conf

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard2_1.conf

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard3_1.conf

主机2

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard1_2.conf

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard2_2.conf

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard3_2.conf

主机3

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard1_3.conf

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard2_3.conf

[[email protected] ~]#/home/mongodb/bin/mongod -f /home/config/shard3_3.conf

配置ReplicaSets

配置分片1 在172.16.0.40上配置

[[email protected] ~]# /home/mongodb/bin/mongo--port 11731

MongoDB shell version: 2.0.4

connecting to:127.0.0.1:11731/test

>config={_id:‘shard1‘,members:[{_id:0,host:‘172.16.0.40:11731‘,priority:2},{_id:1,host:‘172.16.0.41:11731‘},{_id:2,host:‘172.16.0.250:11731‘,arbiterOnly:true}]}

rs.initiate(config)

配置分片2 在172.16.0.41上配置

[[email protected] ~]# /home/mongodb/bin/mongo--port 11732

MongoDB shell version: 2.0.4

connecting to:127.0.0.1:11732/test

>config={_id:‘shard2‘,members:[{_id:0,host:‘172.16.0.40:11732‘,arbiterOnly:true},{_id:1,host:‘172.16.0.41:11732‘,priority:2},{_id:2,host:‘172.16.0.250:11732‘}]}

rs.initiate(config)

配置分片3 在172.16.0.250上配置members里面的优先级priority值高的为主节点。对于仲裁点一定要加上arbiterOnly:true

[[email protected] ~]# /home/mongodb/bin/mongo--port 11733

MongoDB shell version: 2.0.4

connecting to:127.0.0.1:11733/test

>config={_id:‘shard3‘,members:[{_id:0,host:‘172.16.0.40:11733‘},{_id:1,host:‘172.16.0.41:11733‘,arbiterOnly:true},{_id:2,host:‘172.16.0.25:11733‘,priority:2}]}

rs.initiate(config)

启动3台configserver

主机1

[[email protected] ~]#/home/mongodb/bin/mongod  -f/home/config/config.conf

主机2

[[email protected] ~]#/home/mongodb/bin/mongod  -f/home/config/config.conf

主机3

[[email protected] ~]#/home/mongodb/bin/mongod  -f/home/config/config.conf

启动3台Route
Process

主机1

[[email protected] ~]# /home/mongodb/bin/mongos-f /home/config/mongos.conf

主机2

[[email protected] ~]# /home/mongodb/bin/mongos-f /home/config/mongos.conf

主机3

[[email protected] ~]#/home/mongodb/bin/mongos -f /home/config/mongos.conf

配置shardCluser

[[email protected] ~]# /home/mongodb/bin/mongo--port 60000

MongoDB shell version: 2.0.4

connecting to:127.0.0.1:60000/test

mongos> use admin

switched to db admin

mongos>db.runCommand({addshard:"shard1/172.16.0.40:11731,172.16.0.41:11731, 172.16.0.250:11731"})

mongos>db.runCommand({addshard:"shard2/172.16.0.40:11732,172.16.0.41:11732, 172.16.0.250:11732"})

mongos>
db.runCommand({addshard:"shard3/172.16.0.40:11733,172.16.0.41:11733, 172.16.0.250:11733"})

接下来激活分片,如以下的代码所看到的:   採用hash分片

db.runCommand({enablesharding:"test"})

db.runCommand({shardcollection:"test.users",key:{id:"hashed"}})

上面这个会报错,我这边版本号不支持hashed分片,要把id:1

时间: 2024-08-05 07:12:07

Replica Sets+Sharding方案之真枪实弹篇的相关文章

Mongodb Replica Sets+Sharding群集 部署手册

1.       群集简介 Mongodb是一个非关系型的分布式数据库,它可以通过自身的群集技术组成mongodb群集,进而实现数据库的横向扩展和数据库的高可用功能.Mongodb数据库群集分为Replica Sets(复制集)和Sharding(分片)两个部分.其中Replica Sets实现了mongodb数据库的高可用功能,Sharding分片实现了数据库的横向分布式扩展.在生产环境中搭建mongodb群集时一般都采取了Replica Sets+Sharding的解决方案. Replica

MongoDB整理笔记のReplica Sets + Sharding

MongoDB Auto-Sharding 解决了海量存储和动态扩容的问题,但离实际生产环境所需的高可靠.高可用还有些距离,所以有了"Replica Sets + Sharding"的解决方案. shard: 使用Replica Sets,确保每个数据节点都具有备份,自动容错转移,自动回复能力. config: 使用3个配置服务器,确保元数据的完整性. route: 使用3个路由进程,实现负载均衡,提高客户端接入性能. 配置Replica Sets + Sharding 架构图: 配置

实战mongodb3.06 Relica Sets+sharding集群

前  言 MongoDB 的Sharding机制解决了海量存储和动态扩容的问题,但离实际生产环境所需要的高可靠.高可用还有些距离,例如Shard Server的单点故障就无法解决,所以提出"ReplicatSets +Sharding"的解决方案.本方案是某某公司真实实例介绍采用MongoDB复制集和Sharding高可能用方案.本方案采用MongoDB 3.06版本. MongoDB3.0以上版本提升7到10倍的写入效率以及增加80%的数据压缩率,还能减少95%的运维成本 . Mon

第五部分 架构篇 第十四章 MongoDB Replica Sets 架构(自动故障转移/读写分离实践)

说明:该篇内容部分来自红丸编写的MongoDB实战文章. 1.简介 MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余,多机器中同一时刻只有一台是用于写操作,正是由于这个情况,为了MongoDB提供了数据一致性的保障,担当primary角色的服务能把读操作分发给Slave(详情请看前两篇关于Replica Set成员组成和理解). MongoDB高可用分为两种: Master-Slave主从复制:只需要在某一个服务启动时加上-master参数,而另外一个服务加上-slave与-so

【Mongodb】 Sharding Replica Sets 分片集群生产环境安装与介绍!

系统环境:Centos 6.5 官网手册:http://docs.mongodb.org/manual/ 参阅资料:<Mongodb权威指南><Mongodb实战><深入学习Mongodb> 由上方的官方拓扑可以看出,Sharding集群成员由Shard.ConfigServer.Router组成 Shard:可以是一个实例,官方推荐生产环境使用副本集Replica Set Config Server:为三台主机,当有1台或者2台Server当机,对于用户而言,集群还是

第五部分 架构篇 第十五章 MongoDB Replica Sets 架构(动态增加删除结点)

1.Replica Set增加结点 MongoDB Replica Set不仅提供高可用性的解决方案,它也同时提供负载均衡的解决方案,增减Replica Sets结点在实际应用中非常普遍,比如当应用的读压力暴增时,3台结点的环境已经不能满足需求,那么就需要增加一些结点将压力平均分配一下,当应用的压力小时,可以减少一些结点来减少硬件资源的成本,总是是一个长期且持续的工作. 官方给我们提供了2个方案用于增加结点,一种是通过oplog来增加结点,一种是通过数据库快照(--fastsync)和oplog

mongodb复制集(Replica sets)+分片(Sharding)环境搭建

1.创建数据目录--server a:# mkdir -p /data/shard1_1# mkdir -p /data/shard2_1# mkdir -p /data/config --server b:# mkdir -p /data/shard1_2# mkdir -p /data/shard2_2# mkdir -p /data/config --server c:# mkdir -p /data/shard1_3# mkdir -p /data/shard2_3# mkdir -p

部署Replica Sets及查看相关配置

MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台是用于写操作.正是由于这个情况,为MongoDB 提供了数据一致性的保障.担当Primary 角色的机器能把读操作分发给slave. MongoDB高可用可分为两种: Master-Slave主从复制: 只需要在某一个服务器启动时加上--master参数,而另一个服务加上--slave与--source参数,即可实现同步.MongoDB的最新版本已经不再推荐此方案. Replica Sets复制集 Mon

MongoDB整理笔记のReplica Sets

MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台机器是用于写操作,正因为如此,MongoDB提供了数据一致性的保障.而担当primary角色的机器,可以把读的操作分发给slave. MongoDB高可用分两种:   Master-Slave 主从复制 只需要在某一个服务启动时加上–master 参数,而另一个服务加上–slave 与–source 参数,即可实现同步.MongoDB 的最新版本已不再推荐此方案. Replica Sets 复制集 Mono