【Spring开发】SpringCloud交友项目实战第11篇:分片集群【附代码文档】

举报
小帅说java 发表于 2025/10/10 21:49:43 2025/10/10
【摘要】 1、Dubbo的前世今生 1、项目介绍 1.1、项目背景 1.2、市场分析 1.3、目标用户群体 1.4、使用场景 1.5、竞争对手分析 1.7、技术方案 2、前后端分离开发思想 3、开发工具与环境搭建 3.1、开发工具 3.2、环境搭建 4、sms_code验证玛 4.1 阿里云短信 4.2 自动装配 1. 完善用户信息 1.2 百度人脸识别 1.2.1 概述 1.2.2 账

🏆🏆🏆教程全知识点简介:1、Dubbo的前世今生 1、项目介绍 1.1、项目背景 1.2、市场分析 1.3、目标用户群体 1.4、使用场景 1.5、竞争对手分析 1.7、技术方案 2、前后端分离开发思想 3、开发工具与环境搭建 3.1、开发工具 3.2、环境搭建 4、sms_code验证玛 4.1 阿里云短信 4.2 自动装配 1. 完善用户信息 1.2 百度人脸识别 1.2.1 概述 1.2.2 账号申请 1.2.4 抽取模板工具 2.2 更新用户资料 2.2.1 接口文档 2.2.2 代码实现 3. 统一token处理 3.1.需求分析 3.2 解决方案 拦截器(Interceptor) ThreadLocal MongoDB入门 数据库以及表的操作 新增数据 更新数据 删除数据 查询数据 1.3 设置陌生人问题 1.4 通知设置 1.5 黑名单管理 4. SpringData-Mongo 4.2 完成基本操作 5. 今日佳人 5.1 表结构设计 5.2 服务提供者 5.2.0 导入依赖 5.2.2 RecommendUserApi接口 分片集群 原理介绍 集群搭建 2、圈子功能 2.1、功能说明 3、圈子实现 3.2、发布动态 1. 动态查询 1.1 查询好友动态 2. 圈子互动 2.3 动态点赞 2.4.3 喜欢标识 安装 准备 使用 1. 即时通信 2. 环信 2.1 开发简介 2.2 环信Console 2.3 环信API介绍 初始化 基础API 3. 抽取环信组件 3.1 编写Properties对象 3.2 编写HuanXinTemplate 3.3 编写自动配置类 2. MongoDB地理位置检索 2.1 地理位置索引 Point LineString Polygon 2.2 案例 3. 上报地理位置 4. 搜附近 1. 我的访客 1.2 记录访客数据 tanhua-model tanhua-app-server tanhua-dubbo-interface 1.3 首页谁看过我 需求分析 3. FastDFS 3.2. 工作原理 3.2.1. 文件的上传 分布式文件系统FDFS配置 4. 发布小视频 1、用户冻结解冻 1.1 用户冻结 1.3 查询数据列表 1.4 明日系统修改 2.2 定时任务 3、内容审核 1、了解推荐系统 1.1、什么是推荐系统? 1.3、推荐系统业务流程 1.4、协同过滤推荐算法 1.5、ALS算法 2、好友推荐 2.1、流程 2.2、部署好友推荐服务


📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/460078    中查看

📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/460078    中查看

📚📚👉👉👉本站这篇博客:   https://bbs.huaweicloud.com/blogs/459447    中查看

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

分片集群

高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。

为了解决这些问题,有两个基本的方法: 垂直扩展和水平扩展。

垂直扩展:增加更多的CPU和存储资源来扩展容量。

水平扩展:将数据集分布在多个服务器上。水平扩展即分片。

原理介绍

分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。

例如,如果数据库1tb的数据集,并有4个分片,然后每个分片可能仅持有256 GB的数据。如果有40个分片,那么每个切分可能只有25GB的数据。

MongoDB中数据的分片是以集合为基本单位的,集合中的数据通过片键(Shard key)被分成多部分。其实片键就是在集合中选一个键,用该键的值作为数据拆分的依据。

一般片键采用范围或哈希的方式进行分片。

集群搭建

环境准备

先创建一个如下的目录结果:

  • 在root目录下创建mongodb目录。内部依次创建文件夹(node1,node2,node3)。
  • 在node1文件夹下创建:config-server1,mongos1,shard11,shard21文件夹
  • config-server1目录下创建backup,config,db文件夹
  • mongos1,shard11,shard21同上创建
  • 在node2和node3文件夹下创建

配置服务

创建容器

进入node1,node2,node3的config-serverx目录。执行docker命令创建并启动docker容器

配置服务1

#进入目录
cd /root/mongodb/node1/config-server1
#创建并启动容器。
docker run --restart=always --privileged=true -p 10021:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config1 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all

配置服务2

#进入目录
cd /root/mongodb/node2/config-server2
#创建并启动容器。
docker run --restart=always --privileged=true -p 10022:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config2 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all

配置服务2

#进入目录
cd /root/mongodb/node3/config-server3
#创建并启动容器。
docker run --restart=always --privileged=true -p 10023:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config3 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all`
配置Mongo

将3个配置服务关联到一起

通过docker进入任意一台config-server配置三台服务器之间的联系

[Ehcache 文档]

#进入pro-file-server-config1配置服务器
docker exec -it pro-file-server-config1 /bin/bash
#连接mongo 配置服务器暴露的默认端口为27019
mongo -port 27019
#执行配置内容
rs.initiate({
_id: "rs-file-server-config-server",
configsvr: true,
members: [
{ _id : 0,host : "192.168.136.163:10021" },
{ _id : 1,host : "192.168.136.163:10022" },
{ _id : 2, host : "192.168.136.163:10023" }
]
});
#查看状态
rs.status()

路由服务

创建容器

mongos1

#进入目录
cd /root/mongodb/node1/mongos1
#创建并启动容器。
docker run --restart=always --privileged=true -p 10011:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos1 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all

mongos2

#进入目录
cd /root/mongodb/node2/mongos2
#创建并启动容器。
docker run --restart=always --privileged=true -p 10012:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos2 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all

mongos3

#

## 副本集群

对于中小型项目,使用副本集群就够了。

一个主,两个从库组成,主库宕机时,这两个从库都可以被选为主库。

 ![](https://fileserver.developer.huaweicloud.com/FileServer/getFile/communitytemp/20251010/community/586/961/417/0001711010586961417.20251010134914.45240104463991087305665604265299:20251010144915:2415:65F60E6803E5F2D392AD35C8A43A62840C6DCB7BDBC66991D59E22B2925D0B0B.png)

当主库宕机后,两个从库都会进行竞选,其中一个变为主库,当原主库恢复后,作为从库加入当前的复制集群即可。

 ![](https://fileserver.developer.huaweicloud.com/FileServer/getFile/communitytemp/20251010/community/586/961/417/0001711010586961417.20251010134915.36117156065621027116688719797975:20251010144916:2415:9806385BCFCD09C19967BF0FCC17256D2D68F2F7F35913DC691D007E4CC99530.png)

### 原理解释

![](https://fileserver.developer.huaweicloud.com/FileServer/getFile/communitytemp/20251010/community/586/961/417/0001711010586961417.20251010134917.44508160867324272292457530224594:20251010144917:2415:06C97FE73873098CAD21ECE74DAFDC3AF89C3443C164235EF13FD5755B88FA18.png)

Master:代表主节点,主节点提供所有数据的CRUD服务

Backup:代表从节点,从节点不提供任何服务

Arbitration:代表仲裁节点,仲裁节点不存储任何数据,其主要作用就是当主节点挂掉以后,把那个备份节点提升为一个主节点。

### 集群搭建

**创建容器**
```shell
docker run -di --name=master_mongo  -p 27017:27017 mongo:4.0.3  --replSet mongo_clus 
docker run -di --name=backup_mongo1 -p 27018:27017 mongo:4.0.3  --replSet mongo_clus 
docker run -di --name=backup_mongo2 -p 27019:27017 mongo:4.0.3  --replSet mongo_clus

设置副本集名称,也就是设置集群名称,必须要设置,否则没法构建集群

配置

进入master_mongo容器中

[Java 语言规范]

docker exec  -it master_mongo /bin/bash

登录Mongo

[NetBeans 文档]

mongo -port 27017

创建集群

cfg={
  "_id":"mongo_clus",
  members:[{
      _id:0,
      host:"192.168.136.161:27017",
      priority:2
  },{
      _id:1,
      host:"192.168.136.161:27018",
      priority:1
  },{
      _id:2,
      host:"192.168.136.161:27019",
      priority:2
  }]
}

[Apache Pulsar 文档]


[C3P0 文档]

rs.initiate(cfg)

注意修改ip地址

说明

  • 首页推荐
  • MongoDB集群

  • 圈子功能说明

  • 圈子技术实现与方案
  • 圈子实现发布动态
  • 圈子实现个人动态

1、首页推荐

1.1、接口分析

地址:

响应: ~~~json { "counts": 4698, "pagesize": 20, "pages": 58, "page": 16, "items": [ { "id": 1011, "avatar": "assets/images/avatar_2.png", "nickname": "黑马小妹", "gender": "woman", "age": 23, "tags": [ "本科", "年龄相仿", "单身" ], "fateValue": 96 }, {

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。