部署分片服务器

1.分片
为了突破单点数据库服务器的I/O能力限制,对数据库存储进行水平扩展,严格地说,每一个服务器或者实例或者复制集就是一个分片。

2.优势
提供类似现行增·长架构
提高数据可用性
提高大型数据库查询服务器性能

3.什么时候需要分片
单点数据库服务器存储成为瓶颈
单点数据库服务器的性能成为瓶颈
大型应用分散数据库已充分利用内存

4.简单配置
1台路由实例(端口27017)
1台配置实例(端口37017)
2台shard实例(端口47017,47018)

5.搭建mongodb分片集群。
mongodb目前最新的版本是3.4。3.4版本不在支持x86 32位的系统。
1》安装:
准备3台机器,分别是mongodb1,mongodb2,mongodb3.在创建repo的文件,以便后续进行yum安装:

环境:centos6.5 192.168.10.11 mongodb1
centos6.5 192.168.10.12 mongodb2
centos6.5 192.168.10.13 mongodb3

在三台服务器上分别创建yum的repos的文件,以便后续进行yum安装。也可以源码方式安装
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
a bak CentOS-Base.repo.bak mongodb-org-3.4.repo
[root@localhost yum.repos.d]# vim mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongodbRepository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

[root@localhost yum.repos.d]# yum -y install mongodb-org

注,安装的时候可能会报错:

[root@mongodb2mongodb]# sudo yum install -y mongodb-org
Loadedplugins: refresh-packagekit, security
Existinglock /var/run/yum.pid: anothercopyis runningas pid 2389.
Anotherappis currentlyholdingtheyumlock; waitingfor itto exit...
Theotherapplicationis: PackageKit
Memory : 151 M RSS (461 MBVSZ)
Started: SatFeb 18 23:48:39 2017 - 42:48 ago
State : Sleeping, pid: 2389
Anotherappis currentlyholdingtheyumlock; waitingfor itto exit...
Theotherapplicationis: PackageKit
Memory : 151 M RSS (461 MBVSZ)
Started: SatFeb 18 23:48:39 2017 - 42:50 ago
State : Sleeping, pid: 2389
^C

Exitingonusercancel.

kill掉hold住yum lock的进程即可:

在三台服务器上别分建立如下目录:
[root@localhost ~]# tree /data/
/data/
└── mongodbtest
├── config
│ ├── data
│ └── log
├── mongos
│ └── log
├── shard1
│ ├── data
│ └── log
├── shard2
│ ├── data
│ └── log
└── shard3
├── data
└── log

15 directories, 0 files

因为mongos是不存储数据的,所以mongos不需要data目录。

端口设定:
mongos为20000,configserver为21000,shard1为22001,shard2为22002,shard3为22003

自定义路径:
[root@localhost ~]# vim /etc/profile
export PATH=$PATH:/usr/local/mongodb/bin
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mongodb/bin:/usr/local/mongodb/bin(使用源码包方式可以自定义路径)

(一)config server 的配置
1.在每一台服务器上别分启动config server(后台运行)
[root@localhost ~]# mongod --configsvr --replSet cfgReplSet --dbpath /data/mongodbtest/config/data --port 21000 --logpath /data/mongodbtest/config/log/config.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 1981
child process started successfully, parent exiting

[root@localhost ~]# ps -ef | grep mongod
mongod 955 1 1 09:57 ? 00:00:15 /usr/bin/mongod -f /etc/mongod.conf
root 1420 1 15 10:21 ? 00:00:01 mongod --configsvr --replSet cfgReplSet --dbpath /data/mongodbtest/config/data/ --port 21000 --logpath /data/mongodbtest/config/log/config.log --fork
root 1458 1380 0 10:21 pts/0 00:00:00 grep mongod

2.配置config server 为replica set。连接到任意一台config server
[root@localhost ~]# mongo --host 192.168.10.11 --port 21000
MongoDB shell version v3.4.3
connecting to: mongodb://192.168.10.11:21000/
MongoDB server version: 3.4.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-03-29T21:18:54.891+0800 I STORAGE [initandlisten]
2017-03-29T21:18:54.891+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-03-29T21:18:54.891+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-03-29T21:18:55.139+0800 I CONTROL [initandlisten]
2017-03-29T21:18:55.139+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-03-29T21:18:55.139+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-03-29T21:18:55.139+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-03-29T21:18:55.139+0800 I CONTROL [initandlisten]
configsvr>

3.创建副本集
在刚才连上的那台config server 上配置
> rs.initiate({_id:"cfgReplSet",configsvr:true,members:[{_id:0,host:"192.168.10.11:21000"},{_id:1,host:"192.168.10.12:21000"},{_id:2,host:"192.168.10.13:21000"}]})
{ "ok" : 1 }

4.在每一台服务器上别分启动分片及副本集。(后台运行)
4.1》在每一台服务器分别以副本集的方式启动分片1
[root@localhost mongodb]# mongod --shardsvr --replSet shard1ReplSet --port 22001 --dbpath /data/mongodbtest/shard1/data --logpath /data/mongodbtest/shard1/log/shard1.log --fork --nojournal
about to fork child process, waiting until server is ready for connections.
forked process: 2576
child process started successfully, parent exiting

4.2》连接任意一台分片服务器
[root@localhost mongodb]# mongo --host 192.168.10.11 --port 22001
MongoDB shell version v3.4.2
connecting to: mongodb://192.168.10.11:22001/
MongoDB server version: 3.4.2
Server has startup warnings:
2016-05-29T22:56:44.167+0800 I STORAGE [initandlisten]
2016-05-29T22:56:44.167+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2016-05-29T22:56:44.167+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2016-05-29T22:56:44.518+0800 I CONTROL [initandlisten]
2016-05-29T22:56:44.518+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2016-05-29T22:56:44.518+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2016-05-29T22:56:44.518+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2016-05-29T22:56:44.518+0800 I CONTROL [initandlisten]
>

4.3》创建副本集,并初始化
shard1ReplSet:OTHER> use admin
switched to db admin
> rs.initiate({_id:"shard1ReplSet",members:[{_id:0,host:"192.168.10.11:22001"},{_id:1,host:"192.168.10.12:22001"},{_id:2,host:"192.168.10.13:22001"}]})
{ "ok" : 1 }

同样操作shard2 shard3,执行如下操作
[root@localhost ~]# mongod --shardsvr --replSet shard2ReplSet --port 22002 --dbpath /data/mongodbtest/shard2/data --logpath /data/mongodbtest/shard2/log/shard2.log --fork --nojournal
about to fork child process, waiting until server is ready for connections.
forked process: 2724
child process started successfully, parent exiting
[root@localhost ~]# mongod --shardsvr --replSet shard3ReplSet --port 22003 --dbpath /data/mongodbtest/shard3/data --logpath /data/mongodbtest/shard3/log/shard3.log --fork --nojournal
about to fork child process, waiting until server is ready for connections.
forked process: 2744
child process started successfully, parent exiting

5.选择一台服务器,启动mongos路由服务器
[root@localhost ~]# mongos --configdb cfgReplSet/192.168.10.11:21000,192.168.10.12:21000,192.168.10.13:21000 --port 20000 --logpath /data/mongodbtest/mongos/log/mongos.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 2764
child process started successfully, parent exiting

登陆路由服务客户端
[root@localhost ~]# mongo --host 192.168.10.12 --port 20000
MongoDB shell version v3.4.2
connecting to: mongodb://192.168.10.12:20000/
MongoDB server version: 3.4.2
Server has startup warnings:
2016-09-29T15:56:55.359+0800 I CONTROL [main]
2016-09-29T15:56:55.359+0800 I CONTROL [main] ** WARNING: Access control is not enabled for the database.
2016-09-29T15:56:55.359+0800 I CONTROL [main] ** Read and write access to data and configuration is unrestricted.
2016-09-29T15:56:55.359+0800 I CONTROL [main] ** WARNING: You are running this process as the root user, which is not recommended.
2016-09-29T15:56:55.359+0800 I CONTROL [main]
mongos>

添加分片到集群
mongos> sh.addShard("shard1ReplSet/192.168.10.11:22001,192.168.10.12:22001,192.168.10.13:22001")
{ "shardAdded" : "shard1ReplSet", "ok" : 1 }
依次添加shard2 shard3
mongos> sh.addShard("shard1ReplSet/192.168.10.11:22002,192.168.10.12:22002,192.168.10.13:22002")
{ "shardAdded" : "shard1ReplSet", "ok" : 1 }
mongos> sh.addShard("shard1ReplSet/192.168.10.11:22003,192.168.10.12:22003,192.168.10.13:22003")
{ "shardAdded" : "shard1ReplSet", "ok" : 1 }

6、Enable Sharding for a Database
mongos> sh.enableSharding("test")
{ "ok" : 1 }

7、Shard a Collection
mongos> sh.shardCollection("test.Log", { id: 1})
{ "collectionsharded" : "test.Log", "ok" : 1 }

8、测试并设置hashed策略
修改sharding 可以的策略为hashed,可以让分片保存的数据基本均衡
mongos> sh.shardCollection("test.Log",{id:"hashed"})
{ "collectionsharded" : "test.Log", "ok" : 1 }
mongos> for (var i = 1; i <= 10000; i++){
... db.Log.save({id:i,"message":"message"+i});
... }
WriteResult({ "nInserted" : 1 })
mongos> db.Log.drop() //删除db.Log库的方法
true
mongos> db.Log.stats() //数量基本平均分配到分片上了

mongodb 集群部署--分片服务器搭建的更多相关文章

  1. MongoDB集群部署 - 带访问控制的分片副本集

    1. 前言 Ceilometer将meter.event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘 ...

  2. Mongodb集群部署ReplicaSet+Sharding -摘自网络

    网上关于三种集群方式的搭建方式很多,都是分开来介绍的.Replica Set (复制集成)主要是做主从库的,但是没法实现负载均衡的效果,真正实现这个的,是Sharding(分片集群),通过数据分布在每 ...

  3. 图解MongoDB集群部署原理(3)

    MongoDB的集群部署方案中有三类角色:实际数据存储结点.配置文件存储结点和路由接入结点. 连接的客户端直接与路由结点相连,从配置结点上查询数据,根据查询结果到实际的存储结点上查询和存储数据.Mon ...

  4. Mongodb集群与分片 1

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

  5. mongodb集群配置分片集群

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

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

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

  7. MongoDB集群之分片

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

  8. Mongodb集群与分片 2

    前面我们介绍了简单的集群配置实例.在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离. 下 ...

  9. ubuntu docker 下mongodb集群和分片

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

随机推荐

  1. EOJ 3.30 B. 蛇形矩阵【找规律/待补】

    [链接]:https://acm.ecnu.edu.cn/contest/59/problem/B/ B. 蛇形矩阵 Time limit per test: 2.0 seconds Memory l ...

  2. [UR #3] 核聚变反应强度

    次大公约数就是gcd再除以其最小质因子(如果有的话).可以发现要求的sgcd 的前身gcd都是a1的约数,所以把a1质因数分解直接做就行了. #include<bits/stdc++.h> ...

  3. Java线程池ThreadPoolExecutor类源码分析

    前面我们在java线程池ThreadPoolExecutor类使用详解中对ThreadPoolExector线程池类的使用进行了详细阐述,这篇文章我们对其具体的源码进行一下分析和总结: 首先我们看下T ...

  4. mfoc安装编译

    系统环境 UBUNTU16.04,要安装好各种基础的编译环境,这就不说了,如果不知道需要什么,那就编译时出错时看到什么安装什么吧 下载源码包libnfc, mfoc, mfcuk,都是github上, ...

  5. 安卓Webview缓存网页数据(无网络正常显示)

    热度 1已有 52 次阅读2016-8-26 17:53 |个人分类:常见问题|系统分类:移动开发 一.需求经历 最近的项目是一个原生 +webview 显示的 APP,一开始的时候,网站那边要求我们 ...

  6. 国家商用password(五)基于SM2的软件授权码生成及校验

    将公开密钥算法作为软件注冊算法的优点是Cracker非常难通过跟踪验证算法得到注冊机.以下.将介绍使用SM2国密算法进行软件注冊的方法. 生成授权码 选择SM2椭圆曲线參数(P,a,b,N,Gx,Gy ...

  7. 转:maven2创建一个eclipse工程,设置M2_REPO

    from: http://tonychanhoho.iteye.com/blog/1584324 M2_REPO是一个用来定义 maven 2仓库在硬盘中的存储位置,windows默认是C:\User ...

  8. android ANR产生原因和解决的方法

    ANR (Application Not Responding) ANR定义:在Android上,假设你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框.这个对话框称作应用程序无响应(AN ...

  9. 如何使用优化代码段替代WordPress插件

    每一个WordPress网站,都可以通过使用插件来获得更多的功能.但是太多的插件,会拖慢站点的运行速度,并且让站点看上去臃肿不堪. 一些插件的功能让你舍不得卸载,但是其实你可以使用简单的PHP代码来替 ...

  10. XML基础知识学习

    概念: XML 指可扩展标记语言 XML 是一种标记语言,非常类似 HTML ,文本文件. XML 的设计宗旨是数据传输,而非显示数据 .存储和传输复杂的关系模型数据 XML 标签没有被提前定义 使用 ...