马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- 遇到的问题
- 大型网站都要面对庞大的用户量,高并发,海量数据等挑战。为了提升系统整体的性能,可以采用垂直扩展和水平扩展两种方式。
- 垂直扩展:在网站发展早期,可以从单机的角度通过增加硬件处理能力,比如 CPU 处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升。但是,单机是有性能瓶颈的,一旦触及瓶颈,再想提升,付出的成本和代价会极高。这显然不能满足大型分布式系统(网站)所有应对的大流量,高并发,海量数据等挑战。
- 水平扩展:通过集群来分担大型网站的流量。集群中的应用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点,这些节点共同分担访问压力。水平扩展有两个要点:
- 应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。
- 负载均衡:将用户访问请求,通过某种算法,分发到集群中的节点。
- 什么是负载均衡
- 负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。
- 负载均衡的主要作用如下
- 高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。
- 伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。
- 高可用:负载均衡器可以监控
候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。 - 安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。
- 负载均衡分为两类:硬件负载均衡、软件负载均衡
- 硬件负载均衡的 优点:
- 功能强大:支持全局负载均衡并提供较全面的、复杂的负载均衡算法。
- 性能强悍:硬件负载均衡由于是在专用处理器上运行,因此吞吐量大,可支持单机百万以上的并发。
- 安全性高:往往具备防火墙,防 DDos 攻击等安全功能。
- 硬件负载均衡
- 硬件负载均衡,一般是在定制处理器上运行的独立负载均衡服务器,价格昂贵,土豪专属。硬件负载均衡的主流产品有:F5 和 A10。
- 硬件负载均衡的 缺点:
- 成本昂贵:购买和维护硬件负载均衡的成本都很高。
- 扩展性差:当访问量突增时,超过限度不能动态扩容。
- 软件负载均衡
- 软件负载均衡,应用最广泛,无论大公司还是小公司都会使用。
- 软件负载均衡从软件层面实现负载均衡,一般可以在任何标准物理设备上运行。
- 软件负载均衡的 主流产品 有:Nginx、HAProxy、LVS。
- LVS 可以作为四层负载均衡器。其负载均衡的性能要优于 Nginx。
- HAProxy 可以作为 HTTP 和 TCP 负载均衡器。
- Nginx、HAProxy 可以作为四层或七层负载均衡器
复制代码 实验呆板
server端 test3192.168.23.103server端 test1192.168.23.101署理端 test2192.168.23.102win客户端本机window体系nginx负载均衡
nginx负载均衡调治算法
轮询按时间序次逐一分配到差别的后端服务器(默认) 也叫rr轮询weight加权轮询,weight值越大,分配到的访问几率越高ip_hash每个哀求按访问IP的hash结果分配,如许来自同一IP的固定访问一个后端服务器url_hash按照访问URL的hash结果来分配哀求,是每个URL定向到同一个后端服务器least_conn最少链接数,谁人呆板链接数少就分发口试题
- [root@test2 ~]# cat /etc/nginx/conf.d/1.conf
- upstream web-pool {
- server 192.168.23.103 weight=5;
- server 192.168.23.101;
- }
- server {
- listen 80;
- server_name _;
- location / {
- proxy_pass http://web-pool;
- }
- }
- server {
- listen 80;
- server_name www.wordpress.com;
- location / {
- proxy_pass http://web-pool;
- proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_http_version 1.1;
- }
- }
- [root@test2 ~]# nginx -t
- nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
- nginx: configuration file /etc/nginx/nginx.conf test is successful
- [root@test2 ~]# systemctl restart nginx
复制代码 此时用欣赏器访问,就是test3访问5次,test1访问1次
iphash
- [root@test2 ~]# cat /etc/nginx/conf.d/1.conf
- upstream web-pool {
- ip_hash;
- server 192.168.23.103;
- server 192.168.23.101;
- }
- server {
- listen 80;
- server_name _;
- location / {
- proxy_pass http://web-pool;
- }
- }
- server {
- listen 80;
- server_name www.wordpress.com;
- location / {
- proxy_pass http://web-pool;
- proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_http_version 1.1;
- }
- }
- [root@test2 ~]# curl 127.0.0.1
- this is test3
- [root@test2 ~]# curl 127.0.0.1
- this is test3
- [root@test2 ~]# curl 127.0.0.1
- this is test3
- [root@test2 ~]# curl 127.0.0.1
- this is test3
- 只要你第一次访问那个服务器,后面访问的一直是这个
- 劣势:会导致负载均衡不均衡
- 优势:可以解决session会话的问题
- session就是把自己的用户名和密码保存到客户端,下次在登录的时候,我们回去验证这个保存的东西,
复制代码 nginx负载均衡后端服务器的状态
状态概述down当前的server临时不参加负载均衡backup预留的备份服务器max_fails允许哀求失败的次数fail_timeout颠末max_fails失败后, 服务停息时间max_conns限定最大的吸取毗连数测试down 服务器 不参加哀求
- [root@test2 ~]# cat /etc/nginx/conf.d/1.conf
- upstream web-pool {
- server 192.168.23.103 down;
- server 192.168.23.101;
- }
- server {
- listen 80;
- server_name _;
- location / {
- proxy_pass http://web-pool;
- }
- }
- server {
- listen 80;
- server_name www.wordpress.com;
- location / {
- proxy_pass http://web-pool;
- proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_http_version 1.1;
- }
- }
- [root@test2 ~]# curl 192.168.23.102
- this is test1
- [root@test2 ~]# curl 192.168.23.102
- this is test1
- [root@test2 ~]# curl 192.168.23.102
- this is test1
复制代码 测试backup
- [root@test2 ~]# cat /etc/nginx/conf.d/1.conf
- upstream web-pool {
- server 192.168.23.103;
- server 192.168.23.100;
- server 192.168.23.101 backup;
- }
- server {
- listen 80;
- server_name _;
- location / {
- proxy_pass http://web-pool;
- }
- }
- server {
- listen 80;
- server_name www.wordpress.com;
- location / {
- proxy_pass http://web-pool;
- proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_http_version 1.1;
- }
- }
- 当 192.168.23.100 192.168.23.103 全部都挂了之后 backup才参与调度‘
- [root@test2 ~]# systemctl restart nginx
- [root@test2 ~]# curl 192.168.23.102
- this is test3
- [root@test2 ~]# curl 192.168.23.102
- this is test3
- 此时把test3的nginx停了,在测试
- [root@test2 ~]# curl 192.168.23.102
- this is test1
- [root@test2 ~]# curl 192.168.23.102
- this is test1
复制代码 nginx编译安装
- 什么情况下会用到编译安装呢
- 当yum安装或者二进制安装的版本不满足你的需求,或者当yum安装或者二进制安装没有你需要的模块,此时需要用到编译安装,也可以只能安装位置
- 现在的需求是想加一个nginx负载均衡健康检查模块 nginx_upstream_check_module
- [root@test2 ~]# cat /etc/nginx/conf.d/1.conf
- upstream web-pool {
- server 192.168.23.103:80 max_fails=2 fail_timeout=10s;
- server 192.168.23.101:80 max_fails=2 fail_timeout=10s;
- check interval=3000 rise=2 fall=3 timeout=1000 type=http;
- }
- server {
- listen 80;
- server_name _;
- location / {
- proxy_pass http://web-pool;
- }
- location /upstream_check {
- check_status;
- }
- }
- server {
- listen 80;
- server_name www.wordpress.com;
- location / {
- proxy_pass http://web-pool;
- proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_http_version 1.1;
- }
- }
- [root@test2 ~]# nginx -t
- nginx: [emerg] unknown directive "check_status" in /etc/nginx/conf.d/1.conf:24
- nginx: configuration file /etc/nginx/nginx.conf test failed
- 访问 192.168.23.102/upstream_check ,监控
后端服务器的一个工作情况 - 编译安装,解决一些依赖
- yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel patch
- 下载nginx的源码包和第三方的依赖
- wget http://nginx.org/download/nginx-1.22.1.tar.gz
- wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip
- 解压
- unzip maaster.zip
- 创建一个专门用于存放nginx模块的目录
- mkdir /root/nginx_module
- [root@test2 ~]# mv nginx_upstream_check_module-master /root/nginx_module/nginx_upstream_check_module
- ./configure --prefix=/opt/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --add-module=/root/nginx_module/nginx_upstream_check_module/ --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
- checking for --with-ld-opt="-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E" ... not found
- ./configure: error: the invalid value in --with-ld-opt="-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E"
- [root@test2 nginx-1.20.1]# yum -y install redhat-rpm-config.noarch
- 重新编译即可
- 报
- ./configure: error: the HTTP XSLT module requires the libxml2/libxslt
- libraries. You can either do not enable the module or install the libraries.
- yum install libxslt* -y
- yum install libxml* -y
- 或者
- yum -y install libxml2 libxml2-devel libxslt-devel
- 报
- ./configure: error: the Google perftools module requires the Google perftools
- library. You can either do not enable the module or install the library.
- 解决
- yum -y install gperftools
- 报
- ./configure: error: perl module ExtUtils::Embed is required
- yum -y install perl-devel perl-ExtUtils-Embed
- 报
- ./configure: error: the GeoIP module requires the GeoIP library.
- You can either do not enable the module or install the library
- yum -y install GeoIP GeoIP-devel GeoIP-data
- 此时编译完成
- nginx path prefix: "/opt/nginx"
- nginx binary file: "/usr/sbin/nginx"
- nginx modules path: "/usr/lib64/nginx/modules"
- nginx configuration prefix: "/etc/nginx"
- nginx configuration file: "/etc/nginx/nginx.conf"
- nginx pid file: "/run/nginx.pid"
- nginx error log file: "/var/log/nginx/error.log"
- nginx http access log file: "/var/log/nginx/access.log"
- nginx http client request body temporary files: "/var/lib/nginx/tmp/client_body"
- nginx http proxy temporary files: "/var/lib/nginx/tmp/proxy"
- nginx http fastcgi temporary files: "/var/lib/nginx/tmp/fastcgi"
- nginx http uwsgi temporary files: "/var/lib/nginx/tmp/uwsgi"
- nginx http scgi temporary files: "/var/lib/nginx/tmp/scgi"
- [root@test2 nginx-1.20.1]# make
- make: *** No rule to make target `build', needed by `default'. Stop.
- 再次安装依赖
- [root@test2 nginx-1.20.1]# yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel
- 再次执行make && make install
- cd /root/nginx-1.20.1/objs/
- 指定一下配置文件
- [root@test2 objs]# ./nginx -c /etc/nginx/nginx.conf
- 重启nginx,访问发现报500
- 日志
报 - 2024/09/06 21:38:09 [error] 38965#38965: *14 http upstream check module can not find any check server, make sure you've added the check servers, client: 192.168.23.1, server: 192.168.23.102, request: "GET /upstream_check HTTP/1.1", host: "192.168.23.102"
复制代码
办理
- 给nginx打补丁(根据nginx版本号选择补丁包)
- [root@test2 nginx-1.20.1]# patch -p1 < /root/nginx_module/nginx_upstream_check_module/check_1.20.1+.patch
- patching file src/http/modules/ngx_http_upstream_hash_module.c
- patching file src/http/modules/ngx_http_upstream_ip_hash_module.c
- patching file src/http/modules/ngx_http_upstream_least_conn_module.c
- patching file src/http/ngx_http_upstream_round_robin.c
- patching file src/http/ngx_http_upstream_round_robin.h
- 在重新编译安装一下nginx即可
复制代码 nginx 常用模块
nginx怎样表现如许的界面
- 1.配置 index 索引列表
- [root@test3 conf.d]# cat aotu.conf
- server {
- listen 80;
- server_name 192.168.23.102;
- location / {
- root /code/index;
- autoindex on;
- }
- }
- 创建代码目录
- [root@test3 conf.d]# mkdir /code/index
- [root@test3 conf.d]# touch /code/index/1.txt
- [root@test3 conf.d]# mkdir /code/index/2jianduan
- [root@test3 conf.d]# touch /code/index/2jianduan/3.txt
- 重启nginx
- [root@test3 conf.d]# systemctl restart nginx
- 做hosts解析,浏览器访问
复制代码- 此时创建一个长的文件名,他就会乱码,中文乱码
- [root@test3 conf.d]# touch /code/index/06.第81期视频-反向代理优化配置.mp4
- 解决乱码
- [root@test3 conf.d]# cat aotu.conf
- server {
- listen 80;
- server_name 192.168.23.102;
- charset utf-8,gbk;
- location / {
- root /code/index;
- autoindex on; #开启目录索引,以列表的方式显示
- }
- }
复制代码
此时乱码的标题办理了,接下来就是时间,时间不对
- [root@test3 ~]# cat /etc/nginx/conf.d/aotu.conf
- server {
- listen 80;
- server_name 192.168.23.102;
- charset utf-8,gbk;
- location / {
- root /code/index;
- autoindex on;
- autoindex_localtime on; #以本地创建时间为准
- autoindex_exact_size off; #大小以KB M G显示
- }
- }
复制代码 限速
- [root@test3 ~]# cat /etc/nginx/conf.d/aotu.conf
- server {
- listen 80;
- server_name 192.168.23.102;
- charset utf-8,gbk;
- location / {
- root /code/index;
- autoindex on;
- autoindex_localtime on;
- autoindex_exact_size off;
- limit_rate_after 2M; 下载的时候前2M不限速
- limit_rate 50k; 2M之后只允许50k的下载速度,也可以不用上面那个,让他全部都50k下载
- }
- }
复制代码
nginx状态监控 模块
- http_stub_status nginx默认就有的
- [root@test3 ~]# cat /etc/nginx/conf.d/aotu.conf
- server {
- listen 80;
- server_name 192.168.23.102;
- charset utf-8,gbk;
- location / {
- root /code/index;
- autoindex on;
- autoindex_localtime on;
- autoindex_exact_size off;
- limit_rate_after 2M;
- limit_rate 50k;
- }
- location /nginx_stub {
- stub_status;
- }
- }
复制代码
nginx访问控制
- [root@test3 ~]# cat /etc/nginx/conf.d/aotu.conf
- server {
- listen 80;
- server_name 192.168.23.102;
- charset utf-8,gbk;
- location / {
- root /code/index;
- autoindex on;
- autoindex_localtime on;
- autoindex_exact_size off;
- limit_rate_after 2M;
- limit_rate 50k;
- }
- location /nginx_stub {
- stub_status;
- allow 192.168.23.102; #多个用逗号隔开
- deny all;
- }
- }
- [root@test3 ~]# systemctl restart nginx
- #此时除了102之外剩下的都不能访问了
- [root@test3 ~]# curl 192.168.23.103/nginx_stub
- <html>
- <head><title>403 Forbidden</title></head>
- <body>
- <center><h1>403 Forbidden</h1></center>
- <hr><center>nginx/1.20.1</center>
- </body>
- </html>
复制代码 基于用户登录的认证方式
- ngx_http_auth_basic_module
- [root@test3 ~]# cat /etc/nginx/conf.d/aotu.conf
- server {
- listen 80;
- server_name 192.168.23.102;
- charset utf-8,gbk;
- location / {
- root /code/index;
- autoindex on;
- autoindex_localtime on;
- autoindex_exact_size off;
- limit_rate_after 2M;
- limit_rate 50k;
- }
- location /nginx_stub {
- stub_status;
- auth_basic "welcome my website"; # 一个类似宇 描述信息,没啥用,但必须要有
- auth_basic_user_file conf/htpasswd; #密码必须是hash值
- }
- }
- 手动生成密码
- [root@test3 ~]# yum install httpd-tools -y
- [root@test3 ~]# htpasswd -b -c /etc/nginx/conf/htpasswd root 123456
- Adding password for user root
- -c 创建新文件
- -b 运行命令行输入密码
- 重启nginx
- 此时日志
里面的远程用户就可有了 $remote_user
复制代码 nginx访问限定
在企业中常常碰到这种环境,服务器流量非常,负载过大等等,对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,每每思量对同一个ip毗连数,哀求数,举行限定
ngx_http_limit_conn_module 模块可以根据界说的key来限定每个键值的毗连数,如同一个IP泉源的毗连数
limit_conn_module 毗连频率限定
limit_req_module哀求频率限定如果以为网页报503不悦目,可以把他定向到一个页面
- [root@test3 code]# cat /etc/nginx/conf.d/aotu.conf
- limit_conn_zone $remote_addr zone=conn_zone:10M;
- limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
- server {
- listen 80;
- server_name 192.168.23.102;
- charset utf-8,gbk;
- limit_conn conn_zone 100;
- limit_req zone=one burst=5 nodelay;
- limit_req_status 404; #页面自定义返回 404 所有 都报404 这个可以自定义
- error_page 404 403 /error.html; #代码目录下
- location / {
- root /code/index;
- autoindex on;
- autoindex_localtime on;
- autoindex_exact_size off;
- limit_rate_after 2M;
- limit_rate 50k;
- }
- location /nginx_stub {
- stub_status;
- auth_basic "welcome my website";
- auth_basic_user_file conf/htpasswd;
- }
- }
- [root@test3 ~]# cat /code/index/error.html
- <img style='width:100%;higth:100%;' src=/error.png>
复制代码 location匹配规则
- 使用nginx location 可以控制访问网站的路径,但一个 sevrer 可以有多个location ,那多个location 的优先级该如何区分呢
复制代码 通配符匹配规则优先级=正确匹配1^~以某个字符串开头2~区分巨细写的正则匹配3~*不区分巨细写的正则匹配4/通用匹配。任何哀求都会匹配5- [root@test3 ~]# cat /etc/nginx/conf.d/test.conf
- server {
- listen 192.168.23.103;
- default_type test/html; #默认给他一个文件,就不用写配置文件了
- location = / {
- return 200 "configuration A";
- }
- location / { #优先级最低,当什么都匹配不到的时候就会匹配到这个
- return 200 "configuration B";
- }
- location /documents/ {
- return 200 "configuration C";
- }
- location ^~ /images/ {
- return 200 "configuration D";
- }
- location ~* \.(gif|jpg|jpeg)$ {
- return 200 "configuration E";
- }
- }
- [root@test3 ~]# nginx -t
- nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
- nginx: configuration file /etc/nginx/nginx.conf test is successful
- [root@test3 ~]# systemctl restart nginx
- 测试结果
- [root@test3 ~]# curl 192.168.23.103
- configuration A[root@test3 ~]# curl 192.168.23.103/
- configuration A[root@test3 ~]# curl 192.168.23.103/documents/
- configuration C[root@test3 ~]# curl 192.168.23.103/imageS/
- configuration B[root@test3 ~]# curl 192.168.23.103/images/
- configuration D[root@test3 ~]# curl 192.168.23.103/imageS/aaaaaa/gif
- configuration B[root@test3 ~]# curl 192.168.23.103/imageS/aaaaaa/gif/
- configuration B[root@test3 ~]# curl 192.168.23.103/aaaaaaaaaaaaaabbbbbbbbbbbbbbb
- configuration B[root@test3 ~]# curl 192.168.23.103/imageS/aaaaaa/aaa.gif
- configuration E
复制代码 nginx四层负载
- 四层负载均衡是基于传输层协议来封装的(如tcp/ip),那我们前面使用到的七层是指应用层,他的组装在四层的基础之上,无论四层还是七层都是指os网络模型
- 四层负载均衡的应用场景
- 1.四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性:如nginx就算无法保证自己服务高可用,需要依赖lvs或者keepalive
- 2.如:tcp协议的负载均衡,有写请求是tcp协议的(mysql,ssh),或者说有些请求只需要使用四层进行端口转发就可以了,所以使用四层负载均衡
- 四层负载总结
- 1.仅能转发tcp/ip协议、udp协议,通常用来转发端口,如:tcp/22,udp/53
- 2.四层负载可以用来解决七层负载端口限制问题(七层负载最大使用65535个端口)
- 3.四层负载可以解决七层负载高可用的问题(多台后端七层负载均衡能同时的使用)
- 4.四层负载转发效率比七层高得多,但仅支持tcp/ip协议,不支持https和http协议
- 5.通常大并发场景通常会选择使用七层负载前面增加四层负载
复制代码- 创建四层负载均衡配置文件的目录
- vim /etc/nginx/nginx.conf
- events {
- ....
- }
- include /etc/nginx/conf.c/*.conf #需要放到http层的外面
- http {
- .....
- }
- mkdir /etc/nginx/conf.c
- 1.安装部署nginx
- yum install nginx -y
- 2.配置nginx四层负载,xshell远程连接192.168.23.102的2222 端口 看看是不是连接到 192.168.23.103:22,端口的四层转发
- [root@test3 conf.d]# cat /etc/nginx/conf.c/1.conf
- stream {
- upstream web01 {
- server 192.168.23.102:22;
- }
- server {
- listen 2222;
- proxy_pass web01;
- }
- }
- [root@test3 conf.d]# ssh 192.168.23.103 -p2222
- The authenticity of host '[192.168.23.103]:2222 ([192.168.23.103]:2222)' can't be established.
- ECDSA key fingerprint is SHA256:KL0Kxcu2FE2TN12tjh7xHD4F5aj3QCk0ibsZbEd6fOU.
- ECDSA key fingerprint is MD5:75:05:fa:a3:0e:e5:da:86:92:12:20:3c:a1:11:24:cc.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added '[192.168.23.103]:2222' (ECDSA) to the list of known hosts.
- Last login: Sun Oct 6 06:22:44 2024 from 192.168.23.1
- [root@test2 ~]#
- # 业务的四层转发
- stream {
- upstream web01 {
- server 192.168.23.102:80;
- }
- server {
- listen 2222;
- proxy_pass web01;
- }
- }
- 远程连接mysql
- [root@registry conf]# cat /etc/nginx/conf.d/ceshi.conf
- stream {
- upstream web01 {
- server 192.168.23.103:3306;
- }
- server {
- listen 2222;
- proxy_pass web01;
- }
- }
- [root@registry conf]# mysql -uroot -P2222
- Welcome to the MariaDB monitor. Commands end with ; or \g.
- Your MariaDB connection id is 6
- Server version: 5.5.68-MariaDB MariaDB Server
- Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- MariaDB [(none)]> \q
复制代码 |