nginx反向代理、负载均衡、高可用配置
一、nginx简介
1、nginx是高性能的http和反向代理服务器,处理高并发能力强,能经受高负载的考验。
2、nginx配置文件内容包含三部分
1)全局块:配置服务器整体运行的配置指令,比如worker_processes----1;是处理并发的配置,一般和CPU数相同。
2)events块:影响nginx服务器与用户的网络连接,比如worker_connections----1024;是每个worker_processes支持最大的连接数为1024。
3)http块:还包含两部分,http块和server块。
3、nginx原理
1)是一个master下多个worker的模式,其中每个worker都是独立的进程,当master发布请求任务的时候,worker来争抢请求任务。
2)一个master多个worker的好处:好处一是可以使用nginx -s reload热部署;好处二是每个worker都是独立的进程,如果其中一个worker出现问题,其他worker独立,继续进行请求任务的争抢,实现请求过程,不会造成服务中断。
3)worker数目一般设置和CPU数相同比较合适。
4)发送一个请求,如果nginx作为反向代理服务器时,占用worker4个连接数;如果nginx作为普通的静态访问服务器时,占用2个连接数。
5)普通的静态访问最大并发数是:worker_connection*worker_processes/2;
作为反向代理时最大并发数是:worker_connection*worker_processes/4
二、反向代理
客户端访问反向代理服务器,反向代理服务器再把请求转发到指定网站。暴露的是反向代理服务器的地址,隐藏了真实服务器的地址。
1、访问本机80端口,实际跳转到8080端口
主要配置http块内server块,如下图:
此时浏览器访问192.168.17.129,实际访问的是本机的8080端口(nginx会把请求反向代理到本机的8080端口)。
2、根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001
主要配置http块内server块,如下图:
测试结果如下图:
三、负载均衡
负载均衡:增加服务器的数量,然后将请求分发到各个服务器,将原来请求集中到单个服务器的情况,改为将请求分发到多个服务器,也就是将负载分发到多个服务器。
主要配置http块,如下图:
第一步,在http块内部server块上方加入以下配置:
第二步,在http块内的server块内加入以下配置:
此时,访问192.168.17.129,会轮换展示8080和8081端口的页面
现在介绍一下nginx在负载均衡时分配请求到服务器的策略,如下
1、轮询(默认):每个请求按时间顺序,逐一分配到不同的服务器,如果其中的服务器宕掉了会自动剔除。
2、weight权重:默认为1,权重越高,被分配到的请求越多。
3、ip_hash:每个请求按照访问端ip的hash结果进行分配,这样每个用户固定访问一个服务器,解决session跨服务器的问题。
4、fair第三方:按服务器的响应时间来分配,响应时间短的优先分配。
四、配置高可用的集群
高可用:准备两台或多台nginx服务器,通过keepalived进行主备服务器配置并添加检测脚本进行监听,当主服务器宕掉时,自动切换到备服务器。
1、配置高可用的准备工作
1)准备两台或多台服务器,比如192.168.17.129 和 192.168.17.131;
2)在两台或多台服务器中安装nginx;
3)在两台或多台服务器中安装keepalived;
安装keepalived命令:yum install keepalived –y
安装成功后会在/etc/里生成keepalived目录,内有文件keepalived.conf
2、开始配置主备服务器
1)修改/etc/keepalived/keepalivec.conf 配置文件
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id nginx_master # 设置nginx master的id,在一个网络应该是唯一的
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" #检测脚本位置
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 #网卡
virtual_router_id 51 # 虚拟路由编号,主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
}
}
上面红色虚拟ip地址可以进入keepalived目录,执行ip a获得
2)在上面绿色标注位置在/usr/local/src加入检测脚本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #重启nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败
killall keepalived
fi
fi
3)把两台或多台服务器nginx和keepalived启动
4)测试:在浏览器输入虚拟ip可以正常访问;把主服务器nginx和keepalived停止,再输入虚拟ip也可以访问,则表示成功。