MongoDB分片副本集生产环境部署-Windows版本
title: MongoDB分片副本集生产环境部署(Windows版本)
date: 2022-10-29 17:21:11
tags:
- 运维
系统架构
配置环境
- 系统都是windows 10 专业版,使用VMWare安装作为实验环境
- MongoDB版本为6.0.2
架构图
部署架构:

访问流程:

架构说明
Mongos是用户和集群之间的交互点,实际上mongos应该和客户端部署在同一台服务器上(重点!!,参考最后一节中的参考文章3)集群的配置文件是部署在
ConfigServer中的ShardServer是存储数据的节点,是一主一从一仲裁,主节点负责写,从节点负责读,仲裁节点只负责在主节点挂掉之后投票的,不会存储数据,因此整个分片复制集都是高可用状态ConfigServer是配置节点,为一主二从,节点数量必须为3个,否则一个挂掉之后会变成只读?(不确定,官网推荐的是必须是奇数)以上配置属于最低配置,如果服务器有富余的话建议每一个主从节点都单独部署,从而达到最高吞吐量
以上部署了两个分片,每个分片都是一个副本集,且注意一个副本集内的节点不能有两个在同一个主机上,否则宕机的话会一起挂掉
部署流程
安装MongoDB
- mongodb下载地址:https://www.mongodb.com/try/download/community,选择zip压缩包
- mongosh下载:https://www.mongodb.com/try/download/shell,6.0之后不会自带mongoshell,因此需要自己下载对应的工具包然后解压缩到mongodb的bin目录下
- mongocompass:https://www.mongodb.com/try/download/compass,mongodb的gui连接工具,如果用的其它的工具也可以跳过这个
配置Shard1分片主节点
新建文件夹如下:

配置文件内容为:
dbpath=C:\mongodb\shard1\data
logpath=C:\mongodb\shard1\log\shard1.log
journal=true
port=20001
replSet=shard1
bind_ip=0.0.0.0 # 必须加,否则连不上
运行并安装成服务,以管理员运行如下命令:
mongod -config C:\mongodb\shard1\shard1_primary.conf --install –serviceName MongoDBShard1Primary -serviceDisplayName MongoDBShard1Primary
配置Shard2分片主节点
创建对应文件夹:

配置文件内容:
dbpath=C:\mongodb\shard2\data
logpath=C:\mongodb\shard2\log\shard2.log
journal=true
port=30001
replSet=shard2
bind_ip=0.0.0.0 # 必须加,否则连不上
管理员运行如下命令:
mongod -config C:\mongodb\shard2\shard2_primary.conf --install –serviceName MongoDBShard2Primary -serviceDisplayName MongoDBShard2Primary
配置ConfigServer主节点
新建文件夹如下:

配置文件内容如下:
dbpath=C:\mongodb\configserver\data
logpath=C:\mongodb\configserver\log\config.log
journal=true
port=40001
replSet=config-server
bind_ip=0.0.0.0 # 必须加,否则连不上
configsvr=true
管理员运行如下命令:
mongod -config C:\mongodb\configserver\config_primary.conf --install –serviceName MongoDBConfigPrimary -serviceDisplayName MongoDBConfigPrimary
设置完成之后到任务管理器把三个服务都启动,服务状态变成正在运行则说明一切正常:

这时候我们第一台服务器就配好了,mongos我们先暂时不配置,要等所有都配置完成了再弄
配置Shard1从节点
和配置Shard1的主节点一模一样,在主机2上新建好文件夹,配置文件也是一样的,运行如下命令安装从节点服务:
mongod -config C:\mongodb\shard1\shard1_secondary.conf --install –serviceName MongoDBShard1Secondary -serviceDisplayName MongoDBShard1Secondary
配置Shard2仲裁节点
和配置Shard2的主节点一模一样,在主机2上新建好文件夹,配置文件也是一样的,运行如下命令安装仲裁节点服务:
mongod -config C:\mongodb\shard2\shard2_arb.conf --install –serviceName MongoDBShard2Arb -serviceDisplayName MongoDBShard2Arb
配置ConfigServer从节点
和配置ConfigServer的主节点一模一样,在主机2上新建好文件夹,配置文件也是一样的,运行如下命令安装从节点服务:
mongod -config C:\mongodb\configserver\config_secondary.conf --install –serviceName MongoDBConfigSecondary -serviceDisplayName MongoDBConfigSecondary
以上3个配置完成之后,同样的在任务管理器内运行服务,下面是截图:

配置Shard1仲裁节点
和配置Shard1的主节点一模一样,在主机3上新建好文件夹,配置文件也是一样的,运行如下命令安装仲裁节点服务:
mongod -config C:\mongodb\shard1\shard1_arb.conf --install –serviceName MongoDBShard1Arb -serviceDisplayName MongoDBShard1Arb
配置Shard2从节点
和配置Shard2的主节点一模一样,在主机3上新建好文件夹,配置文件也是一样的,运行如下命令安装从节点服务:
mongod -config C:\mongodb\shard2\shard2_secondary.conf --install –serviceName MongoDBShard2Secondary -serviceDisplayName MongoDBShard2Secondary
配置ConfigServer从节点
和配置ConfigServer的主节点一模一样,在主机3上新建好文件夹,配置文件也是一样的,运行如下命令安装仲裁节点服务:
mongod -config C:\mongodb\configserver\config_arb.conf --install –serviceName MongoDBConfigArb -serviceDisplayName MongoDBConfigSecondary
同样的,主机3也全都配置好了,运行相应的服务:

配置副本集
这一步我们要把Shard1、Shard2、ConfigServer三个部分的副本集都配置好,首先在主机1上运行如下命令:
mongo -port 20001 # 进入shard1主节点
use admin #进入管理员数据库
config = {
_id : "shard1",
configsvr: false,
version: 1,
members : [
{ _id : 0 , host : "192.168.137.128:20001" },
{ _id : 1 , host : "192.168.137.134:20001" },
{ _id : 2 , host : "192.168.137.133:20001" , arbiterOnly : true},
]
}
rs.initiate(config) # 初始化shard1集群
rs.status() #查看状态
shard1分片的副本集就配置好了,接着配置shard2副本集:
mongo -port 30001 # 进入shard1主节点
use admin #进入管理员数据库
config = {
_id : "shard2",
configsvr: false,
version: 1,
members : [
{ _id : 0 , host : "192.168.137.128:30001" },
{ _id : 1 , host : "192.168.137.134:30001", arbiterOnly : true },
{ _id : 2 , host : "192.168.137.133:30001" },
]
}
rs.initiate(config) # 初始化shard1集群
rs.status() #查看状态
shard2副本集配置就好了,接着配置configserver:
mongo -port 40001 # 进入shard1主节点
use admin #进入管理员数据库
config = {
_id : "config-server",
configsvr: true,
version: 1,
members : [
{ _id : 0 , host : "192.168.137.128:40001" },
{ _id : 1 , host : "192.168.137.134:40001"},
{ _id : 2 , host : "192.168.137.133:40001"}
]
}
rs.initiate(config) # 初始化shard1集群
rs.status() #查看状态
配置Mongos
新建C:\mongodb\mongos.conf配置文件,内容如下:
logpath=C:\mongodb\mongos\mongos.log
port=50001
bind_ip=0.0.0.0
直接在主机1上运行如下命令配置成服务:
mongos -configdb "config-server/192.168.137.128:40001,192.168.137.134:40001,192.168.137.133:40001" --config C:\mongodb\mongos.conf --install –serviceName MongoDBMongos -serviceDisplayName MongoDBMongos
之前没建的一些文件记得创建,否则启动不起来,记得在对应目录下建一下对应的日志文件
然后在任务管理器启动对应服务,运行成功之后就可以用MongoCompass连接测试了,地址为mongodb://192.168.137.128:50001/,连接之后截图如下:

到此成功,接下来客户端只需要连接这个mongos的地址就行了
登录账号密码验证
连接mongos,输入如下命令创建用户:
mongo -port 50001
use admin
db.createUser({user:'admin',pwd:'admin',roles:['clusterAdmin','dbAdminAnyDatabase','userAdminAnyDatabase','readWriteAnyDatabase']})
# 查看用户 在 admin库
db.system.users.find().pretty()
到http://slproweb.com/products/Win32OpenSSL.html下载openssl工具,安装之后输入这个命令:
openssl rand -base64 756 > D:/key.file
生成一个keyfile,然后复制到每个主机的C:\mongodb\key.file路径,之后重新配置configserver、shard1、shard2的所有节点配置:
auth=true
keyFile=C:\mongodb\key.file
然后全部重启,新的连接字符串如下:
>mongo -port 50001 -u admin -p "admin"
如果用mongocompass连接方式如下:
mongodb://admin:admin@192.168.137.128:50001/?authMechanism=DEFAULT
连接成功截图

到这步就大功告成!如果后面需要添加任何分片节点,重复上面的步骤就可以了,每个分片需要配置一主一从一仲裁,仲裁节点其实可以放在一个监控服务器上,因为不需要存储数据
其他操作及问题
修改配置
mongo --port 20001 -u "admin" -p "admin"
# 获取配置
cfg = rs.conf()
# 测试环境和生产环境这里不能配localhost,否则客户端访问不到
cfg.members[0].host = "你的IP 或者域名"
# 重新加载配置
rs.reconfig(cfg)
新增或者删除新的节点
mongo --port 20001 -u "admin" -p "admin"
rs.add("IP:端口") # 普通节点
rs.addArb("IP:端口") # 仲裁节点
rs.remove("IP:端口") # 删除节点
mongo 控制台乱码
由于mongodb后台的字符编码都是utf-8的,而中文windows cmd窗口使用的字符编码是GBK(属性-》选项-》当前代码页),所以当在cmd中使用mongo命令查询数据并显示后,中文会变成乱码。
使用下述方式修改cmd窗口的编码为utf8如下,再次查询时中文会显示正常,但是仍然不能执行中文的插入操作,可以使用MongoVUE工具执行中文的插入操作:
chcp 65001
选择“属性”中的字体,除“点阵字体”外所有的都行
未完成的部分
- 虽然设置了分片集群,但是每个集合和数据库都还不是分片的,需要自己手动连接mongos设置,这里就不继续加了,很简单
- 分片状态下怎么备份?怎么还原?这一条是大问题,后面有空了解了再写一篇新博客
参考文章
- https://www.freesion.com/article/98231067515/
- https://www.cnblogs.com/young978/p/15721098.html
- https://dba.stackexchange.com/questions/188164/how-to-make-mongos-to-be-in-a-replica-set
- 分片认证
MongoDB分片副本集生产环境部署-Windows版本的更多相关文章
- Mongodb分片副本集集群搭建
一.环境准备 1.1.主机信息(机器配置要求见硬件及开发标准规范文档V1.0) 序号 主机名 IP 1 DB_01 10.202.105.52 2 DB_02 10.202.105.53 3 DB_0 ...
- [原创]在Docker上部署mongodb分片副本集群。
一.安装docker. 请参考:http://www.cnblogs.com/hehexiaoxia/p/6150584.html 二.编写dockerfile. 1.在根目录下创建mongod的do ...
- MongoDB 分片副本集集群搭建
配置准备 三台机器: A(193.168.10.101) B(193.168.10.102) C(193.168.10.103) MongoDB 安装目录:/usr/local/mongodb Mon ...
- Mongo分片+副本集集群搭建
一. 概念简单描述 1. MongoDB分片集群包含组件: mongos,configserver,shardding分片 2. Mongos:路由服务是Sharded cluster的访问入口,本身 ...
- Mongodb副本集+分片集群环境部署记录
前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...
- Mongodb副本集+分片集群环境部署
前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...
- MongoDB集群部署 - 带访问控制的分片副本集
1. 前言 Ceilometer将meter.event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘 ...
- MongoDB在单机上搭建分片副本集群(windows)
------------------------------1.安装MongoDB...... ------------------------------2.准备好文件夹 --config:配置文件 ...
- mongodb 3.4 集群搭建:分片+副本集
mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- mongodb 3.6 集群搭建:分片+副本集
mongodb是最常用的nosql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
随机推荐
- paddle&蜜度 文本智能较对大赛经验分享(17/685)
引言 我之前参加了一个中文文本智能校对大赛,拿了17名,虽然没什么奖金但好歹也是自己solo拿的第一个比较好的名次吧,期间也学到了一些BERT应用的新视角和新的预训练方法,感觉还挺有趣的,所以在这里记 ...
- File常用的方法操作、在磁盘上创建File、获取指定目录下的所有文件、File文件的重命名、将数据写入File文件
文章目录 1.基本介绍 2.构造方法 3.常用的方法 4.代码实例 4.1 创建文件和目录(目录不存在) 4.1.1 代码 4.1.2 测试结果 4.2 测试目录存在的情况.直接写绝对的路径名 4.2 ...
- 齐博x1 万能fun 调用任意数据表 任意字段就是这么任性调用
列举了几个常用的查询进行简单封装,虽然系统也有内置的但是很多人不大会就二次封装简化了一下. 这里只封装了一个条件 多个条件的自己再封装或者用标签解决比较好 这里只是说fun可以万能调用 1获取任意表的 ...
- Codeforces 1682 D Circular Spanning Tree
题意 1-n排列,构成一个圆:1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数:询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案. 提示 1. 首先考虑什 ...
- 这才是使用ps命令的正确姿势
这才是使用ps命令的正确姿势 前言 在linux系统当中我们通常会使用命令去查看一些系统的进程信息,我们最常使用的就是 ps (process status).ps 命令主要是用于查看当前正在运行的程 ...
- SQL--存储过程的使用
存储过程的概念 存储过程类似一个函数,可以执行一条或者多条SQL语句,可带参数,可返回值 为了简化操作,方便更改和扩展,将一个事件的处理封装在一个单元中供使用. 创建存储过程 --创建存储过程(不带参 ...
- 2022,一个Java程序猿的装机配置
起因 工作一年,身边的老同学都在让我推荐适合他们需求的PC主机.于是仔细研究了一下当下的主机配置.成功试水并积攒了经验后,也给自己装了我的第一台PC主机. 主机配置 CPU:12700 主板:华硕TU ...
- 【深入浅出 Yarn 架构与实现】2-1 Yarn 基础库概述
了解 Yarn 基础库是后面阅读 Yarn 源码的基础,本节对 Yarn 基础库做总体的介绍.并对其中使用的第三方库 Protocol Buffers 和 Avro 是什么.怎么用做简要的介绍. 一. ...
- perl中 use strict会出现“requires explicit package name”错误
转载 perl中use strict的用法 如果你使用 use strict 的话,它会强迫你用 my 声明变量,否则将会报上述错误.
- win10+vs2019 编译webrtc m108
不能访问外网途径的捷径 已经下载好的资源,可以直接生成工程: https://pan.baidu.com/s/14plvXZD_qX9nn441RbsCwA?pwd=ww8c 该资源可以跳过的步骤 步 ...