本文测试环境为 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. P5691 [NOI2001]方程的解数

    题意描述 方程的解数 求方程 \(\sum_{i=1}^{n}k_ix_i^{p_i}=0(x_i\in [1,m])\) 的解的个数. 算法分析 远古 NOI 的题目就是水 类似于这道题. 做过这道 ...

  2. Typora + picgo + sm.ms 图床设置笔记

    Typora + picgo + sm.ms 图床设置笔记 编辑于2020-03-26 本文部分内容在作者教程的基础上进行了二次编辑,如有重复,纯属必然 在此感谢大佬们的无私付出与分享 之前 用了 g ...

  3. c# sqlhlpear

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  4. 利用ms08_067入侵window xp sp1(English)版本

    前几天上课,老师搬出实验,自己体验了一下 1.环境配置 需要准备kali(攻击机),window xp (我这里是sp1 英文版本,标题很清楚了),攻击机和目标靶机要在同意网段下我的kali(192. ...

  5. 腾讯云--对象存储cos绑定自定义域名

    1.登录腾讯云控制台,找到对象存储一栏 2.选择一个你想绑定域名的存储桶 3.进入你选择的存储桶,点击域名管理 4.选择自定义源站域名.在域名处填写你要设置的自定义域名,在源站类型处选择静态网站源站, ...

  6. Spring Security验证,提示正确的信息

    关于Spring Security的使用,之前也整理过一些笔记,但是在提示信息的时候,总感觉还缺点什么?不管是不是前后端分离,我们都希望在登录验证出现错误的时候,能够提示友好的中文信息. 在前后端不分 ...

  7. 为什么人们总是认为epoll 效率比select高!!!!!!

    今天看公司代码时,发现代码里面使用的事清一色的代码使用epoll, 所以就得说一说了:宏观看一看epoll 和select的实现: select原理概述 调用select时,会发生以下事情: 从用户空 ...

  8. P类问题、NP类问题与NPC类问题

    (转载自作者 "Matrix67原创" 的文章,链接为:http://www.matrix67.com/blog/archives/105) 你会经常看到网上出现"这怎么 ...

  9. Django启动服务的流程

    我晕,启动个服务浪费快一个小时的时间,记录下步骤吧. 1.D:\django\newworld>python manage.py runserver Performing system chec ...

  10. 查询SQL Server数据库使用的版本号信息

    如何查询当前连接服务器的数据库版本号,使用以下语句执行即可: select @@version