美文网首页运维相关自我总结
备份文档——nginx负载均衡

备份文档——nginx负载均衡

作者: 如歌丨如歌 | 来源:发表于2020-02-12 20:25 被阅读0次
nginx负载均衡企业应用
1..根据用户访问的uri信息进行负载均衡(动静分离的架构)
2..根据用户的agent(浏览器客户端是什么)信息进行负载均衡(手机和客户端显示不同页面)


克隆web01 创建web02 web03

1..负载均衡概念说明:
    什么是服务器集群
        完成相同任务或工作的一组服务器(web01 web02 web03 --- web集群)
        高性能,高可用,价格有效性,可压缩性
    什么是负载均衡
        1..实现用户访问请求的调度分配
        2..实现用户访问压力分担
    什么是反向代理
        外网 ---> (eth0 外网)代理服务器(eth1 内网) ---> 公司网站服务器web(内网)
        外网用户(客户端) --- 代理服务器(服务端)
        代理服务器(客户端) --- web服务器(服务端)

    什么是正向代理
        内网主机 ---> (内网卡)代理服务器(外网卡) --- 互联网 --- web服务器(日本)
        
2..软件安装:
    以两台lb服务器为例实现负载均衡
    
    使用nginx服务实现负载均衡功能:
    (1) 下载安装nginx ---> vim /etc/nginx/nginx.conf ---> user nginx ---> user www
    (2) 编写负载均衡文件,以default.conf文件作为模板编辑
        [root@lb01 ~]# grep -Ev "^$|#" /etc/nginx/conf.d/default.conf > lb.conf
        
        使用模块: Module ngx_http_upstream_module ---- upstream       负载均衡
                         ngx_http_proxy_module    ---- procxy_passs   反向代理
        upstream:

        Syntax:     upstream name { ... }
        Default:    —
        Context:    http    ---只能放在http区块,主配置文件中有,或者放在lb.conf的server前面
        
        ngx_http_proxy_module:

        Syntax:     proxy_pass URL;
        Default:    —
        Context:    location, if in location, limit_except
        在localtion下添加.不需要有站点目录,即,root那一行
        
        vim /etc/nginx/conf.d/lb01.conf
        
            upstream oldboy {               -----定义oldboy集群
                server 10.0.0.7:80;
                server 10.0.0.8:80;
                server 10.0.0.9:80;
            }
            ======定义可以将请求分配给哪些web服务器===

            server {
                listen       80;
                server_name  www.oldboy.com;
                location / {
                proxy_pass http://oldboy;   ----oldboy相当于集群名称
                }   
            }   
        
        浏览器访问却是bbs?如何解决?
        通过抓包发现,通过负载均衡后,请求变成了oldboy,所以找不到,直接返回第一个
        解决方法: 调用proxy_set_header Host $host 模块
        
            [root@lb01 conf.d]# vim lb.conf 
                server 10.0.0.9:80;
            }
            server {
                listen       80;
                server_name  www.oldboy.com;
                location / {
                proxy_pass http://oldboy;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;              ####
                }
            }
                    
PS: 优化 ---> 有一台服务器宕机,会造成恰好访问到这台服务器上的时候,会出现错误
    解决办法: proxy_next_upstream 模块实现
Syntax:     proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
Default:        

proxy_next_upstream error timeout;      
        
Context:    http, server, location      
        
    server {
    ...
    proxy_next_upstream error timeout http_404 http_502 http_403;
    ...
    }


扩展: 根据用户终端不同(手机,电脑)进行分配服务器

利用if语句和 http_user_agent 模块实现.

[root@lb01 conf.d]# vim lb.conf
upstream web {
    server 10.0.0.8:80;
}
upstream mobile {
    server 10.0.0.7:80;
}
upstream default {
    server 10.0.0.9:80;
}
server {
    listen       80;
    server_name  www.oldboy.com;
    location / {
    #如果是iPhone手机访问
    if ($http_user_agent ~* iphone) {
    proxy_pass http://mobile;
    }
    #如果是chrome
    if ($http_user_agent ~* chrome) {
    proxy_pass http://web;
    }
    proxy_pass http://default;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_next_upstream error timeout http_404 http_502 http_403;
    }
}


高可用服务: 可以使两台lb服务器一主一备,防止出现单点问题
安装服务: keepalived 
    vim /etc/keepalived/keepalived.conf

实现高可用服务只需下面几项配置,其他的可以删除;

==============================lb01配置信息==============================
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb01
#   vrrp_skip_check_adv_addr
#   vrrp_strict
#   vrrp_garp_interval 0
#   vrrp_gna_interval 0
}

vrrp_instance ldboy {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.0.3
    }
}

=================================lb02配置信息================================
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb02
#   vrrp_skip_check_adv_addr
#   vrrp_strict
#   vrrp_garp_interval 0
#   vrrp_gna_interval 0
}

vrrp_instance ldboy {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.0.3
    }
}

=====================================================================

高可用服务企业应用
(1) 高可用服务常见异常问题 --- 脑裂问题
        出现于原因: 高可用备服务器接收不到主服务器发送的组播包,备服务器会自动生成VIP地址.
        比如,lb02的防火墙没有关闭,会造成VIP地址保留
        物理原因: 多台高可用集群之间通讯线路出现问题 --- 心跳线
        逻辑原因: 有安全策略阻止组播包发送
        
        如何解决脑裂问题: 
            1..进行监控,发出警告
               备服务器出现VIP地址的原因
                 a 主服务器故障
                 b 脑裂出现
                 
            2..关闭其他备服务器的keepalived服务
            
(2) 实现keepalived服务自动释放VIP地址资源
    编写脚本(可加入定时任务)
    思路: 比如nginx服务停止运行,则需要停止本机的keepalived服务以释放ip,
          监控nginx服务的进程数目
          ps -ef | grep -cE '[n]ginx'

    加入到keepalived配置文件的脚本模块当中,实现自动化管理
        [root@lb01 scripts]# vim  /etc/keepalived/keepalived.conf 
        ! Configuration File for keepalived

        global_defs {
           router_id lb01
        }

        vrrp_script check_web {
        script "/server/scripts/check_web.sh"
        interval 2                                      ###执行脚本的间隔时间
        weight 2                                        ###weight参数: 权重值参数,主要用于和优先级进行运算,具体参见day44
        }

        vrrp_instance oldboy {
            state MASTER
            interface eth0
            virtual_router_id 51
            priority 150
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress {
                10.0.0.3/24
            }
            track_script {
                 check_web
            }

        }

相关文章

网友评论

    本文标题:备份文档——nginx负载均衡

    本文链接:https://www.haomeiwen.com/subject/cpzcfhtx.html