Redis集群服务器
集群简介
试想有一家餐厅,如果顾客人数较少,那么餐厅只需要一个服务员即可,如图1。但是,当顾客人数非常多时,一个服务员是绝对不够的,如图2。此时,餐厅需要雇用更多的服务员来解决大量访问(顾客就餐)的问题。如图3。

以上的情景就是“集群”的产生原因及解决方案。将顾客比作客户端,服务员比作服务器端,当少量客户端访问服务器端时,一台服务器完全足够;但如果有大量的客户端来访问服务器端,就需要在服务器端搭建多台服务器,以缓解大量访问带来的压力。服务器端搭建的多台服务器,就称为“集群服务器”。
集群特点
- 失败迁移
餐厅里,如果只有一个服务员,那么一旦服务员出现异常情况(如生病、事假等),顾客的所有就餐请求都将无法满足。同样地,如果只有一台服务器,那么一旦服务器出现异常(如宕机、物理损坏等),所有的客户端请求也将无法得到响应。为了避免上述风险,就可以使用多台服务器组成“集群服务器”,即使某一台服务器发生了异常,集群服务器也依然能够正常地处理客户端请求。例如,当客户端访问服务器C时,即使服务器C发生了异常,集群服务器也可以通过服务器A或服务器B对客户端做出响应。这种容错机制,就是集群服务器的第一个特点——失败迁移。
- 负载均衡
如果在一台服务器中部署了4个功能,那么无论客户端请求哪一个功能,都需要这台服务器来处理,如图4。而如果采用的是集群服务器,就可以只在某一台服务器上部署部分功能(例如只部署3个功能),多台服务器共同处理客户端请求。如图5。此集群服务器中,4个功能均被部署了三次,因此能够处理的请求次数也将提高三倍。换句话说,此集群服务器可以将一台服务器的负载量,分配到四台服务器上处理,即负载均衡。此外,集群服务器可以分为“水平集群”和“垂直集群”。水平集群是指在不同的计算机上各自安装一台服务器;垂直集群是指在同一台计算机上安装多个服务器。

使用Apache + Tomcat搭建集群服务器
Apache是web服务器,解析速度非常快并且稳定性强,但只能解析静态网页,无法处理JSP等动态网页。而Tomcat是运行在Apache之上的应用服务器,可以解析静态网页及动态网页,但解析速度比Apache稍慢。因此,可以采用Apache + Tomcat 搭建服务器,实现“动静分离”,即用Apache处理静态网页,用Tomcat处理动态网页。此外,Apache可以对多个Tomcat服务器进行调度,因此可以在Apache上搭建多个Tomcat服务器,从而实现Tomcat集群。(具体步骤请参阅相关资料)
使用Nginx + Tomcat搭建集群服务器
Nginx 是一款轻量级的反向代理服务器,可以方便地存储服务端的静态资源,实现服务端资源的动静分离,以及快速搭建集群服务器。Nginx 支持“万”级别的高并发连接,用于反向代理时,非常稳定,并且能够在不间断服务的情况下进行维护(即热部署)。此外,Nginx是一款开源软件,使用成本低廉。
(a)在服务器中,HTML、CSS、JS、图片、音频、视频等资源属于静态资源;由java编写的后台代码(servlet等)属于动态资源。通常,Tomcat 等服务器擅长处理动态资源,而对静态资源的处理效率较差。因此,如果能将服务器中的静态资源和动态资源相分离,只把动态请求交给Tomcat等服务器处理,而把静态资源交给Nginx处理,就能大幅提高服务端的整体性能。Nginx可以根据客户端请求的URL后缀判断请求的是静态资源还是动态资源。(Nginx+Tomcat实现动静分离具体步骤请参阅相关资料)
(b)垂直集群案例(在IP为192.168.43.169的电脑上安装两个Tomcat服务器)

第一步,配置Tomcat
官网下载Tomcat后解压,重命名,如C:\Users\johny\Desktop\apache-tomcat-9.1080
再复制一份,重命名C:\Users\johny\Desktop\apache-tomcat-9.2080
修改两个Tomcat的配置文件


把项目ssm.war分别部署到两个Tomcat服务器,直接复制粘贴到webapps下,即可。
![]()
启动两个Tomcat服务器,双击startup.bat文件,即可。
![]()
注:由于Tomcat依托于jdk,想通过双击Tomcat服务器下\bin\startup.bat启动Tomcat服务器前,须先配置环境变量JAVA_HOME
第二步,配置数据库
由于ssm项目中是通过远程连接访问数据库,所以需要在mysql8.x中创建新用户。


第三步,配置Nginx
官网下载Nginx后解压,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件

把前端项目文件夹dist复制粘贴到d盘根目录下,即 d:/dist
启动Nginx服务器,双击nginx.exe文件,即可。
第四步,测试
在浏览器请求 http://192.168.43.169:8081/,并不断进行操作,Nginx服务器默认会在两台Tomcat之间轮询访问


第五步,配置“IP_Hash”策略,避免Session混乱
IP_Hash策略的原理是:Nginx会计算每个用户请求时所在IP地址的Hash值,因为同一个用户的IP值相同,因此对同一个用户计算的Hash值也必然相同。之后,Nginx再建立Hash值和Tomcat节点的一一对应关系,这样就保证每个用户只会访问集群中的同一个服务器节点,就不会造成Session混乱的情况。
修改Nginx配置ip_hash

这样,同一用户始终访问的就是集群中的同一个Tomcat节点,因此,每次访问时获取的Session对象就是相同的了。
问题:
Nginx同网段ip_hash负载均衡无效果!!!
Nginx ip_hash在局域网中所有机器访问的都是同一台机器没有Hash。造成原因如被Hash的ip为192.168.43.169;实则上Nginx进行Hash算法时取的是192.168.43。所以在局域网同网段所有机器得到的结果服务器都是同一台。
解决:
修改Nginx目录源码:nginx-1.16.1\src\http\modules\ngx_http_upstream_ip_hash_module.c
将源码修改为通过全IP进行hash,可参阅相关资料。
还可以开发独立的Session服务器,或者使用Session广播等方式让多个Tomcat共享同一份Session对象,有兴趣可自行研究。
(c)水平集群案例(在IP为192.168.43.169和IP为192.168.43.166的两台电脑上分别安装一个Tomcat服务器)
【IP为192.168.43.169的电脑】
第一步,配置Tomcat
官网下载Tomcat后解压,重命名,如C:\Users\johny\Desktop\apache-tomcat-9.1080
修改Tomcat的配置文件

把项目ssm.war分别部署到Tomcat服务器,直接复制粘贴到webapps下,即可。
![]()
启动Tomcat服务器,双击startup.bat文件,即可。
![]()
第二步,配置数据库
由于ssm项目中是通过远程连接访问数据库,所以需要在mysql8.x中创建新用户。


第三步,配置Nginx
官网下载Nginx后解压,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件

把前端项目文件夹dist复制粘贴到d盘根目录下,即 d:/dist
启动Nginx服务器,双击nginx.exe文件,即可。
【IP为192.168.43.166的电脑】
把192.168.43.169电脑上已配置并部署项目的C:\Users\johny\Desktop\apache-tomcat-9.1080
复制一份,双击startup.bat文件,启动Tomcat服务器,即可。
【测试】
浏览器请求 http://192.168.43.169:8081/,并不断进行操作,Nginx服务器会对两台电脑上的Tomcat进行轮询访问
相关文章:
Redis集群服务器
集群简介 试想有一家餐厅,如果顾客人数较少,那么餐厅只需要一个服务员即可,如图1。但是,当顾客人数非常多时,一个服务员是绝对不够的,如图2。此时,餐厅需要雇用更多的服务员来解决大量访问&…...
动态维护直径 || 动态维护树上路径 || 涉及LCA点转序列 || 对欧拉环游序用数据结构维护:1192B
https://www.luogu.com.cn/problem/CF1192B 对于直径的求法,常用dp或两次dfs,但如果要动态维护似乎都不太方面,那么可以维护树上路径最大值。 树上路径为: d e p u d e p v − 2 d e p l c a ( u , v ) dep_udep_v-2\times de…...
MySQL 存储引擎,你了解几个?
引言 MySQL是一种流行的关系型数据库管理系统(RDBMS),它支持多种不同的数据库引擎。数据库引擎是用于存储、管理和检索数据的核心组件,它们直接影响着数据库的性能、可靠性和功能,接下来本文介绍下一些常见的MySQL数据…...
Java 动态规划 Leetcode 740. 删除并获得点数
题目 对于该题的题目分析,已经代码分析都一并写入到了代码注释中 代码 class Solution {public int deleteAndEarn(int[] nums) {//核心思路://由于我们获得 nums[i] 的点数之后,就必须删除所有等于 nums[i] - 1 和 nums[i] 1 的元素//假设…...
算法通关村十三关-青铜:数字与数学基础问题
1.数字统计专题 统计特定场景下的符号或数字个数等 1.1符号统计 LeetCode1822 数组元素积的符号 https://leetcode.cn/problems/sign-of-the-product-of-an-array/description/ 思路分析 如果将所有的数都乘起来,再判断正负,工作量大,还…...
猜拳游戏小程序源码 大转盘积分游戏小程序源码 积分游戏小程序源码
简介: 猜拳游戏大转盘积分游戏小程序前端模板源码,一共五个静态页面,首页、任务列表、大转盘和猜拳等五个页面 图片:...
【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据
目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影…...
webpack基础配置【总结】
webpack打包原理: webpack是一个js应用程序的静态模块打包工具,当webpack处理应用程序时,它的内部构建一个依赖图,此时依赖会映射项目中所需的每个模块,并生成一个或多个bundle包。因此我们会安装配置各种打包规则&…...
typescript 支持与本地调试
typescript 支持与本地调试 typescript 支持与本地调试 前言支持 typescript函数的本地调试 启用 node-terminal 调试invoke localserverless-offline Next Chapter完整示例及文章仓库地址 前言 在上一章节,我们创建了一个 hello world 函数,并把它顺…...
后端面试话术集锦第 十八 篇:JVM面试话术
这是后端面试集锦第十八篇博文——JVM面试话术❗❗❗ 1. 介绍下JVM JVM主要包括:类加载器(class loader)、执行引擎(exection engine)、本地接口(native interface)、运行时数据区(Runtimedata area) 类加载器:加载类文件到内存。Class loader只管加载,只要符合文件…...
“历久弥新 | 用AI修复亚运珍贵史料”活动震撼来袭!
时隔近半个世纪,新中国第一次参与亚运会的影像资料将首次对外披露。只是年代久远,老照片老视频都有了岁月痕迹,画面不再清晰,这些珍贵史料急需你的帮助! 一、活动介绍 2023年,正值亚运110周年,…...
uni-app 之 scroll-view和swiper
uni-app 之 scroll-view和swiper <!-- vue2的<template>里必须要有一个盒子,不能有两个,这里的盒子就是 view--> <template><view><navigator url"/pages/home/home"><button style"background: #ff00f…...
Harmony网络请求工具类
使用的网络请求框架是axios 1、安装axios ohpm install @ohos/axios2、封装 import axios, { FormData } from "@ohos/axios" import fs from @ohos.file.fs import ArrayList from @ohos.util.ArrayList/*** 网络请求工具类*/ class HttpManager {baseUrl:string…...
【Python 自动化】自媒体剪辑第一版·思路简述与技术方案
大家都知道我主业是个运维开发(或者算法工程师),每天时间不多,但我又想做自媒体。然后呢,我就想了个方案,每天起来之后写个短视频的脚本,包含一系列图片和文字,然后上班的时候给它提…...
【前端】webpack打包去除console.log
0 问题 需要在打包的时候,自动地去除掉所有console.log 1 方法 // vue.config.js //... module.exports {//...config.optimization.minimizer[0].iptions.terserOptions.compress.drop_console true//... } //...也可以用if(process.env.NODE_ENV production…...
docker使用(二)提交到dockerhub springboot制作镜像
docker使用(二) dockerhub创建账号创建存储库成功!开始推送获取image名 提交成功SpringBoot项目制作Dockerfile镜像部署打jar包 dockerhub创建账号 (自认为可以理解为github一类的东西) 单击创建存储库按钮。 设定存…...
antd中Popover 气泡卡片样式修改
最近在开发react项目的一个新需求时,遇到气泡卡片Popover组件样式调整的问题,发现不管是在标签中设置className属性,还是在<Popover>标签中直接设置style属性,都不起作用。 最后搜索查阅发现要使用overlayClassName index…...
3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?
终于二战上岸了,二战华为也并不是说非华为不可,只是觉得心里憋着一口气,这就导致我当时有其他比较好的offer,我也没有去,就是想上岸华为来证明自己,现在也算是如愿了,来跟大伙们分享一下~ 个人情况 我本人…...
Kali之BurpSuite_pro安装配置
文章目录 配置jdk环境安装BurpSuitePro设置快捷方式启动方式 BurpSuite2021专业版本地址: 下载链接:https://pan.baidu.com/s/1PjzcukRDoc_ZFjrNxI8UjA 提取码:nwm7 我的安装工具都在/home/kali/tools/ 解压后我放在burpsuite_pro目录下 把j…...
双指针算法总结
双指针 常见的双指针有两种形式:对撞指针,左右指针。 对撞指针: 对撞指针一般用于顺序结构中,也称左右指针。 • 对撞指针从两端向中间移动。以个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼…...
NoFences:重新定义Windows桌面管理的开源革命
NoFences:重新定义Windows桌面管理的开源革命 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否也曾为杂乱无章的Windows桌面而烦恼?图标散落各处…...
D2DX:终极解决方案!让经典《暗黑破坏神2》在现代PC上焕发新生
D2DX:终极解决方案!让经典《暗黑破坏神2》在现代PC上焕发新生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d…...
在Node.js后端服务中集成Taotoken调用多模型AI功能的指南
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Node.js后端服务中集成Taotoken调用多模型AI功能的指南 对于Node.js开发者而言,在后端服务中集成AI能力正变得日益普…...
弹簧工业设备联网数字化管理平台解决方案
在“智能制造”的转型道路上,大量企业卡在同一个困境里:设备买了不少,自动化也上了,但车间依然像一个“数据黑箱”——设备状态靠猜、效率损失靠估、问题根源靠找。对于弹簧部件加工这类多工序、高精度的制造场景,OEE&…...
STM32F407 UART4串口DMA接收不定长数据与中断发送的实战配置与避坑指南
1. 为什么需要DMAUART组合方案 在嵌入式开发中,串口通信就像快递员送货上门。传统中断方式相当于每送一个包裹(字节)就按一次门铃,快递员(CPU)必须放下手头工作去开门。当数据量大时,这种频繁中…...
如何快速获取网易云和QQ音乐的精准LRC歌词?这款免费工具帮你一键搞定!
如何快速获取网易云和QQ音乐的精准LRC歌词?这款免费工具帮你一键搞定! 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为音乐播放器缺少歌词而…...
电钢琴初学者买琴不踩坑攻略:高性价比型号清单及避坑推荐
一、「绝对不能踩的坑」(新手常犯的4个错误) 1.预算陷阱:低于1000元的「玩具琴」不能买 1000元以下的电钢琴,大多是手感音色差、会毁手型,浪费钱。 2.键盘:必须选「88键逐级重锤配重」 电钢琴的核心是「…...
微流控与图像引导技术实现单细胞谱系追踪与动态操控
1. 项目概述:当单细胞遇见微流控与图像引导在生命科学的前沿探索中,单细胞分析正以前所未有的精度揭示着细胞异质性的奥秘。然而,一个长期困扰研究者的难题是:我们如何不仅仅知道一个细胞在某个时间点的“快照”,还能追…...
全面掌握AMD Ryzen硬件调试:SMUDebugTool完整使用指南
全面掌握AMD Ryzen硬件调试:SMUDebugTool完整使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…...
STM32CubeMX实战:硬件CRC配置详解与软件算法性能实测
1. STM32硬件CRC模块初探 第一次接触STM32的硬件CRC模块时,我完全被它的效率震惊了。这个看似不起眼的外设,其实是个隐藏的性能怪兽。简单来说,CRC(循环冗余校验)就像给数据包贴上的防伪标签,而STM32内置的…...
