负载均衡
-
新建3台Linux虚拟机 ip分别设为192.168.0.199、192.168.0.200、192.168.0.201和一台Nginx192.168.0.198
-
在本地访问的电脑hosts文件中配置
192.168.0.198 www.nginxdemo.com
-
nginx配置文件upstream
upstream nginxdemo{
server 192.168.0.199:8080;
server 192.168.0.200:8080;
server 192.168.0.201:8080;
keepalive 32; # 保持长连接 提高吞吐量 耗内存
}
server {
listen 80;
server_name www.nginxdemo.com;
location / {
# proxy_pass传递到upstream 后面固定http:// upstream后面的名字
proxy_pass http://nginxdemo;
proxy_http_version 1.1; #keepalive配置
proxy_set_header Connection "";#keepalive配置
}
}
- 不配置策略默认使用轮询策略
- 配置加权轮询
upstream nginxdemo{
server 192.168.0.199:8080 weight=1; #weight 不写默认权重为1
server 192.168.0.200:8080 weight=2;
server 192.168.0.201:8080 weight=5;
}
-
upstream 指令参数:
- max_conns 限制最大连接数 默认值0不限制 多个工作线程对应多个
- slow_start 适用于有权重的负载均衡 一段时间后启动 慢慢启动 假如weight=10 slow_start会慢慢从1开始到10,不适用于单个服务器(商业版)
- down 标志该服务器状态不可用
- backup 备用机 只有在其他服务器全挂了才会被访问
- max_fails 最大失败次数 达到最大 nginx会把服务器剔除 默认值1
- fail_timeout 时间段 与max_fails配合使用 默认值15
fail_timeout=15s;max_fails=2 代表15秒内达到2次失败则达成宕机条件,15秒后可继续请求如果fails则一直循环直到服务器正常
-
ip_hash模式 一个ip一直访问一台服务器 保证Session不会丢失。中途移除服务器只能用down来标志
upstream nginxdemo{
ip_hash;
server 192.168.0.199:8080;
server 192.168.0.201:8080;
}
- url hash模式
upstream nginxdemo{
hash $request_uri;
server 192.168.0.199:8080;
server 192.168.0.200:8080;
}
- least_conn模式 哪台服务器上的连接数少就请求哪一台
upstream nginxdemo{
least_conn;
server 192.168.0.199:8080;
server 192.168.0.200:8080;
}
缓存
- expires 指令 针对客户浏览器
- expires [time] 过期时间
location / {expires 10s;}
- expires @[time] 到晚上22点30分时间过期
location / {expires @22h30m;}
- expires -[time] 缓存提前过起
- expires epoch 不设置缓存 no-cache
- expires off 默认值 不使用nginx缓存机制
- expires max 永不过期
- expires [time] 过期时间
- 上游服务器缓存
#proxy_cache_path 设置缓存保存的目录 开辟5M共享内存空间 max_sizes设置缓存大小,inactive超过30s缓存自动清理,use_temp_path关闭临时目录
proxy_cache_path /usr/local/nginx/upstrean_cache keys_zone=mycache:5m max_size=1g inactive=30s use_temp_path=off;
server {
listen 80;
server_name www.nginxdemo.com;
proxy_cache mycache; #开启缓存
#针对200 和 304的状态码过期时间设置成8小时
proxy_cache_valid 200 304 8h;
location / {
proxy_pass http://nginxdemo;
}
常见CentOS配置问题
- 虚拟机centos出现no package ifconfig available
yum install net-tools.x86_64 - 网络默认是共享网络 改成wifi
- PD版本虚拟机固定ip配置修改/etc/sysconfig/network-scripts/下面的网络配置文件ifcfg-eth0(名字可能不一样)
DEVICE="eth0"
IPV6INIT="yes"
BOOTPROTO="static" # 这个改成static 默认是dhcp
UUID="1b29923b-7898-4abb-ba15-e70d645b0433"
ONBOOT="yes" # 这个yes
IPADDR=192.168.0.201 # ip地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.0.1 #网关
DNS1=192.168.0.1 # DNS 与网关一致
- service network restart 重启生效
- 关闭防火墙 systemctl stop firewalld.service(暂时关闭) systemctl disable firewalld.service(关闭后使用永久关闭)