Nginx与Keepalived

nginx 安装略过

# 依赖包
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel  

常用命令

./nginx			  # 启动
./nginx -c xxx/nginx.conf # 指定启动时使用的nginx配置文件
./nginx -v  	  # 查看版本号
./nginx -s reload # 重加载
./nginx -s stop   # 关闭

配置文件 三部份组成

1、全局块
    worker_processes 1;  	 # 迸发数量 最好和CPU数量一致 将负载发挥到最佳
    
2、events块
    worker_connections 1024;  # 网络连接数
    
3、http块(两部分,1:http,2:sever)
    3.1 http部分
        include 其他配置文件
        
    3.2 server部分

反向代理

4.1 实例1
    配置文件中
    http {
    ...
    server{
        listen      80;  			# 监听端口
        server_name 10.248.55.51;   # 服务所在的主机IP
        
        location / {
            proxy_pass http://10.248.55.50:8080     # 用10.248.55.50:8080 代理 10.248.55.51:80 上的服务
        }
    }
    ...
    }
    
4.2 实例2   
    要求:访问10.248.55.50:80/a/  跳转到  10.248.55.51:9001
          访问10.248.55.50:80/b/  跳转到  10.248.55.52:9002
    http {
    ...
    server{
        listen 80;
        server_name 10.248.55.50;
        
        location ~ /a/ {
            proxy_pass 10.248.55.51:9001;   # 如果 10.248.55.50:80/a/.... 就跳转到 10.248.55.51:9001
        }
        
        location ~ /b/ {
            proxy_pass 10.248.55.52:9002;   # 如果 10.248.55.50:80/b/.... 就跳转到 10.248.55.52:9002
        }
        
    }
    ...
    }

负载均衡

要求:访问 10.248.55.50:80 时,请求分到 51:900152:9002
   
    http{
    ...
        upstream myserver{              # 固定格式 upstream servername
            ip_hash;                    # hash方式将请求分配给不同的主机
            server 10.248.55.51:9001;   # 固定格式 server + ip:port
            server 10.248.55.52:9002;   
        }
        
        server{
            listen      80;
            server_name 10.248.55.50;
            
            location / {
                proxy_pass http://myserver;   # 代理的为服务名
            }
        }        
    ...
    }

nginx分配策略

 1、轮询分派(默认 loop)
        upstream myserver{
            server 10.248.55.51:9001;      # 按照默认轮询的方式进行负载,
            server 10.248.55.52:9002;      # 假设后端server down掉,能自己剔除。
            server 10.248.55.53:9003;      # 缺点:可靠性地,负载不均衡,机器性能可能不一致
        }
        
2、权重(weight)
        upstream myserver{
            server 10.248.55.51:9001 weight = 5;    # 考虑1和2的机器配置低,或者1和2的性能不如3的时候
            server 10.248.55.52:9002 weight = 5;    # 这样将3的权重设置大一些,更多的请求会被分配到3上。
            server 10.248.55.53:9003 weight = 10;   # 为1和2分担更多的请求。
        }
    
3、ip_hash
        upstream myserver{
            ip_hash;
            server 10.248.55.51:9001;       # 这里的IP说的是客户端的出口IP,这样经过 des_server_ip = hash(ip)
            server 10.248.55.52:9002;       # 相应的ip在没有down掉的情况下,肯定会hash到固定的ip上。
            server 10.248.55.53:9003;
        }
    
4、URL哈希
        upstream myserver{
            server 10.248.55.51:9001;       # 按照URI进行哈希,固定的URI Hash到固定的server上。
            server 10.248.55.52:9002;  
            server 10.248.55.53:9003;
            hash $request_uri;
            hash_method crc32;
        }

动静分离

要求: 将动、静请求进行分离,动:比如数据库查询、页面访问   静:图片..
http{
...
    server {
        listen      80;
        server_name 10.248.55.50;
        
        location /www/ {
            root /data/;     
        }
        
        location /image/ {
            root /data/;
            autoindex   on;  # 当访问静态文件时,像列表形式一样展现出来
        }            
    }        
...
}

高可用 nginx + keepalived

# 依赖包
yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel net-snmp-devel -y

要求: 2台主机,2个nginx,2个keeplived(主(10.248.55.51)一备(10.248.55.52))
作用:
      - nginx将请求进行负载处理
      - keeplived 监测nginx是否死掉,进行nginx的请求分离

 8.1 keepalived 的配置文件在 /etc/keepalived/keepalived.conf  # 默认
     以MASTER为例,BACKUP修改  state MASTER 、 priority 80 、router_id LVS_2  #    LVS_2 需要在 vim /etc/hostname 中修改,如127.0.0.1  LVS1 
     
     vim /etc/keepalived/keepalived.conf
        global_defs {           # 全局配置信息,用于邮件邮件发送
            notification_email {
                xxx@qq.com                
            }
            notification_email_from keepalived@domain.com ## 发件人(可不配)
            smtp_server 10.248.55.xxx                     ## 发件服务器(可不配)
            smtp_connect_timeout 30                       ## 服务器连接超时时间(可不配)  
            router_id LVS_1                               ## 路由器标志,主从不能相同 (也可以是IP) 
            # vrrp_strict                                 ## 注释掉vrrp_strict
        }
        
        vrrp_script check_nginx {  
            script "/etc/keepalived/nginx_check.sh"       ## 检测 nginx 状态的脚本路径
            interval 2                                    ## 检测时间间隔
            weight -20                                    ## 条件成立 权重减20
        }

        vrrp_instance VI_1 {  
            
            state MASTER                # 设置当前主机为主节点,如果是备用节点,则设置为BACKUP             
            interface ens33             # 指定HA监测网卡,可以用ifconfig查看来决定设置哪一个                
            virtual_router_id 100       # 虚拟路由标识,主备机必须相同            
            priority 100                # 设置优先级,确保主节点的优先级高过备用节点,比如(主:100,备:80)                     
            advert_int 2                # 用于设定主备节点间同步检查时间间隔       
                    
            authentication {            # 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致  
                auth_type PASS          
                auth_pass 1234          
            }       
                    
            track_script {              # 集群资源监控,组合vrrp_script进行  
                check_nginx         
            }       
    
            virtual_ipaddress {         # 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中  
                10.248.55.222           # 当状态切换到BACKUP时,此IP会自动从系统中删除  可以通过命令ip add查看切换后的状态  
            }                           # 虚拟ip配置完之后就用它访问 

启动 nginx 、keepalived

先启动nginx 后启动 keepalived

./nginx
systemctl start keepalived.service

没可用测试

在浏览器中输入 http://10.248.55.222 可看到nginx的主面页
此时查看主nginx的IP(51)后会有(命令 ip addr )  scope global ens33

当把主nginx(51) kill 后,再访问 http://10.248.55.222 仍然可以看到nginx的主面页
此时查看备nginx的IP(52)后会有(命令 ipaddr )   scope global ens33

nginx 原理

https://www.bilibili.com/video/BV1zJ411w7SV?p=17

问题连接数worker_connection

q1: 发送请求,占用了work的几个连接数?             
r1:2个或4个  
    当client --> nginx -->  client  为2个
    当client --> nginx --> tomcat --> nginx -->  client  为4个

q2: nginx有一个master,有4个worker,每一个worker支持最大的连接数为1024,支持的最大并发数是多少?
r2: 普通的静态访问最大并发数为: worker_connections * worker_processes / 2
    如果是HTTP作为反向代理来说,最大并发数量为: worker_connections * worker_processes / 4 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值