MongoDB 分片集群配置
本文测试环境为 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
参考:
MongoDB 分片集群配置的更多相关文章
- MongoDB分片集群原理、搭建及测试详解
随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...
- mongodb分片集群
第一章 1.mongodb 分片集群解释和目的 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 第二章 1. ...
- TiDB和MongoDB分片集群架构比较
此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...
- 搭建MongoDB分片集群
在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...
- 网易云MongoDB分片集群(Sharding)服务已上线
此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括 ...
- MongoDB 分片集群实战
背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...
- CentOS7+Docker+MangoDB下部署简单的MongoDB分片集群
简单的在Docker上快速部署MongoDB分片集群 前言 文中使用的环境如下 OS:CentOS Linux release 7.5.1804 (Core) Docker:Docker versio ...
- Windows 搭建MongoDB分片集群(二)
在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...
- Windows 搭建MongoDB分片集群(一)
一.角色说明 要构建一个MongoDB分片集群,需要三个角色: shard server 即存储实际数据得分片,每个shard 可以是一个Mongod实例,也可以是一组mongod实例构成得Repl ...
随机推荐
- Python UnboundLocalError: local variable 'xxx' referenced before assignment 解决方法
一.报错含义: val=9 def test(): print(val) val = 6 print(val) test() 翻译:本地变量xxx引用前没有定义. 二.报错原因 这是Python变量作 ...
- 【洛谷】P1009 阶乘之和——高精度算法
题目描述 用高精度计算出S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...
- 做Java开发7年,今年9个月时间圆梦饿了么P7
前言 工作拧螺丝,面试造火箭.我想这是每个程序员比较头疼的事情吧!但是,又必须要经历一个面试流程,尤其是摸不清面试官问的问题,导致面试的时候不知道如何回答.本文是工作7年Java程序员从几十次面试中挑 ...
- wamp&花生壳 在本地搭建自己的网站
1.wamp下载安装(2.49),按提示来. 唯一要注意的是默认端口为80,若80端口已被占用,修改apache配置文件httpd.conf(C:\wamp\bin\apache\apache2.4. ...
- nginx下配置php5和php7
用的是lnmp 一键安装的 php5.6版本网上百度Ubuntu安装多版本PHP就行 参考文章原链接:http://blog.csdn.net/21aspnet/article/details/476 ...
- Sql 解析XML 解决方案参考
1.定义存储过程 -- =============================================-- Author: <Author,,Name>-- Create da ...
- CCPC 2020 长春站 部分简略题解
gym链接:CCPC 2020 changchun site A: 题目大意:商店里有若干个充值档位和首充奖励,你有\(n\)块钱问最多能拿到多少水. 解:由于档位不多可以直接枚举,整个二进制枚举一下 ...
- CSS选择器组合符号
组合连接符号 无连接符 多项条件 空格符 后代节点 > 子节点 + 兄弟节点 ~ 兄弟节点 这里要注意+和~之间的区别 +是后面紧邻兄弟 ~是后面所有兄弟
- JS模拟百度分享侧边栏效果
模拟百度分享侧边栏的弹出与滑入效果.当鼠标移入#div1分享侧边栏,#div1分享侧边栏区块匀速滑出直至其全部露出.当鼠标移除#div1分享侧边栏,#div1分享侧边栏区块匀速滑入隐藏,直至恢复初始位 ...
- [MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克
这节课通过讲解动态规划在文本对齐(Text Justification)和黑杰克(Blackjack)上的求解过程,来帮助我们理解动态规划的通用求解的五个步骤: 动态规划求解的五个"简单&q ...