本文测试环境为 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. 分布式文档存储数据库之MongoDB基础入门

    一.MongoDB简介 MongoDB是用c++语言开发的一款易扩展,易伸缩,高性能,开源的,schema free 的基于文档的nosql数据库:所谓nosql是指不仅仅是sql的意思,它拥有部分s ...

  2. Java注解(入门级)

    Java注解 前言 近日在阅读开源项目,发现项目里好多奇奇怪怪的注解(@DataScope.@Log...)看得我一脸懵,不知道大家是否也有过这样的经历,回想了一下,发现自己对于注解的知识,好像只停留 ...

  3. PHP博客

    创建数据库 用户表 blog_user userid int 用户id username varchar(50) 用户名 password varchar(30) 密码 type tinyint(2) ...

  4. python爬虫06取当当网 Top 500 本五星好评书籍

    主要思路 使用 page 变量来实现翻页 我们使用 requests 请求当当网 然后将返回的 HTML 进行正则解析 由于我们暂时还没学到数据库 所以解析完之后就把内容存到文件中 def main( ...

  5. Azure Data Factory(四)集成 Logic App 的邮件通知提醒

    一,引言 上一篇有介绍到使用Azure Data Factory 复制数据,然后有集成 Azure DevOps 实现CI/CD,但是对于真正的项目来说,这些肯定是不够的,比如说在执行 Azure P ...

  6. 3. Hive相关知识点

    以下是阅读<Hive编程指南>后整理的一些零散知识点: 1. 有时候用户需要频繁执行一些命令,例如设置系统属性,或增加对于Hadoop的分布式内存,加入自定的Hive扩展的Jave包(JA ...

  7. GitLab集成Jenkins、Harborn构建pipeline流水线任务

    一.计划 在jenkins中构建流水线任务时,从GitLab当中拉取代码,通过maven打包,然后构建dokcer镜像,并将镜像推送至harbor当中.Jenkins中含开发.测试.生产视图,开发人员 ...

  8. Java 架构学习图谱

  9. ceph-fuse卡顿无法写入的问题

    问题 ceph fuse closing stale session while still operable (Oliver Dzombic) 问题原文: Hi, i am testing on c ...

  10. Spring第四天,BeanPostProcessor源码分析,彻底搞懂IOC注入及注解优先级问题!