day35-四层负载

01.四层负载概念

请添加图片描述

02.四层实现对端口转发

请添加图片描述

1.克隆一台10.0.0.4
2.安装部署nginx服务
[root@lb:~]#
scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/

[root@lb:~]#yum -y install nginx



3.配置nginx四层负载
[root@lb:~]#rm -rf /etc/nginx/conf.d/default.conf
# 删除默认七层配置
[root@lb:~]#cd /etc/nginx/
[root@lb:nginx]#vim nginx.conf
...
events {
    worker_connections  1024;
}


include /etc/nginx/conf.c/*.conf;
# 添加一行配置包含引用conf.c下的所有conf文件


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
...

[root@lb:nginx]#mkdir conf.c
[root@lb:nginx]#cd conf.c

[root@lb:conf.c]#cat lb.conf
stream {
    upstream lb {
            server 172.16.1.7:22;
    }

    server {
            listen 2222;
            proxy_connect_timeout 3s;
            proxy_timeout 3s;
            proxy_pass lb;
    }
}

检测语法重启服务
[root@lb:conf.c]#nginx -t

[root@lb:conf.c]#systemctl restart nginx


4.xshell远程连接10.0.0.4的2222端口
[c:\~]$ ssh 10.0.0.4 2222
查看连接是否为web01
[root@web01:~]#



转发3333端口连接后端服务器172.16.1.8:22端口
[root@lb:conf.c]#cat lb.conf
stream {
    upstream lb {
            server 172.16.1.7:22;
    }

    server {
            listen 2222;
            proxy_connect_timeout 3s;
            proxy_timeout 3s;
            proxy_pass lb;
    }

    upstream web02 {
            server 172.16.1.8:22;
    }

    server {
            listen 3333;
            proxy_connect_timeout 3s;
            proxy_timeout 3s;
            proxy_pass web02;
    }

}
检测语法重启服务
[root@lb:conf.c]#nginx -t

[root@lb:conf.c]#systemctl restart nginx

[c:\~]$ ssh 10.0.0.4 3333
[root@web02:~]#

03.业务四层转发
[root@lb:conf.c]#cat lb.conf
stream {
    upstream lb {
            server 172.16.1.5:80;
            server 172.16.1.5:80;
    }

    server {
            listen 80;
            proxy_connect_timeout 3s;
            proxy_timeout 3s;
            proxy_pass lb;
    }

}

hosts解析
10.0.0.4  www.wp.com www.zh.com www.she.com www.admin.com

面试题:

LVS的几种模式
1.DR模式   修改目标地址
2.NAT模式  代理
3.TUN模式  隧道模式
4.FULL NAT模式
04.单台实现动静分离
1.部署java
[root@web01:~]#yum -y install java
2.部署tomcat服务
官网: https://tomcat.apache.org
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.28/bin/apache-tomcat-10.1.28.tar.gz
解压代码:
[root@web01:~]#tar xf apache-tomcat-10.1.28.tar.gz -C /usr/local/

启动tomcat服务
[root@web01:~]#/usr/local/apache-tomcat-10.1.28/bin/startup.sh

停止tomcat服务
[root@web01:~]#/usr/local/apache-tomcat-10.1.28/bin/shutdown.sh

查看tomcat是否启动:
[root@web01:~]#netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1061/php-fpm: maste
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3581/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1064/sshd: /usr/sbi
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      7795/java
tcp6       0      0 :::8080                 :::*                    LISTEN      7795/java


tomcat的代码目录
[root@web01:~]#ll /usr/local/apache-tomcat-10.1.28/webapps/ROOT/
total 164
-rw-r----- 1 root root 27235 Aug  2 23:14 asf-logo-wide.svg
-rw-r----- 1 root root   713 Aug  2 23:14 bg-button.png
-rw-r----- 1 root root  1918 Aug  2 23:14 bg-middle.png
-rw-r----- 1 root root  1401 Aug  2 23:14 bg-nav.png
-rw-r----- 1 root root  3103 Aug  2 23:14 bg-upper.png
-rw-r----- 1 root root 21630 Aug  2 23:14 favicon.ico
-rw-r----- 1 root root 12241 Aug  2 23:14 index.jsp
-rw-r----- 1 root root  6776 Aug  2 23:14 RELEASE-NOTES.txt
-rw-r----- 1 root root  5584 Aug  2 23:14 tomcat.css
-rw-r----- 1 root root 67795 Aug  2 23:14 tomcat.svg
drwxr-x--- 2 root root    21 Aug 13 10:13 WEB-INF


3.配置nginx代理tomcat服务
[root@web01:conf.d]#cat tomcat.conf
server {
	listen 80;
	server_name www.tomcat.com;

	location / {
	proxy_pass http://127.0.0.1:8080;
	}
}

[root@web01:conf.d]#nginx -t

[root@web01:conf.d]#systemctl restart nginx

windows的hosts解析
10.0.0.7 www.tomcat.com
静态文件拆分:
[root@web01:conf.d]#cat tomcat.conf
server {
	listen 80;
	server_name www.tomcat.com;

	location / {
	proxy_pass http://127.0.0.1:8080;
	}

	location  ~ \.(svg|png|jpg|jpeg)$ {
	root /code;
	}
}

[root@web01:conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01:conf.d]#systemctl restart nginx

将tomcat下的图片拷贝到/code目录
[root@web01:conf.d]#cp /usr/local/apache-tomcat-10.1.28/webapps/ROOT/tomcat.svg /code/
[root@web01:conf.d]#ll /code/
total 92
drwxr-xr-x 13 root root  4096 Aug  9 11:57 admin
drwxr-xr-x  2 root root   138 Aug 12 14:59 index
-rw-r--r--  1 root root    17 Aug  9 09:39 index.html
-rw-r--r--  1 root root   331 Aug  6 15:37 mysql.php
drwxr-xr-x  7 www  www    336 Aug  7 11:45 she
-rw-r-----  1 root root 67795 Aug 13 10:29 tomcat.svg			# tom猫的图片

修改文件的权限: 因为使用的是nginx代理,所以nginx运行用户www需要对tomcat.svg有读的权限
[root@web01:~]#ll /code/tomcat.svg
-rw-r----- 1 root root 67795 Aug 13 10:29 /code/tomcat.svg
[root@web01:~]#chown www.www /code/tomcat.svg
[root@web01:~]#ll /code/tomcat.svg
-rw-r----- 1 www www 67795 Aug 13 10:29 /code/tomcat.svg

05.动静分离实战
系统	作用	服务	地址
麒麟	负载均衡	nginx proxy	    10.0.0.5
麒麟	静态资源	nginx static	10.0.0.7
麒麟	动态资源	tomcat server	10.0.0.8


1.WEB02准备静态资源
[root@web01:conf.d]#cat static.conf
server {
        listen 80;
        server_name pic.lzy.com;
        root /code;
        index index.html;

        location ~* .*\.(jpg|png|gif)$ {
        root /code/images;
        }
}

[root@web01:conf.d]#echo web01.... > /code/index.html
上传一张图片到/code/iamges下
[root@web01:conf.d]#mkdir /code/images
[root@web01:conf.d]#mv 4.png /code/images/

[root@web01:conf.d]#nginx -t

[root@web01:conf.d]#systemctl restart nginx

hosts解析
10.0.0.7 pic.lzy.com
pic.lzy.com/4.png
WEB02准备动态资源
安装java运行环境
[root@web02:~]#yum -y install java
[root@web02:~]#scp -r 10.0.0.7:/usr/local/apache-tomcat-10.1.28/ /usr/local/
[root@web02:~]#cd /usr/local/
[root@web02:local]#ln -s apache-tomcat-10.1.28/ tomcat
[root@web02:~]#cat /usr/local/tomcat/webapps/ROOT/java.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
    <HEAD>
        <TITLE>oldboy JSP Page</TITLE>
    </HEAD>
    <BODY>
        <%
            Random rand = new Random();
            out.println("<h1>oldboy随机数:<h1>");
            out.println(rand.nextInt(99)+100);
        %>
    </BODY>
</HTML>

启动tomcat
[root@web02:~]#/usr/local/tomcat/bin/startup.sh

负载均衡实现调度:
[root@lb01:~]#cd /etc/nginx/conf.d/
[root@lb01:conf.d]#cat ds.conf
upstream static {
        server 172.16.1.7:80;
}

upstream java {
        server 172.16.1.8:8080;
}

server {
        listen 80;
        server_name pic.lzy.com;

        location ~* \.(jpg|png|gif)$ {
                proxy_pass http://static;
                proxy_set_header Host $http_host;
        }

        location ~ \.jsp {
                proxy_pass http://java;
                proxy_set_header Host $http_host;
        }
}
[root@lb01:conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01:conf.d]#systemctl restart nginx

通过负载均衡可以访问动态

通过负载均衡可以访问静态

将动态页面和静态页面集成到负载均衡的index.html的首页中。
 里面配置的是接口。
[root@lb01:conf.d]#cat ds.conf
upstream static {
        server 172.16.1.7:80;
}

upstream java {
        server 172.16.1.8:8080;
}

server {
        listen 80;
        server_name pic.lzy.com;
	root /code;				# 指定默认的代码目录
	index index.html;		# 返回默认的页面
        location ~* \.(jpg|png|gif)$ {
                proxy_pass http://static;
                proxy_set_header Host $http_host;
        }

        location ~ \.jsp {
                proxy_pass http://java;
                proxy_set_header Host $http_host;
        }
}

[root@lb01:conf.d]#nginx -t

[root@lb01:conf.d]#systemctl restart nginx

创建代码文件:
[root@lb01:~]#mkdir /code
[root@lb01:~]#vim /code/index.html

[root@lb01:~]#cat /code/index.html
<html lang="en">
<head>
        <meta charset="UTF-8" />
        <title>测试ajax和跨域访问</title>
        <script src="http://libs.baidu.com/jquery/
        2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
        $.ajax({
        type: "GET",
        url: "http://pic.lzy.com/java.jsp",
        success: function(data){
                $("#get_data").html(data)
        },
        error: function() {
                alert("哎呦喂,失败了,回去检查你服务去~");
        }
        });
});
</script>
        <body>
                <h1>测试动静分离</h1>
                <img src="http://pic.lzy.com/4.png">
                <div id="get_data"></div>
        </body>
</html>

访问测试首页:
10.0.0.5  pic.lzy.com

测试动静分离:

1.停止静态资源访问动态
WEB01:
[root@web01:~]#systemctl stop nginx

访问主页:
pic.lzy.com

测试完成后启动 nginx

[root@web01:~]#systemctl start nginx

2.停止动态资源访问静态
[root@web02:~]#/usr/local/tomcat/bin/shutdown.sh
06.按照客户端转发到不同业务

系统版本	主机角色	外网IP	内网IP	    提供端口
麒麟		负载均衡	10.0.0.5	172.16.1.5	80
麒麟		提供Android页面			172.16.1.7	9090
麒麟		提供Iphone页面			172.16.1.7	9091
麒麟		提供pc页面				172.16.1.7	9092

WEB01配置基于多端口实现不同的业务:
[root@web01:~]#cd /etc/nginx/conf.d/
[root@web01:conf.d]#
[root@web01:conf.d]#cat m.conf
server {
	listen 9090;
	server_name _;

	location / {
	root /code/m/android;
	index index.html;
	}
}
[root@web01:conf.d]#mkdir /code/m/android -p
echo 您是使用的Android操作系统  > /code/m/android/index.html
[root@web01:conf.d]#nginx -t
[root@web01:conf.d]#systemctl restart nginx


中文乱码问题:
[root@web01:conf.d]#grep charset ../nginx.conf
    charset utf-8,gbk;		# 主配置文件增加字符集
[root@web01:conf.d]#systemctl restart nginx

整体配置:
[root@web01:conf.d]#cat m.conf
server {
	listen 9090;
	server_name _;

	location / {
	root /code/m/android;
	index index.html;
	}
}
server {
        listen 9091;
        server_name _;

        location / {
        root /code/m/iphone;
        index index.html;
        }
}
server {
        listen 9092;
        server_name _;

        location / {
        root /code/m/pc;
        index index.html;
        }
}
[root@web01:conf.d]#mkdir /code/m/{iphone,pc}
[root@web01:conf.d]#echo 您是使用的是iphone访问的 > /code/m/iphone/index.html
[root@web01:conf.d]#echo 您是使用的是pc浏览器访问的 > /code/m/pc/index.html

[root@web01:conf.d]#nginx -t
[root@web01:conf.d]#systemctl restart nginx






Nginx根据客户端UA的信息来决定转发到具体的业务
[root@lb01:conf.d]#cat m.conf
upstream android {
        server 172.16.1.7:9090;
}

upstream iphone {
        server 172.16.1.7:9091;
}

upstream pc {
        server 172.16.1.7:9092;
}

server {
        listen 80;
        server_name sj.lzy.com;
        charset 'utf-8';

        location / {

                #如果客户端来源是Android则跳转到Android的资源;
                if ($http_user_agent ~* "Android") {
                        proxy_pass http://android;
                }

                #如果客户端来源是Iphone则跳转到Iphone的资源;
                if ($http_user_agent ~* "Iphone") {
                        proxy_pass http://iphone;
                }

                #如果客户端是IE浏览器则返回403错误;
                if ($http_user_agent ~* "MSIE") {
                        return 403;
                }

                #默认跳转pc资源;
                proxy_pass http://pc;
        }
}


[root@lb01:conf.d]#nginx -t
[root@lb01:conf.d]#systemctl restart nginx

hosts解析
10.0.0.5 sj.lzy.com
06.作业:
1.四层转发
2222--->172.16.1.7:22
3333--->172.16.1.8:22
4444--->172.16.1.51:3306   # 测试
web01安装mysql: mysql -h 10.0.0.4 -p4444 -ulzy -plzy123.com
www.wp.com--->四层--->七层 172.16.1.5 172.16.1.6

2.单台实现动静分离
部署java
部署tomcat
通过nginx反向代理到tomcat
使用location拆分图片 tomcat首页图片

3.集群实现动静分离
准备静态资源
准备动态资源
负载均衡集成动态和静态为一个页面

4.通过UA判断客户端,转发到不同的业务。
07.四层负载均衡和七层负载均衡

四层负载均衡(L4)
适用场景:
TCP 应用:

数据库服务:
  当你需要负载均衡数据库连接(如 MySQL、PostgreSQL)时,使用四层负载均衡。
  数据库通常使用 TCP 连接,四层负载均衡可以处理这些连接的分发。
  示例: 你有一个高流量的 MySQL 数据库集群,
        使用四层负载均衡可以将数据库请求分发到多个数据库实例,
        提高处理能力和容错性。

自定义协议:
    专有协议: 如果你的应用使用自定义的网络协议而不是 HTTP,
    四层负载均衡是合适的。
    它能够处理不同于 HTTP 的数据流,如自定义的 TCP 协议。
    示例: 你在使用一个自定义的消息队列服务,
    该服务基于 TCP 协议进行通信。
    四层负载均衡可以将消息流量均匀地分配到多个消息队列服务器。

高性能要求:
    需要低延迟: 四层负载均衡处理的层次较低,
    通常在性能要求较高的场景下使用,
    因为它直接转发 TCP 连接,减少了处理延迟。
    示例: 你有一个金融交易系统,
    需要快速处理大量的实时交易数据。
    四层负载均衡可以提供低延迟的连接分发。


七层负载均衡(L7)
  适用场景:
  Web 应用:

HTTP/HTTPS 服务: 七层负载均衡适用于 Web 应用,
它可以根据 HTTP 请求的内容(如 URL 路径、主机名、请求头)来决定如何路由请求。
示例:
你有一个电商网站,
需要根据不同的请求路径将流量分发到不同的微服务(如产品服务、支付服务)。
七层负载均衡可以根据请求的 URL 路径将流量转发到相应的服务。

内容路由:
基于内容的路由:
 如果你需要根据请求的具体内容(如请求头、参数)来决定请求的路由,
 七层负载均衡可以进行内容解析和分发。
示例:
你有一个视频流服务,根据用户请求的区域或语言将视频流分发到不同的服务器群组。
七层负载均衡可以基于请求的内容来做出这些决策。

应用层优化:
缓存和压缩:
    七层负载均衡支持应用层的优化,
    如缓存、压缩和内容替换,提升应用的性能和响应速度。
示例:
你有一个高流量的新闻网站,
使用七层负载均衡来缓存静态内容(如图片、文章),
减少服务器的负载并加快页面加载速度。

安全和认证:
SSL/TLS 终止: 七层负载均衡可以在负载均衡器处终止 SSL/TLS 连接,
简化后端服务器的安全管理。
  示例: 你有一个需要处理大量 HTTPS 请求的在线服务,
  七层负载均衡器可以处理 SSL/TLS 解密,
  然后将解密后的流量发送到内部服务器。

总结
  四层负载均衡(L4): 适用于处理低层次的网络流量,
  如 TCP 连接,通常用于数据库、消息队列等需要高性能和低延迟的场景。
  七层负载均衡(L7):
  适用于处理基于 HTTP 的应用流量,支持更复杂的路由和内容处理,
  通常用于 Web 应用、内容分发和应用层优化。

选择合适的负载均衡类型可以帮助你优化应用性能、
提升用户体验,并确保系统的高可用性和可扩展性。

08.nginx 参数
proxy_pass http://my_app;:将请求转发到 my_app。
proxy_set_header Host $host;:传递原始请求中的 Host 头。
proxy_set_header X-Real-IP $remote_addr;:设置客户端的实际 IP 地址。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:将客户端 IP 地址添加到 X-Forwarded-For 头部,支持链式代理。
proxy_set_header X-Forwarded-Proto $scheme;:传递原始请求的协议(http 或 https)。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值