当前位置: 首页 > news >正文

LVS-DR+Keepalived+动静分离实验

架构图

解释一下架构,大概就是用Keepalived实现两台DR服务器的LVS负载均衡,然后后端服务器是两台Nginx服务器两台Tomcat服务器并且实现动静分离
这个实验其实就是把 LVS-DR+Keepalived 和 动静分离 给拼起来,真的是拼起来,两个部分其实就像是独立的部分,互相之间的影响很小

实验前准备:

主DR服务器:192.168.188.11   (ens33:0)192.168.188.188
备DR服务器:192.168.188.12   (ens33:0)192.168.188.188
Nginx服务器1:192.168.188.13    (lo:0)192.168.188.188
Nginx服务器2:192.168.188.14    (lo:0)192.168.188.188
VIP(虚拟IP):192.168.188.188
Tomcat服务器1:192.168.188.15
Tomcat服务器2:192.168.188.16
如果只想用四台机器实现,那么就把Tomcat和Nginx部署到同一台就行,比如说Tomcat1和Nginx1同一台,Tomcat2和Nginx2同一台。只需要改一下nginx.conf就行,底下会说

  1. DR服务器部署
    1. 关闭防火墙
      systemctl stop firewalld
      setenforce 0
    2. 安装ipvsadm和keepalived
      yum -y install ipvsadm keepalived
    3. 加载ipvs内核模块并查看
      modprobe ip_vs
      cat /proc/net/ip_vs
    4. 配置keepalived
      cd /etc/keepalived
      备份配置文件
      cp keepalived.conf keepalived.conf.bak
      对配置文件进行修改
      vim keepalived.conf
      主备服务器都要配置,下面这张图是主的配置截图,备的配置除了router_id改成LVS_02,state改成BACKUP,priority改成90,其他都一样

    5. 配置虚拟IP(VIP)
      vim /etc/sysconfig/network-scripts/ifcfg-ens33:0

      DEVICE=ens33:0
      ONBOOT=yes
      IPADDR=192.168.188.188
      NETMASK=255.255.255.255


      配置完重启网卡
      systemctl restart network
      打开虚拟网卡
      ifup ens33:0
      查看一下有没有生效
      ip addr

      启动keepalived服务
      systemctl start keepalived
      关于虚拟网卡,在实验过程中总会碰到一个问题,那就是虚拟网卡连接很不稳定,打开后总是过一段时间就断开,具体原因我也排查不出来,也可能是网络不好,如果在后面测试过程中发现失败,可以用ip addr看一下虚拟网卡是不是断开了,如果没了,那就用systemctl restart network重启网络

    6. 启动ipvsadm服务
      主DR服务器(192.168.188.11):
      备份
      ipvsadm-save > /etc/sysconfig/ipvsadm
      systemctl start ipvsadm

      配置规则
      先清空
      ipvsadm -C
      ipvsadm -A -t 192.168.188.188:80 -s rr
      ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.13:80 -g
      ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.14:80 -g
      查看分发策略

      备DR服务器(192.168.188.12):
      备份
      ipvsadm-save > /etc/sysconfig/ipvsadm
      systemctl start ipvsadm
      直接查看
      ipvsadm -ln,目前并没有策略

      当主服务器断开后,备服务器会接收到主服务器的策略,测试的时候可以来这看一下

    7. 调整proc响应参数,关闭Linux内核的重定向参数响应
      vim /etc/sysctl.conf

      net.ipv4.conf.all.send_redirects = 0
      net.ipv4.conf.default.send_redirects = 0
      net.ipv4.conf.ens33.send_redirects = 0


      sysctl -p

  2. Nginx服务器部署

    1. 关闭防火墙
      systemctl stop firewalld
      setenforce 0

    2. 安装Nginx,不再赘述,这里只说一件事,pid改不改不影响使用,但是如果你改了nginx.conf里面的pid位置,那么就必须创建相应的目录

    3. 为了方便测试,在Nginx1和Nginx2的index.html文件里随便写点东西以示区分就行

    4. 配置虚拟网卡(lo:0)
      vim /etc/sysconfig/network-scripts/ifcfg-lo:0

      DEVICE=lo:0
      ONBOOT=yes
      ​​​​​​​IPADDR=192.168.188.188
      NETMASK=255.255.255.255


      重启网卡
      systemctl restart network
      启动虚拟网卡
      ifup lo:0
      查看
      ip addr

      添加路由规则
      route add -host 192.168.188.188 dev lo:0

    5. 调整proc响应参数
      vim /etc/sysctl.conf

      net.ipv4.conf.lo.arp_ignore = 1
      net.ipv4.conf.lo.arp_announce = 2
      net.ipv4.conf.all.arp_ignore = 1
      net.ipv4.conf.all.arp_announce = 2



      sysctl -p

    6. 配置文件后面再改

  3. Tomcat服务器部署

    1. 关闭防火墙
      systemctl stop firewalld
      setenforce 0

    2. 安装JDK、Tomcat不再赘述,不知道怎么安装可以看前面的实验

    3. 创建测试的应用目录
      mkdir /usr/local/tomcat/webapps/test
      写一个页面,这是Tomcat1的
      vim /usr/local/tomcat/webapps/test/index.jsp

      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <html>
      <head>
      <title>JSP test1 page</title>   #指定为 test1 页面
      </head>
      <body>
      <% out.println("动态页面 1,http://www.test1.com");%>
      </body>
      </html>

      写一个页面,这是Tomcat2的
      vim /usr/local/tomcat/webapps/test/index.jsp

      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <html>
      <head>
      <title>JSP test2 page</title>   #指定为 test2 页面
      </head>
      <body>
      <% out.println("动态页面 2,http://www.test2.com");%>
      </body>
      </html>
    4. 修改配置文件server.xml
      vim /usr/local/tomcat/conf/server.xml
      因为新增的Host的name也是localhost和原本的重名了,所以把原本的删掉

      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"></Context>
      </Host>

    5. 重启服务
      /usr/local/tomcat/bin/shutdown.sh
      /usr/local/tomcat/bin/startup.sh

  4. 动静分离配置(只需要在Nginx服务器上修改就行)

    1. 修改nginx主配置文件
      vim /usr/local/nginx/conf/nginx.conf
      如果你只用了4台机器,也就是说Nginx服务器同时是Tomcat服务器,那么就把服务器地址池里的IP地址改成Nginx的IP地址就行,端口不变

    2. 保存并重启服务
      systemctl restart nginx

  5. 测试,在客户端的浏览器输入VIP,也就是192.168.188.188可以访问到静态页面,多刷新几次看看负载均衡有没有问题
    这里要说一下,可能是LVS本身有问题,导致Nginx1的页面和Nginx2的页面总有一个很难刷新出来,这并不代表就是错的,如果一直只能看到Nginx1,那就把Nginx1服务器上的Nginx服务直接停了,再刷新,如果能访问到Nginx2那就说明没问题
    再输入192.168.188.188/index.jsp就能访问到动态页面,多刷新几次看看负载均衡有没有问题,这里用的Nginx的调度算法,就能正常显示Tomcat1和Tomcat2的动态页面

    ​​​​​​

相关文章:

  • ❤ Mac IDEA使用并运行项目
  • 数据清洗、特征工程和数据可视化、数据挖掘与建模的应用场景
  • tensorflow 常用代码片段
  • 网络编程值UDP
  • 解决微信小程序中 ‘nbsp;‘ 空格不生效的问题
  • pcl-3 pcl结合opencv做svm分类(法向量特征数据)
  • WPF仿网易云搭建笔记(1):项目搭建
  • Navicat 技术指引 | 适用于 GaussDB 分布式的调试器
  • Fabric 画布缩放、拖动、初始化大小
  • kubernetes的服务发现(二)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • 【S32DS报错】-3-提示J-Link GDB Server failed:Device name ‘S32K344‘ not recognised错误
  • 【CSP】202303-2_垦田计划Python实现
  • 图论——最小生成树
  • 黑马头条数据管理平台项目总结
  • 网络传输文件的问题
  • Java Agent 学习笔记
  • Linux CTF 逆向入门
  • nginx 配置多 域名 + 多 https
  • python学习笔记 - ThreadLocal
  • SpringBoot几种定时任务的实现方式
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 前端性能优化--懒加载和预加载
  • 少走弯路,给Java 1~5 年程序员的建议
  • 通过npm或yarn自动生成vue组件
  • 微信开源mars源码分析1—上层samples分析
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 函数计算新功能-----支持C#函数
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​如何在iOS手机上查看应用日志
  • (C语言)fread与fwrite详解
  • (c语言)strcpy函数用法
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (十)c52学习之旅-定时器实验
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .gitignore文件---让git自动忽略指定文件
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 的字符串暂存池
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • @Autowired 与@Resource的区别
  • @Autowired多个相同类型bean装配问题
  • @DataRedisTest测试redis从未如此丝滑
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [20170705]diff比较执行结果的内容.txt
  • [C#]winform部署yolov9的onnx模型
  • [CTF]php is_numeric绕过
  • [DevEpxress]GridControl 显示Gif动画
  • [DM复习]关联规则挖掘(下)
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
  • [HUBUCTF 2022 新生赛]
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [Labtools 27-1429] XML parser encountered a problem in file