Nginx负载均衡

负载均衡

       多台服务器以对称方式组成一个服务器集合,每台服务器具有等价地位,单独对外服务。通过分担技术,将外部发送来请求均匀分配到对称结构中某一台服务器,接受到请求服务器独立回应客户。可以快速获取重要数据,解决大量并发访问。

web负载均衡办法
               1)用户手动选择
               2)DNS轮询方式(同一域名多个IP,随机解析到其中一个IP)
                             缺点:可靠性低    负载分配不均衡(服务器不能充分利用)
               3)四/七层负载均衡设备
                             1)物理层(物理联网媒介)
                             2)数据链路层(控制网络层和物理层之间通信。协议:DSLC,HDLC,PPP,STP,帧中继)
                             3)网络层(路由选择。协议:IP,IPX,RIP,OSPF)
                             4)传输层(缓冲作用,提供可靠,无误传输。TCP,UDP,SPX)
                             5)会话层
                             6)表示层
                             7)应用层(Telnet,FTP,HTTP,SNMP)
                  第四层负载均衡将一个internet上合法IP映射多个内部服务器IP(虚拟IP)地址,对每次TCP请求动态使用其中一个IP(主要用第四层交换机)
                  第七层负载均衡对访问流量高层控制,适合HTTP服务器集群。
                  设备:1)硬件四/七层负载均衡交换机
                        2)软件四层负载均衡(LVS)
                        3)软件七层负载均衡(基于HTTP反向服务器,nginx)
               4)多线多地区智能DNS解析与混合负载均衡方式

Nginx作为负载均衡

      nginx负载均衡模块upstream,主要分配方式:   1)轮询(默认方式)   每个请求按时间顺序逐一分配到不同的后端服务器

                                                    2)weight     指定轮询几率,也就是访问率

                                                     3)ip_hash  请求结果按照ip的hash结果分配后端服务器,保证同一个ip总是访问同一个服务器

                  实例:

                            upstream  tomcat_server  {

                                        server  127.0.0.1:8080  down;  #标记服务器不参与负载,通常和ip_hash一起使用

                                        server  127.0.0.1:8081  weight = 5; #服务器负载的权重

                                        server  127.0.0.1:8082 ;

                                        server  127.0.0.1:8083  backup;  #如果所有的非备份服务器都宕机或繁忙,则使用本服务器(无法和ip_hash指令搭配使用)

                                        server  127.0.0.1:8084  max_fails=3  fail_timeout=30s;  #允许请求失败次数      失败后,暂停的时间  (只有一台服务器时候,max_fails和fail_timeout参数不会被处理

                            }

                           upstream tomcat_server {

                                         ip_hash;

                                         server  127.0.0.1:8080;

                                         server  127.0.0.1:8081 down;

                                         server  127.0.0.1:8083;

                            }

                           可以使用nginx+keepalived实现双机的高可用,但还没有实验过。

定时切割nginx日志的脚本

               创建脚本: vi  vi /usr/local/nginx/sbin/cut_nginx_log.sh

               输入内容:                                   

                                      #!/bin/bash

                                      # This script run at 00:00

                                      # The Nginx logs path
                                          logs_path="/usr/local/nginx/logs/"
                                          mkdir  -p  ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
                                          mv  ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log

                                          kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

               设置crontab,每天凌晨00:00切割nginx访问日志
                        crontab -e

                        输入以下内容:

                        00 00 * * * /bin/bash  /usr/local/nginx/sbin/cut_nginx_log.sh

内核参数优化

              vi /etc/sysctl.conf

              net.ipv4.tcp_max_tw_buckets = 6000   //timewait的数量,默认是180000。
              net.ipv4.ip_local_port_range = 1024    65000    //允许系统打开的端口范围。
              net.ipv4.tcp_tw_recycle = 1  //启用timewait快速回收。
              net.ipv4.tcp_tw_reuse = 1  //开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。
              net.ipv4.tcp_syncookies = 1   //开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理。
              net.core.somaxconn = 262144 //web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511。
              net.core.netdev_max_backlog = 262144  //每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
              net.ipv4.tcp_max_orphans = 262144    //系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
              net.ipv4.tcp_max_syn_backlog = 262144    //记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。
              net.ipv4.tcp_timestamps = 0    //时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
              net.ipv4.tcp_synack_retries = 1    //为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。
              net.ipv4.tcp_syn_retries = 1   //在内核放弃建立连接之前发送SYN包的数量。
              net.ipv4.tcp_fin_timeout = 1   //如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
              net.ipv4.tcp_keepalive_time = 30    //当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。

              /sbin/sysctl -p  (使设置生效)

PS:感谢网络,感谢搜索,感谢富有分享精神的人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值