共享nfs和nginx负载均衡

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 共享nfs和nginx负载均衡

代理和负载均衡的区别


   代理负责把连接请求直接转发到后台某个web节点

   负载均衡负责把请求使用某种调度算法分散发布给后台所有web节点


1.配置nginx代理服务器lb1


lb1: 192.168.8.10

web1:192.168.8.20

web2:192.168.8.30


(1)启动lb1,安装nginx

yum -y install epel-release

yum -y install nginx

systemctl start nginx

systemctl enable nginx


(2)创建代理配置文件,添加优化项(或直接使用第(4)步的配置)

vim /etc/nginx/conf.d/lb1.conf

添加:

server {

       listen 80;

       server_name blog.benet.com;


       location / {

               proxy_pass http://192.168.8.20;                                

               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_connect_timeout 30;                                        #代理和后端服务器连接超时时间

       proxy_send_timeout 60;                                            #后端服务器传回代理的超时时间

       proxy_read_timeout 60;                                            #代理等待后端服务器的响应时间

             

       proxy_buffering on;                                                #启用缓存,后端返回内容先缓存,再给客户端,收到多少转多少

       proxy_buffer_size 32k;                                            #代理缓存用户头信息的缓存区大小

       proxy_buffers 4 128k;                                            #缓存区的设置

       proxy_busy_buffers_size 256k;

           #从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方

       proxy_max_temp_file_size 256k;

           #超大的响应头存储成文件。

       }

}


保存退出

systemctl restart nginx


(3)客户端修改hosts文件指向lb1,测试访问


(4)扩展:创建优化项文件,网站配置文件直接调用(选做,但推荐)

vim /etc/nginx/nginx_params

添加:

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_connect_timeout 30;

proxy_send_timeout 60;

proxy_read_timeout 60;


proxy_buffering on;

proxy_buffer_size 32k;

proxy_buffers 4 128k;

保存退出


网站配置调用

vim /etc/nginx/conf.d/lb1.conf

修改为:

server {

       listen 80;

       server_name blog.benet.com;


       location / {

               proxy_pass http://192.168.8.20;

               include nginx_params;

       }

}

}

保存退出

重启nginx:systemctl restart nginx



2.负载均衡(Load Balance),简写LB

   面对高并发web请求,使用各种调度算法(rr,wrr,lc,wlc,ip_hash),分散转发到后台web群集节点,提高数据吞吐量,高容灾

   常见的LB:

           软件:lvs  nginx   haproxy  

           硬件:F5

           云LB:阿里云SLB    腾讯云CLB   青云QLB   ucloud ULB

         

   四层负载:ip地址    tcp/udp  端口号

   七层负载:HTTP  https  ftp   SMTP  

 

(1)修改lb1的配置文件,添加负载均衡功能

vim /etc/nginx/conf.d/lb1.conf

修改为:

upstream web_cluster {

       server 192.168.8.20:80;

       server 192.168.8.30:80;

}


server {

       listen 80;

       server_name blog.benet.com;


       location / {

               proxy_pass http://web_cluster;

               include nginx_params;

       }

}

}

保存退出

重启nginx:systemctl restart nginx


(2)客户端访问验证,浏览器如果判断不出来,就看web节点上的日志。


(3)nginx负载均衡后端状态

   weight            权重,默认为1

   down             当前节点服务器不参与负载均衡

   backup          备份服务器

   max_fails        允许请求失败的次数

   fail_timeout    经过max_fails失败后,服务的暂停时间

   max_conns       同一ip最大连接数

 

例子:

vim /etc/nginx/conf.d/lb1.conf

修改为:

upstream web_cluster {

       server 192.168.8.20:80 max_fails=2 fail_timeout=10s max_conns=1;  

       server 192.168.8.30:80 down;            #一般用于停机维护

}


########################################################################


1.配置4层负载均衡,发布内部服务器的ssh和mysql

lb:192.168.8.10

web1: 192.168.8.20

mysql: 192.168.8.30


vim /etc/nginx/nginx.conf

插入数据到http字段上方:

stream {

       upstream sshweb1 {

               server 192.168.8.20:22;

       }

       upstream mysql {

               server 192.168.8.30:3306;

       }


       server {

               listen 5555;

               proxy_pass sshweb1;

               proxy_connect_timeout 30;

               proxy_timeout 60;

       }

       server {

               listen 7777;

               proxy_pass mysql;

               proxy_connect_timeout 30;

               proxy_timeout 60;

       }

}

保存退出

重启服务:systemctl restart nginx


客户端访问验证ssh:

   xshell: ssh root@192.168.8.10  5555

    linux: ssh root@192.168.8.10 -p 5555


客户端访问验证mysql:

   安装navicat,建立连接192.168.8.10,端口7777


#####################################################################


高可用-增加容错性(HA:High availability)

   协议:VRRP(虚拟路由冗余协议) 公有协议  224.0.0.18

     HSRP(热备份路由协议)   私有协议,Cisco公司 224.0.0.5 224.0.0.6


高可用软件:

   keepalived:使用vrrp实现多台主机高可用群集

   高可用角色:master 主服务器

               backup 备服务器                

实施步骤:

目的:实现两台负载均衡器的高可用

环境:两台负载均衡器

       lb1:192.168.8.10  

       lb2:192.168.8.40


(1)安装keepalived(两台都装)

yum -y install keepalived


(2)配置keepalived

主服务器:lb1

vim /etc/keepalived/keepalived.conf

修改为:

global_defs {

  router_id lb1            #删除vrrp_strict行

}


vrrp_instance VI_1 {

   state MASTER

   interface ens33

   virtual_router_id 51

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.8.254

   }

}

保存退出

启动服务:

   systemctl restart keepalived

   systemctl enable keepalived


备服务器:lb2

vim /etc/keepalived/keepalived.conf

修改为:

global_defs {

  router_id lb2            #路由id号,和主服务器必须不同(删除vrrp_strict行)

}


vrrp_instance VI_1 {

   state BACKUP            #状态:BACKUP备   MASTER主

   interface ens33

   virtual_router_id 51

   priority 99                #优先级:备比主要小

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.8.254        #虚拟路由ip,公共ip

   }

}

保存退出

启动服务:

   systemctl restart keepalived

   systemctl enable keepalived


(3)查看虚拟ip(漂移ip地址)

ip a show dev ens33


(4)复制lb1(192.168.8.10)关于nginx的配置到lb2(192.168.8.40)

现在lb2安装nginx:yum -y install nginx

在lb1上scp复制nginx的所有配置:

   scp -rp /etc/nginx/*  root@192.168.8.40:/etc/nginx

然后,在lb2上启动nginx服务:

   systemctl restart nginx

 

(5)客户端修改hosts文件,访问验证(访问成功,关闭主服务器,再访问)

vim /etc/hosts

修改为:

192.168.8.254  blog.benet.com

保存退出


3.高可用裂脑

   高可用节点之间互相失去联系,自认为自己是主服务器,就会出现多主现象,即裂脑现象

 裂脑出现的原因:

   心跳线松动或网卡故障

   服务器硬件故障,崩溃

   节点服务器开启防火墙,却没有做vrrp例外

   nginx服务死掉,不会出现裂脑现象,但整个集群都无法正常运作


(1)检测裂脑脚本(在备用服务器:192.168.8.132运行)

vim split_brain.sh

#!/bin/sh

while true

do

ping -c 2 -W 3 192.168.8.10 &> /dev/null

if [ $? -eq 0 -a `ip add|grep 192.168.8.254|wc -l` -eq 1 ]

 then

   echo "split brain....."

else

   echo "HA is ok"

fi

sleep 5

done

保存退出

chmod +x split_brain.sh

source split_brain.sh


开启防火墙验证:systemctl start firewalld

解决因为防火墙出现的裂脑现象:

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0  --destination 224.0.0.18 --protocol vrrp -j ACCEPT

firewall-cmd --reload


(2)解决nginx故障造成群集无法工作

编辑nginx监控脚本

vim /sh/check_nginx_proxy.sh

#!/bin/bash

killall  -0  nginx

if  [ $? -ne 0 ];then

 systemctl stop keepalived

fi


chmod  +x  /sh/check_nginx_proxy.sh


添加脚本追踪模块到keepalived配置文件

vim /etc/keepalived/keepalived.conf

global_defs {

  router_id lb1

}

vrrp_script check_nginx_proxy {

       script “/sh/check_nginx_proxy.sh”

       interval 2

       weight 5

       }

vrrp_instance VI_1 {

   state MASTER

   interface ens33

   virtual_router_id 51

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.1.254

   }

   track_script {

       check_nginx_proxy

   }

}

保存退出

重启服务:systemctl restart keepalived


(3)主服务器添加计划任务

crontab -e

* * * * * /bin/bash /sh/check_nginx_proxy.sh


(4)主服务器关闭nginx,测试keepalived地址漂移


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
9月前
|
负载均衡 网络协议 算法
一文读懂什么是Nginx?它能否实现IM的负载均衡?
Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡方案,从某种意义上来讲,Nginx几乎是低成本、高负载Web服务端代名词。 如此深入人心的Nginx,很多人也想当然的认为,在IM或消息推送等场景下是否也能使用Nginx来解决负载均衡问题? 另外,即时通讯网的论坛和QQ群里也经常有人问起,Nginx是否能支持TCP、UDP、WebSocket的负载
256 4
|
6月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
206 21
|
6月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
193 14
|
6月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
260 11
|
8月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
501 5
|
8月前
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
11月前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
756 9
|
11月前
|
负载均衡 算法 应用服务中间件
Nginx的负载均衡
Nginx 是一款高性能的Web服务器与反向代理服务器,支持负载均衡功能,能有效提升系统性能与可靠性。其负载均衡策略包括基于轮询和权重的分配方法,以及IP哈希、最小连接数等算法,可根据实际需求灵活选择。
372 5
|
11月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
698 3
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
283 2