DR模式 LVS负载均衡群集
DR模式 LVS负载均衡群集
- 部署共享存储
- 关闭防火墙和核心防护
- 下载,开启nfs服务
- 创建共享文件夹和测试用的静态网页文件
- 编辑nfs配置文件
- 发布共享
- 查看共享
- 配置 tomcat 服务器
- 关闭防火墙和核心防护
- 安装tomcat
- 配置 tomcat 多实例
- 配置 nginx 服务器
- 关闭防火墙和核心防护
- 配置
- 安装nginx
- yum安装
- 软件包安装
- 挂载共享文件夹
- 配置nginx七层反向代理
- 配置负载调度器
- 关闭防火墙和核心防护
- 配置虚拟 IP 地址
- 调整 proc 响应参数
- 配置负载分配策略
- 访问测试
DR 服务器:192.168.110.10
nginx 服务器1:192.168.110.50
nginx 服务器2:192.168.110.60
vip:192.168.110.88
tomcat 服务器1:192.168.110.70
tomcat 服务器2:192.168.110.80
nfs 服务器:192.168.110.20

部署共享存储
nfs 服务器:192.168.110.20
关闭防火墙和核心防护
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
下载,开启nfs服务
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
创建共享文件夹和测试用的静态网页文件
mkdir /opt/sunny1 /opt/sunny2
chmod 777 /opt/sunny1 /opt/sunny2
echo '静态网页1' > /opt/sunny1/index.html
echo '静态网页2' > /opt/sunny2/index.html
编辑nfs配置文件
vim /etc/exports
/usr/share *(ro,sync)
/opt/sunny1 192.168.110.20/24(rw,sync)
/optsunny2 192.168.110.20/24(rw,sync)
发布共享
exportfs -rv
查看共享
showmount -e

配置 tomcat 服务器
tomcat 服务器1:192.168.110.70
tomcat 服务器2:192.168.110.80
关闭防火墙和核心防护
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
安装tomcat
#查看是否安装java(没有安装则安装)
java -version
#安装java
yum install -y java
#设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#加载配置
source /etc/profile.d/java.sh
如何查找java的安装目录
[root@tomcat2 yum.repos.d]# whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz
[root@tomcat2 yum.repos.d]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 10月 8 14:13 /usr/bin/java -> /etc/alternatives/java
[root@tomcat2 yum.repos.d]# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 10月 8 14:13 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java

tomcat 安装
#上传 tomcat 软件包
#解压安装
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
#启动 tomcat
/usr/local/tomcat/bin/startup.sh
#查看是否启动成功
ss -nltp | grep java
tomcat 安装完成

配置 tomcat 多实例
#创建tomcat1,2
cd
tar xf apache-tomcat-9.0.16.tar.gz
cp -a apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2#配置 tomcat 环境变量
vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2#加载配置
source /etc/profile.d/tomcat.sh
#修改 tomcat1,2 中的 server.xml 文件,端口不重复。tomcat1:8006 8081 8010;tomcat2:8007 8082 8011。
vi /usr/local/tomcat/tomcat1/conf/server.xml
vi /usr/local/tomcat/tomcat2/conf/server.xml#修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat2/bin/startup.sh
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2#启动各 tomcat 中的 /bin/startup.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh#查看是否开启
ss -natp | grep java

创建测试用的动态网页
vi /usr/local/tomcat/tomcat1/webapps/ROOT/test.jsp
动态页面1
vi /usr/local/tomcat/tomcat2/webapps/ROOT/test.jsp
动态页面2
#测试
curl 192.168.110.70:8081/test.jsp
curl 192.168.110.70:8082/test.jsp

配置 nginx 服务器
nginx 服务器1:192.168.110.50
nginx 服务器2:192.168.110.60
关闭防火墙和核心防护
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
配置
配置虚拟 IP 地址
vip:192.168.110.88
虚拟 IP 仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(由调度器监听并分发)。
因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
#创建一个虚接口
cd /etc/sysconfig/network-scripts/
vim ifcfg-lo:0DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.110.88
NETMASK=255.255.255.255#开启虚接口lo:0并查看状态
ifup lo:0
ifconfig lo:0#添加路由
route add -host 192.168.110.88 dev lo:0


调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2#加载配置
sysctl -p

安装nginx
yum安装
nginx 服务器1:192.168.110.50
#下载
yum install -y nginx
#开启
nginx
软件包安装
nginx 服务器2:192.168.110.60
#上传软件包
#解压软件包
tar xf nginx-1.26.2.tar.gz
#安装依赖环境
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#配置
cd nginx-1.26.2
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
#编译安装
make -j 2 && make install
#让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#开启
nginx
挂载共享文件夹
下载nfs
yum -y install nfs-utils rpcbind
systemctl start rpcbind
systemctl start httpd
挂载
#查看共享文件夹
showmount -e 192.168.110.20#挂载
#nginx 服务器1
mount.nfs 192.168.110.20:/opt/sunny1 /usr/share/nginx/html
#nginx 服务器2
mount.nfs 192.168.110.20:/opt/sunny2 /usr/local/nginx/html
#查看挂载状态
df -Th
测试静态网页
curl 192.168.110.50
curl 192.168.110.60

配置nginx七层反向代理
vim /usr/local/nginx/conf/nginx.conf
#http块中
upstream tomcat_web {server 192.168.110.70:8081 weight=1;server 192.168.110.70:8082 weight=1;server 192.168.110.80:8081 weight=1;server 192.168.110.80:8082 weight=1;}
#server块中location ~ .*\.jsp$ {proxy_pass http://tomcat_web;proxy_set_header HOST $host;proxy_set_header X_Real_IP $remote_addr;proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;}
测试
curl 192.168.110.60/test.jsp
curl 192.168.110.50/test.jsp


配置负载调度器
DR 服务器:192.168.110.10
关闭防火墙和核心防护
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
#加载IP虚拟服务器(IPVS)模块
modprobe ip_vs
#检查IPVS的状态
cat /proc/net/ip_vs
#安装IPVS管理工具
yum -y install ipvsadm
配置虚拟 IP 地址
vip:192.168.110.88
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.110.88
NETMASK=255.255.255.255ifup ens33:0
ifconfig ens33:0
调整 proc 响应参数
由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。
vim /etc/sysctl.confnet.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0#加载配置
sysctl -p
配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C
ipvsadm -A -t 192.168.110.88:80 -s rr
ipvsadm -a -t 192.168.110.88:80 -r 192.168.110.50:80 -g
ipvsadm -a -t 192.168.110.88:80 -r 192.168.110.60:80 -g
ipvsadmipvsadm -ln
访问测试
curl 192.168.110.88/test.jsp

相关文章:
DR模式 LVS负载均衡群集
DR模式 LVS负载均衡群集 部署共享存储关闭防火墙和核心防护下载,开启nfs服务创建共享文件夹和测试用的静态网页文件编辑nfs配置文件发布共享查看共享 配置 tomcat 服务器关闭防火墙和核心防护安装tomcat配置 tomcat 多实例 配置 nginx 服务器关闭防火墙和核心防护配…...
mysql复制表结构和数据
1.实例 #复制一张和test 一摸一样的表结构 CREATE TABLE test_one like test#往复制的表结构中复制数据 INSERT INTO test_one SELECT * FROM test#两者一起使用相当于 cv大法2.总结 完全实现了表结构和数据的复制,但是两条sql 得分两步执行 2.1 复制表结构 #复制…...
MFC扩展库BCGControlBar Pro v35.1新版亮点:改进网格控件性能
BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.1已全新发布了,这个版本改进网格控件的性能、增强工具栏编辑器功能等。 …...
Python列表操作详解
1 列表的基本概念 在Python中,列表是一种非常常用的数据结构,它可以存储任意类型的元素,并且支持多种操作。下面将详细介绍Python列表的各种操作。 2列表的操作方法 2.1创建列表 Python可以直接使用方括号[]来创建一个空列表。 示例&am…...
畅捷通T+对接聚水潭成功实施案例
在当今竞争激烈的商业环境中,企业数字化转型已成为提升竞争力的关键。广东某实业有限公司的数字化规划,目前财务系统使用的畅捷通T,电商系统使用的聚水潭。目前两个系统数据割裂导致各个部门的协同效率低下。通过借助轻易云数据集成平台&…...
leetcode-312. 戳气球
题目描述 有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代…...
程序设计基础I-实验7 函数(编程题)
7-1 sdut- C语言实验—计算表达式 计算下列表达式值: 输入格式: 输入x和n的值,其中x为非负实数,n为正整数。 输出格式: 输出f(x,n),保留2位小数。 输入样例: 3 2输出样例: 在这里给出相应的输出。例如: 2.00 …...
使用3080ti配置安装blip2
使用3080ti运行blip2的案例 本机环境(大家主要看GPU,ubuntu版本和cuda版本即可):安装流程我最后安装的所有包的信息(python 3.9 )以供参考(environment.yml): 本机环境&a…...
vue3组件通信之defineEmits
一、defineEmits是什么? defineEmits 是vue3提供的方法,又称为自定义事件,不需要引入可以直接使用,用于子组件与父组件通信。 二、使用样例 1.父组件代码 代码如下(示例): <template>…...
rust gio-rs 挂载 samba 磁盘
linux 使用的 gio 管理工具 这个工具如下 这是 gio 的rust版本 https://crates.io/crates/gio 可以用 rust 语言实现下面所有操作 gio mout 挂载 samba 如下 //https://valadoc.org/gio-2.0/GLib.MountOperation.html pub async fn gio_mount(uri路径:&str, 用户名:Opti…...
幸存者游戏(类)
#include <iostream> #include <graphics.h> #include <stdio.h> #include <conio.h> #include <vector> #include <string> using namespace std; int idx_player_anim 0; const int player_anim_num 6;//这里要把动画帧数定位const i…...
SQL 中UPDATE 和 DELETE 语句的深入理解与应用
在 SQL 中,UPDATE和DELETE语句是用于操作表数据的重要工具,它们允许我们对已存在的数据进行修改和删除。 一、UPDATE 语句 (一)基本语法 UPDATE语句的基本语法如下: UPDATE table_name SET column1 value1, colum…...
在 Windows 上查找和结束占用特定端口占用程序,并杀死
在 Windows 上查找和结束占用特定端口(如 9003)的程序,你可以使用以下步骤: 步骤 1:找到占用端口的进程 ID (PID) 打开命令提示符(按 Win R,输入 cmd,然后按回车)。输…...
sql server尽量避免滥用影响性能的标量函数
相信很多新手学了 函数的用法就不可避免的想把学到的东西用起来,然而这个函数使用却有坑, 在实际用的时候我发现一个简单的计算封装 ,不用函数和用函数执行耗时差太多了。 能避免列上进行函数则尽量避免,这是在实际上遇到的坑 &am…...
python画图|二维动态柱状图输出
【1】引言 在前面的学习过程中,已经探索过二维柱状图和三维柱状图的绘制教程,包括且不限于的文章链接有: python画图|水平直方图绘制_绘制水平直方图-CSDN博客 python画图|3D bar进阶探索_ax.bar3d-CSDN博客 此外也学习了动态的直线输出和…...
CocosCreator 快速部署 TON 游戏:Web2 游戏如何使用 Ton支付
在本篇文章中,我们将继续探讨如何使用 Cocos Creator 开发 Telegram 游戏,重点介绍如何集成 TON 支付功能。通过这一教程,开发者将学会如何在游戏中接入 TON Connect,实现钱包连接、支付以及支付后的校验流程,最终为 W…...
生信初学者教程(二十八):单细胞数据标准化
文章目录 介绍加载R包导入数据消除测序深度影响评估细胞周期的影响识别高度可变的特征缩放数据降维聚类输出结果总结介绍 scRNA-seq的标准化是一个重要的预处理步骤,目的是消除技术变异(比如比如测序深度和基因长度等因素),使基因表达和/或样本之间的比较更加可靠。标准化方…...
【OceanBase诊断调优】—— 错误码 5065 和 5066 的区别
适用版本:V2.1.x、V2.2.x、V3.1.x、V3.2.x 5065 与 5066 是两个近似的报错。 OB_ERR_QUERY_INTERRUPTED(-5065): Message: Query execution was interrupted。 含义为执行中断, 例如终端执行 SQL 过程中按 ctrlc 终止 SQL 执行会报 -5065。 OB_ERR_SESSION_INTER…...
Spring Boot RESTful API开发教程
一、RESTful API简介 RESTful API是一种基于HTTP协议的Web API,其设计原则是简单、可扩展、轻量级、可缓存、可靠、可读性强。RESTful API通常使用HTTP请求方法(GET、POST、PUT、DELETE等)来操作资源,使用HTTP状态码来表示操作结…...
<Rust>iced库(0.13.1)学习之番外:如何为窗口添加初始值?
前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的番外篇,主要介绍一下新…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
