本文测试环境为 CentOS 7 和 MongoDB 最新版 (4.0.12)

使用 root 操作 (实际操作中使用非 root 账户启动报错)

零、服务器分配

服务器 102 服务器 103 服务器 104
mongos mongos mongos
config server config server config server
shard server 1 主节点 shard server 1 副节点 shard server 1 仲裁
shard server 2 仲裁 shard server2 主节点 shard server 2 副节点
shard server 3 副节点 shard server 3 仲裁 shard server 3 主节点

端口:

mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003

一、MongoDB 安装

在 3 台服务器分别操作

1.1. 下载

cd /usr/local
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-v4.0-latest.tgz tar -xzvf mongodb-linux-x86_64-rhel70-v4.0-latest.tgz -C /usr/local/
mv mongodb-linux-x86_64-rhel70-4.0.12-rc0-3-gc57d7cb mongodb

1.2. 建立文件夹

mkdir -p /usr/local/mongodb/conf
mkdir -p /data/mongodb/mongos/log
mkdir -p /data/mongodb/config/data
mkdir -p /data/mongodb/config/log
mkdir -p /data/mongodb/shard1/data
mkdir -p /data/mongodb/shard1/log
mkdir -p /data/mongodb/shard2/data
mkdir -p /data/mongodb/shard2/log
mkdir -p /data/mongodb/shard3/data
mkdir -p /data/mongodb/shard3/log

1.3. 环境变量

vim /etc/profile

在文件末尾添加:

export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH

使配置立即生效:

source /etc/profile

二、config server 配置

在 3 台服务器分别操作

vim /usr/local/mongodb/conf/config.conf

内容:

# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/mongodb/config/log/congigsrv.log # Where and how to store data.
storage:
dbPath: /data/mongodb/config/data
journal:
enabled: true # how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /data/mongodb/config/log/configsrv.pid
timeZoneInfo: /usr/share/zoneinfo # network interfaces
net:
port: 21000
bindIp: 0.0.0.0 # sharding Options
sharding:
clusterRole: configsvr
replication:
replSetName: config

启动服务:

mongod -f /usr/local/mongodb/conf/config.conf

以下操作在任意一台服务器操作即可

mongo --port 21000
# config 变量
config = {
_id : "config",
members : [
{_id: 0, host: "192.168.30.102:21000" },
{_id: 1, host: "192.168.30.103:21000" },
{_id: 2, host: "192.168.30.104:21000" }
]
} # 初始化
rs.initiate(config)

三、shard server 配置

在 3 台服务器分别操作

vim /usr/local/mongodb/conf/shard1.conf

内容:

# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/mongodb/shard1/log/shard1.log # Where and how to store data.
storage:
dbPath: /data/mongodb/shard1/data
journal:
enabled: true # how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /data/mongodb/shard1/log/shard1.pid
timeZoneInfo: /usr/share/zoneinfo # network interfaces
net:
port: 27001
bindIp: 0.0.0.0 # sharding Options
sharding:
clusterRole: shardsvr
replication:
replSetName: shard1

启动服务:

mongod -f /usr/local/mongodb/conf/shard1.conf

以下操作在任意一台服务器操作即可 (实际操作中需要在非裁判服务器操作)

mongo --port 27001
use admin

# "arbiterOnly":true 代表其为仲裁节点
config = {
_id: "shard1",
members: [
{_id: 0, host: "192.168.30.102:27001"},
{_id: 1, host: "192.168.30.103:27001"},
{_id: 2, host: "192.168.30.104:27001", arbiterOnly: true}
]
}
# 初始化
rs.initiate(config)

重复上述操作配置 shard2 和 shard3, 注意修改名称、端口和对应的 arbiterOnly

四、mongos 配置

在 3 台服务器分别操作

vim /usr/local/mongodb/conf/mongos.conf

内容:

# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/mongodb/mongos/log/mongos.log # how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /data/mongodb/mongos/log/mongos.pid
timeZoneInfo: /usr/share/zoneinfo # network interfaces
net:
port: 20000
bindIp: 0.0.0.0 # sharding Options
# config 为配置服务器的副本集名字
sharding:
configDB: config/192.168.30.102:21000,192.168.30.103:21000,192.168.30.104:21000

启动服务:

mongos -f /usr/local/mongodb/conf/mongos.conf

以下操作在任意一台服务器操作即可

mongo --port 20000
use admin

# 串联路由服务器与分配副本集
sh.addShard("shard1/192.168.30.102:27001,192.168.30.103:27001,192.168.30.104:27001")
sh.addShard("shard2/192.168.30.102:27002,192.168.30.103:27002,192.168.30.104:27002")
sh.addShard("shard3/192.168.30.102:27003,192.168.30.103:27003,192.168.30.104:27003")

五、测试

在其中一台 mongos 继续操作:

# 指定 test 数据库分片生效
db.runCommand({ enablesharding :"test"}) # 指定数据库里需要分片的集合和片键
db.runCommand({ shardcollection : "test.table1",key : {id: 1}}) # 插入测试数据
for(var i = 1; i <= 100000; i++) db.table1.save({id:i,"test1":"testval1"})

六、在 Spring Boot 中使用

在其中一台 mongos 继续操作:

# 创建账户
db.createUser({
user: 'test',
pwd: '123456',
roles: [{role: "readWrite", db: "test"}]
})

Spring Boot 连接字符串:

spring:
data:
mongodb:
uri: mongodb://test:123456@192.168.30.102:20000,192.168.30.103:20000,192.168.30.104:20000/test

参考:

  1. mongodb 3.4 集群搭建:分片+副本集
  2. mongodb 3.4 集群搭建升级版 五台集群
  3. MongoDB Configuration File Options

MongoDB 分片集群配置的更多相关文章

  1. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  2. mongodb分片集群

    第一章 1.mongodb 分片集群解释和目的 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 第二章 1. ...

  3. TiDB和MongoDB分片集群架构比较

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...

  4. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  5. 网易云MongoDB分片集群(Sharding)服务已上线

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括 ...

  6. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  7. CentOS7+Docker+MangoDB下部署简单的MongoDB分片集群

    简单的在Docker上快速部署MongoDB分片集群 前言 文中使用的环境如下 OS:CentOS Linux release 7.5.1804 (Core) Docker:Docker versio ...

  8. Windows 搭建MongoDB分片集群(二)

    在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...

  9. Windows 搭建MongoDB分片集群(一)

    一.角色说明 要构建一个MongoDB分片集群,需要三个角色: shard server  即存储实际数据得分片,每个shard 可以是一个Mongod实例,也可以是一组mongod实例构成得Repl ...

随机推荐

  1. Linux的进程、线程、文件描述符是什么

    说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别. Linux 中的进程就是一个数据结构,看明白就可以理解文件描述符.重定向.管 ...

  2. Mybatis日记

    SqlSession build: ExecutorType :SIMPLE ,REUSE, BATCH, SIMPLE 为默认执行器: REUSE 为可重用执行器,重用Statement,执行器会缓 ...

  3. spring cloud feign 添加headers

    原文地址: https://www.jianshu.com/p/dfec934b737f 很多时候我们需要feign的时候添加headers 1.把当前登录用户的token传到下一个服务 2.在自己的 ...

  4. 【Kata Daily 190906】Vasya - Clerk(职员)

    题目: The new "Avengers" movie has just been released! There are a lot of people at the cine ...

  5. 也谈模块加载,吐槽CMD

    先吐槽CMD,不要没头没脑的搞出个CMD,没意思. 大家都看AMD好了,异步模块加载机制,CMD并没有改变这个模式. 模块加载的关口就是getCurrentScript,每次define被调用的时候, ...

  6. python pip install指定国内源镜像

    有时候安装一些依赖包,网不好,直接超时,或者这个包就是死都下不下来的时候,可以指定国内源镜像. pip install -i 国内镜像地址 包名 e.g. pip install -i  http:/ ...

  7. 五:request和response的使用

    接着上一篇我们在搞完servlet的终极模式之后,接着就需要对发送的请求做出响应了 在这里,所谓的响应,都是返回页面的语言在浏览器上显示也就是HTML语言,所以返回的结果只有HTML语言才能在浏览器上 ...

  8. mds的cpu占用问题分析以及解决办法

    前言 mds是ceph里面处理文件接口的组件,一旦使用文件系统,不可避免的会出现一种场景就是目录很多,目录里面的文件很多,而mds是一个单进程的组件,现在虽然有了muti mds,但稳定的使用的大部分 ...

  9. Spark3.0.1各种集群模式搭建

    对于spark前来围观的小伙伴应该都有所了解,也是现在比较流行的计算框架,基本上是有点规模的公司标配,所以如果有时间也可以补一下短板. 简单来说Spark作为准实时大数据计算引擎,Spark的运行需要 ...

  10. webug第七关:越权

    第七关:越权 观察url 将name换成admin 更改了admin的密码