Mongodb Replica Sets+Sharding群集 部署手册

1.       群集简介

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

Replica Sets+Sharding数据库群集包含三种角色,分别如下所示:

  • Shard:使用Replica Sets确保每个数据节点都有备份、自动容错转移、自动恢复能力。
  • Config:存储元数据,确定元数据的完整性
  • Router:实现访问的负载均衡,提高客户端访问性能

服务器配置如下:


IP地址


内存配置


Cpu配置


硬盘


OS


192.168.83.45


8G


2*4核


100G


CentOs6.4 64bit


192.168.83.46


8G


2*4核


100G


CentOs6.4 64bit


192.168.83.47


8G


2*4核


100G


CentOs6.4 64bit

表格 1

2.2.    服务器部署规划

本次服务器部署规划信息如下:


IP地址


服务


端口


数据目录


日志目录


192.168.83.45


Mongod s1-1


27020


/data/mongo/s1_1/db


/data/mongo/s1_1/log


Mongod s2-1


27021


/data/mongo/s2_1/db


/data/mongo/s2_1/log


Mongod c1


27018


/data/mongo/config/db


/data/mongo/config/log


Mogos 1


27017


/data/mongo/route/log


192.168.83.46


Mongod s1-2


27020


/data/mongo/s1_2/db


/data/mongo/s1_2/log


Mongod s2-2


27021


/data/mongo/s2_2/db


/data/mongo/s2_2/log


Mongod c2


27018


/data/mongo/config/db


/data/mongo/config/log


Mogos 2


27017


/data/mongo/route/log


192.168.83.47


Mongod s1-3


27020


/data/mongo/s1_3/db


/data/mongo/s1_3/log


Mongod s2-3


27021


/data/mongo/s2_3/db


/data/mongo/s2_3/log


Mongod c3


27018


/data/mongo/config/db


/data/mongo/config/log


Mogos 3


27017


/data/mongo/route/log

表格 2

2.3.    部署准备

  • 部署前检查服务器网络,确保网络通信正常
  • 部署前确保mongodb软件已经拷贝到上述三台服务器上,本次部署使用的是mongodb-linux-x86_64-2.4.5版本
  • S1

(1)       将mongodb-linux-x86_64-2.4.5.tar分别拷贝到192.168.83.45、192.168.83.46、192.168.83.47的/usr/local目录下

(2)       分别切换到三台服务器的/usr/local目录下,使用tar xvzf mongodb-linux-x86_64-2.4.5.tar将软件包解压缩到/usr/local目录下

(3)       分别在三台服务器的/usr/local目录下使用mv mongodb-linux-x86_64-2.4.5 mongodb命令将文件夹重命名为mongodb

(4)       在83.45服务器上分别创建如下目录

mkdir –p /data/mongo/s1_1/db   mkdir –p /data/mongo/s1_1/log

(5)       在83.46服务器上分别创建如下目录

mkdir –p /data/mongo/s1_2/db  mkdir –p /data/mongo/s1_2/log

(6)       在83.47服务器上分别创建如下目录

(7)       mkdir –p /data/mongo/s1_3/db  mkdir –p /data/mongo/s1_3/log

(8)       切换到83.45服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s1 --port 27020--dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log--logappend –fork

(9)       切换到83.46服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s1 --port 27020--dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log--logappend –fork

(10)   切换到83.47服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s1 --port 27020--dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log--logappend –fork

(11)   连接三个节点的任一个初始化复制集s1,这里以连接到83.45的27020为例,执行下述命令:

./mongo –port 27020

(12)   切换到admin数据库

Useadmin

(13)   依次执行下述命令对复制集S1初始化

  • config={_id:‘s1‘,members:[{_id:0,host:‘192.168.83.45:27020‘},{_id:1,host:‘192.168.83.46:27020‘},{_id:2,host:‘192.168.83.47:27020‘}]}
  • rs.initiate(config)

(14)   初始化完成后查看复制集的状态,执行如下命令:

rs.status()

3.2.    部署复制集S2

(1)       在83.45服务器上分别创建如下目录

mkdir –p /data/mongo/s2_1/db   mkdir –p /data/mongo/s2_1/log

(2)       在83.46服务器上分别创建如下目录

mkdir –p /data/mongo/s2_2/db  mkdir –p /data/mongo/s2_2/log

(3)       在83.47服务器上分别创建如下目录

mkdir –p /data/mongo/s2_3/db  mkdir –p /data/mongo/s2_3/log

(4)       切换到83.45服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s2 --port 27021--dbpath=/data/mongo/s2_1/db --logpath=/data/mongo/s2_1/log/mongo.log--logappend --fork

(5)       切换到83.46服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s2 --port 27021--dbpath=/data/mongo/s2_2/db --logpath=/data/mongo/s2_2/log/mongo.log--logappend --fork

(6)       切换到83.47服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s2 --port 27021--dbpath=/data/mongo/s2_3/db --logpath=/data/mongo/s2_3/log/mongo.log--logappend --fork

(7)       连接三个节点的任一个初始化复制集s2,这里以连接到83.45的27021为例,执行下述命令:

./mongo –port 27021

(8)       切换到admin数据库

Useadmin

(9)       依次执行下述命令对复制集S1初始化

  • config={_id:‘s2‘,members:[{_id:0,host:‘192.168.83.45:27021‘},{_id:1,host:‘192.168.83.46:27021‘},{_id:2,host:‘192.168.83.47:27021‘}]}
  • rs.initiate(config)

(10)    初始化完成后查看复制集的状态,执行如下命令:

rs.status()

3.3.    配置configserver

(1)         分别切换到192.168.83.45、192.168.83.46、192.168.83.47三台服务器的  /usr/local/mongodb/bin目录下:

  • Cd/usr/local/mongodb/bin

(2)         依次在192.168.83.45、192.168.83.46、192.168.83.47三台服务器上执行下述命令:

  • ./mongod  --configsvr --dbpath /data/mongo/config/db--port 27018 --logpath /data/mongo/config/log/mongo.log –fork
  • routeserver

(1)         分别切换到192.168.83.45、192.168.83.46、192.168.83.47三台服务器的  /usr/local/mongodb/bin目录下:

  • Cd/usr/local/mongodb/bin

(2)         依次在192.168.83.45、192.168.83.46、192.168.83.47三台服务器上执行下述命令:

  • ./mongos--fork--configdb"192.168.83.45:27018,192.168.83.46:27018,192.168.83.47:27018"--logpath /data/mongo/route/log/mongo.log --port 27017
  • ShardCluster

(1)         连接任一mongos进程执行以下命令,这里以83.45的27017为例

  • ./mongo192.168.83.45:27017

(2)         切换到admin数据库

  • Useadmin

(3)         依次执行下述命令添加分片

  • db.runCommand({addshard:"s1/192.168.83.45:27020,192.168.83.46:27020,192.168.83.47:27020"})
  • db.runCommand({addShard:"s2/192.168.83.45:27021,192.168.83.46:27021,192.168.83.47:27021"})

(4)         分片添加完成后可以查看分片的状态

  • db.printShardingStatus()

(1)         连接任一mongos进程执行以下命令,这里以83.45的27017为例

  • ./mongo192.168.83.45:27017

(2)         切换到切片数据库这里以默认的test库为例

  • Usetest

(3)         设置分片数据库激活计划分片

  • db.runCommand({enablesharding:"test"})-----设置分片数据库
  • db.runCommand({shardcollection:"test.c1",key:{_id:1}})---设置分片集合名称

(1)         连接任一mongos进程进行数据插入验证,这里以83.45的27017为例

  • ./mongo192.168.83.45:27017

(2)         切换到切片数据库test库

  • Usetest

(3)         使用下述循环插入数据进行验证,这里以插入30万条数据为例

  • for(vari=1;i<=300000;i++)db.c1.save({_id:i,age:i,name:"zhangsan",addr:"beijing",host:"1234567890"});

(4)         如果出现下述现象则说明配置成功

时间: 2024-08-06 20:08:24

Mongodb Replica Sets+Sharding群集 部署手册的相关文章

MongoDB整理笔记のReplica Sets + Sharding

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

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

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

Simple Automated Backups for MongoDB Replica Sets

There are a bunch of different methods you can use to back up your MongoDB data, but if you want to avoid downtime and/or potential performance degradation, the most common advice seems to be that you should simply do all your backups on a slave. Thi

mongodb replica sets复制集详解

一.replica sets介绍 一个复制集是一组包含相同数据集的mongod实例.一个复制集只能有一个是primary节点,其它的节点为secondary节点. 和主从复制的原理一样,复制集也是通过读取oplog来进行数据传输.oplog是一个capped collection即固定表,创建表的时候可以指定其大小,当oplog满的时候会删除旧的数据.所以设置oplog的大小非常重要,如果oplog在primary节点被覆盖而尚未被secondary节点读取的话就要重新resync. 一般的使用

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

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

第五部分 架构篇 第十三章 MongoDB Replica Sets 架构(成员深入理解)

在学习复制的概念之前,首先接着前面一章节的还有点未完结的内容做个简单的介绍,主要是自动故障转移.异步复制.以及附加功能,这些在此只做简单的介绍,在以后的相关章节中会专门深入学习. 1.自动故障转移 当Primary服务和架构中其他成员中断通信超过10秒,Replica Set将尝试选举其他成员成为一个新的Primary服务,获得多票数的Scondary将成为Primary. 架构如下: 说明: 在一个Replica Set架构中,如果Primary不可达,则会在除Primary之外的其他成员中自

第五部分 架构篇 第十二章 MongoDB Replica Sets 架构(简介)

1.Replication简介 MongoDB Replication即是在多个服务器中同步复制数据,数据复制的目的为提供冗余和提高数据的可用性,数据复制的操作即在不同的数据库服务器上保存多份复制的数据集,以此来避免单机故障进而丢失数据,复制机制也允许你恢复硬件故障和服务中断,进而起到数据的容灾和备份作用. 在MongoDB中,一个复制集就是一组mongod实例,一个mongod实例作为primary也就是所谓的master服务,接收所有的写操作,其他的mongod实例作为secondaries

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

话说在虚拟机中会报各种错误.在真实的环境中就不会那么痛苦了. 想了一下虚拟机中报错的原因有. 机器卡,处理的时间长就会抛出错误 还有虚拟机假设给的空间太小.也会报异常. 此处讲讲我的大致思路. 第一,选择三台server,最好不是虚拟的 第二,设计三台server的IP.port.和各自的角色 第三,检查防火墙有没有关闭,时间是不是同步 假设上面都能够了.那你就能够操作了. 当然,mongodb版本号和mongodb前提搭建就建在前面吧 wget http://fastdl.mongodb.or

MongoDB整理笔记のReplica Sets

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