用server1来负载均衡后端的2和3
调度器对后端的realserver没有健康检查,并不知道realserver出现问题
DR模式不足
1、LVS-RS必须在同一个VLAN
2、RS上绑定VIP,风险大
NAT模式不足
RS/ROUTER配置策略路由,需要原路进返
TUNNEL模式
1、RS配置复杂(IPIP模块)
2、RS上绑定VIP,风险大
主要增加了一个ip头,做了一个IP封装
第四种模式:FULLNAT,默认下不支持,需要编译内核。实现LVS-RealServer间跨vlan通讯,并in/out流都经过LVS。
DR模式中最重要的是更改MAC地址,经过LVS,就把MAC地址更改成了后端的rs。通过二层链路层直接转发到后端。
缺点:第四种模式解决了以下问题
LVS各转发模式运维成本高
缺乏攻击防御模块
--SYNPROXY:synflood攻击防御模块
-=其他TCP FLAG DDOS攻击防御策略
性能无法线性扩展
--Cluster部署模式
FULLNAT的主要思想:
引入local address(内网地址),cip-vip转换为lip->rip,而lip和rip均为IDC内网IP,可以跨vlan通讯
RS不知道客户端地址
七层
haproxy、nginx
四层做流量尽摊。
在数据链路层,没有IP,只做流量转发
CIP Common Industrial Protocol, 通用工业协议
RIP是Routing Information Protocol(路由信息协议)
./configure --with 默认情况下这些是没有的,就是不加,–without 默认是加的 --prefix=/usr/local/nginx指定安装路径
make编译,编译完成之后,在nginx-1.20.2/objs/中,
执行make install要在makefile同路径下执行,执行结束之后,这个路径就不用了,要执行
cd /usr/local/nginx/
做软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
which nginx
/usr/local/bin/nginx
nginx -t #检查语法
nginx
ps ax #启动
nginx
ps stop #关闭
netstat -antlp
curl localhost
在主机上
curl 172.25.254.1
默认访问的是server1上的
cd html/
ls
cat index.html
nginx配置负载均衡
cd /usr/local/nginx/
ls
cd conf/
pwd
vim nginx.conf #主配置文件
nginx 对后端有自动进入健康检测
定义负载均衡器的名称,并且设置了相应的server地址
nginx -t #检测
如果语法没有问题
nginx -s reload
nginx出现了问题
Address already in use
用lsof -i:80查看占用了80端口的PID,使用kill命令杀死
kill PID
做解析
在本机
vim /etc/hosts
172.25.254.1 www.westos.org
出现502时,表示没有可用后端
docs.nginx.com
server localhost backup
只有当所有的server全挂了以后,才会访问backup
server 172.25.254.2:80 weight=2; #权重,会连续执行2次
ip_hash时根据客户端ip来进行负载均衡,相同客户端Ip过来访问的时候,调度到同一个后端服务器处理。
server 172.25.254.2:80 down; 服务器手动下线#
CDN:分布式集群,主要做缓存,1、加速客户端的访问,也是反向代理机制。2、
client -> dns -> CDN(cache) ->server ->CDN(cache) -> client
server拿到的是CDN地址,拿不到客户端ip地址的,
sticky cookie不支持
问题1:如何支持STICKY COOKIE
1.扩充调度算法
重新编译
cd nginx-1.20.2/
ls
下载最新版本:nginx-goodies-nginx-....
unzip nginx-go....
在源码路径需要清理。
cd /nginx/nginx-1.20.2/
ls
make clean
./configure 之前的那些条件之上再加上--add-module=nginx-goodies-nginx-....绝对路径
vim auto/cc/gcc
关掉DEBUG
隐藏版本
vim src/core/nginx.h
编译之前停掉nginx
nginx -s stop
make #编译
cd objs/
du -h nginx
cd nginx /usr/local/nginx/sbin/
cd /usr/local/nginx/sbin/
ls
su -h nginx
cd /usr/local/nginx/conf/
ls
vim nginx.conf
nginx -t
nginx
通过ip访问的话
vim nginx.conf
四层LVS之后,可以直接将流量分到nginx这里
lvs负载到nginx,nginx再调度后端的apache,apache属于web层,也是就是realserver,接入层到lamp。
nginx也可以作为一个web服务器使用。
cd /usr/local/nginx/conf/
la
vim nginx.conf
pa axu
useradd nginx
id nginx
问题2:设置开机自启动
baidu搜nginx systemd
cd
ll #查看根目录
cd /usr/lib/systemd/system
vim nginx.service
启动脚本
systemctl daemon-reload
ps ax
systemctl stop nginx
nginx -s stop
systemctl start nginx
ps axu
systemctl reload nginx
cs /usr/local/nginx/conf/
vim nginx.conf
worker_process 是按照CPU的核心计算的
一个CPU核心绑一个worker
nginx -s reload
vim nginx.conf
linuxepoll模型
并发连接数,每个worker同时可以处理的,可以进行以上处理,reload也没有问题,但是并发如果超过了1024,日志中会有大量的报错
ulimit -a
建立一个连接就会消耗掉linux内核的一个文件描述符。
kernel>system>app
sysctl -a|grep file
#内核中的值是根据操作系统的内存来进行设置
free -m
vim /etc/security/limits.conf
#这个文件即改即生效,nofile 后面的数字与nginx.conf保持一致。
问题:nginx平滑升级
内存热生效:改完nginx.conf不用reload就可以直接生效了
下载 nginx-1.21.1.tar.gz
在nginx开启的情况下
tar zxf nginx-1.21.1.tar.gz
cd /nginx-1.21.1/
ls
vim auto/cc/gcc
./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --add-module=nginx-goodies-nginx-....绝对路径
make
cd objs/
ll nginx
du -h nginx
进入原始的nginx
cd /usr/local/nginx/sbin/
ls
cp nginx nginx.old
cd -
ls
pwd
alias
\cp -f nginx /usr/local/nginx/sbin/ #\转义,-f强制 覆盖
cd /usr/local/nginx/sbin/
ls
ll
ps ax|grep nginx #获得当前nginx主进程(master)PID
kill -USR2 主进程PID
ps ax|grep nginx
curl -I 172.25.254.1
kill -WINCH 旧主进程PID
ps ax|grep nginx
curl -I 172.25.254.1/localhost
版本回退
还原nginx程序:\cp -f nginx.old nginx
唤醒原程序:kill -HUP 原进程PID
ps ax|grep nginx
回收新版本的worker进程:kill -WINCH 新进程PID
关闭新版本主进程:kill -QUIT 新进程PID
ps ax|grep nginx
kill -9 新进程PID #这步可不做
问题:设置并发连接数
cd .. #返回上一级目录
cd /usr/local/nginx/
ls
vim nginx.conf
html#默认发布目录
cd html/
mkdir download
cd download/
ls
在目录中放一张照片
控制下载的并发
cd /usr/local/nginx/conf/
vim nginx.conf
在主机上测试
ab -c10 -n10 http://172.25.254.1/down/vim.jpg #ab压测 -c并发连接数、-n次数
在server1
cat /usr/local/nginx/logs/access.log
nginx -s reload
http状态码
cd /usr/local/nginx/conf/
vim nginx.conf
nginx -s reload
在本机上做测试
ab -c1 -n10 http://172.25.254.1/down/vim.jp
在server1
cd /usr/local/nginx/conf/
vim nginx.conf
控制请求数,排队的命令
nginx -s reload
在本机上做测试
ab -c1 -n10 http://172.25.254.1/down/vim.jp
也可以
curl -I 172.25.254.1/download/vim.jpg
以下实验和上述一样的操作,只是改变里面的东西
限制流量,控制带宽
自动索引
缓存可以降低网站带宽,加速用户访问
日志轮询
server1
data +%F -d -1day #午夜12点
cd /usr/local/nginx/logs
vim /opt/nginx_log.sh
chmod +x /opt/nginx_log.sh
crontab -e
crontab -l
ls
ll
查看nginx日志
下载goaccess-1.4.tar.gz
tar zxf goaccess-1.4.tar.gz
cd goaccess-1.4/
./configure --enable-utf8 --enable-geoip=legacy
yum search geoip
rpm -q GeoIP.x86_64
下载和查找出来的版本一样的GeoIP
rpm -ivh 安装包
yum install ncurses-devel -y
make
which goaccess
echo $PATH
cd
goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
想要这个命令在后台运行的话,ctrl+z
bg
在主机上测试
ab -c1 -n100 http://172.25.254.1/index.html
ab -c10 -n200 http://172.25.254.1/report.html
禁用不必要的日志
访问172.25.254.1/status
对于上一张图片的操作日志不必要访问
站点目录和文件的限制
中文乱码
cd /usr/local/nginx/htm/
vim index.html
vim nginx.conf
限制Ip
cd /etc/pki/tls/certs/
ls
ll makefile
make cert.pem
cn
shaanxi
xi'an
westos
linux
server1
root@example.com
ll cert.paem
mv cert.pem /usr/local/nginx/conf/
nginx -t
nginx -s reload
netstat -antlp
curl -K https://172.25.254.1 #K加密
vim nginx.conf