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:9001 或 52: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