目录
2.权重:通过weight参数在轮询策略的基础上设置被访问的几率.
3.ip_hash(适合有状态的服务):指定负载均衡按照客户端ip进行分配,此策略确
保用一个ip客户端的请求始终被发送到同一台服务器节点,以保证
4.least_conn:把请求转发给连接较少的后端服务器节点,此策略适合请求处理
1.fair:按照服务器响应时间来分配请求,响应时间短的节点被优先分配
2.url_hash:按请求的url的hash结果来转发请求,使请求相同资源的请求
修改linux系统配置:vim /etc/sysctl.conf
Nginx优点:
1.高并发时响应性能好,官方描述支持5W/s的静态文件并发.
2.反向代理性能非常强(可用于负载均衡).
3.内存和cpu占用率低(为Apache的10%~20%).
4.对后端服务器又健康检查功能.
5.配置简单.
Nginx高并发处理能力原理:
Nginx采用epoll模型:epoll模型是异步非阻塞方式.epoll对于句柄事件的选择不是遍历的,以事件响应方式将发生的句柄事件选择出来,而不用遍历整个句柄链表,所以高效,
Apache采用select模型:select模型选择句柄时,是遍历所有句柄,也就是说句柄有事件响应的时候,select需要遍历所有句柄才能获取到哪些句柄有事件通知,所以低效.
安装启动Nginx:
首先在本地准备我们的挂载目录以及配置文件
将容器内的配置文件复制到本地
docker cp nginx:/etc/nginx/conf.d/default.conf /home/mynginx/nginx/conf.d
docker cp nginx:/etc/nginx/nginx.conf /home/mynginx/nginx/nginx.conf
启动nginx
docker run -d --name docker_nginx -p 8081:80 \
-v /home/mynginx/nginx/log:/var/log/nginx \ #挂载日志目录
-v /home/mynginx/nginx/conf.d:/etc/nginx/conf.d \ #挂载默认配置文件
-v /home/mynginx/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ #挂载主配置文件
-v /home/mynginx/nginx/html:/usr/share/nginx/html nginx #挂载项目目录
负载均衡配置:修改Nginx配置文件
log_format为nginx设置的日志格式:
$remote_addr:客户端地址.
$remote_user:客户端用户名称.
$time_local:访问的时间和时区.
$request:访问的URL和http协议.
$status:http请求状态.
$body_bytes_sent:发送给客户端的文件大小.
$http_referer:URL跳转来源.
$http_user_agent:用户终端浏览器的信息.
$http_x_forwarded_for:
$upstream_addr:转发到后台服务器的地址.
$upstream_status:转发到后台的状态.
$upstream_response_time:请求过程中,后台的响应时间.
$request_time:整个请求的响应时间.
5.nginx重启后,配置生效,查看nginx进程个数为4个
Nginx负载均衡策略优化:
什么是负载均衡?
是指将请求根据策略分发到多个后台tomcat节点上,减少我们后台服务器的压力.
负载均衡策略有哪几种?
1.轮询(默认方式)
max_fails与fail_timeout结合使用:如果再fail_timeout时间内,对该服务器节点的请求失败次数超过max_fails的次数,nginx会认为该节点宕机,为该节点设置down标记,下一次请求不会再分发给该节点.
2.权重:通过weight参数在轮询策略的基础上设置被访问的几率.
(各节点机器硬件配置不一致时可使用)
3.ip_hash(适合有状态的服务):指定负载均衡按照客户端ip进行分配,此策略确
保用一个ip客户端的请求始终被发送到同一台服务器节点,以保证
session会话不会失效.
4.least_conn:把请求转发给连接较少的后端服务器节点,此策略适合请求处理
时间长短不一造成服务器过载的情况.
5.第三方策略:
1.fair:按照服务器响应时间来分配请求,响应时间短的节点被优先分配
(安装第三方插件upstream_fair)
2.url_hash:按请求的url的hash结果来转发请求,使请求相同资源的请求
被转发到同一个后端服务器,这样能直接命中缓存,提高性能.
(需要hash软件包)
linux系统优化:
修改linux系统配置:vim /etc/sysctl.conf
# 当出现syn等待队列溢出时,启用cookies来处理,可防范少量syn共计
net.ipv4.tcp_syncookies = 1
#开启重用,允许将time_wait状态的sockets重新用于新的tcp连接
net.ipv4.tcp_tw_reuse = 1
#开启tcp连接中time_wait 态sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
#快速回收的时限
net.ipv4.tcp_fin_timeout = 10
#time_wait态sockets连接数量上限
net.ipv4.tc_max_tw_buckets = 1048576
#允许系统打开的端口范围
net.ipv4.ip_local_port_range = 1024 65000
#每个网络接口接收数据包的速率比内核处理这些数据包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_blacklog = 262144
#系统中最多有多少tcp套接字不被关联到任何一个用户文件句柄上
net.ipv4.tcp_max_orphans = 262144
#记录的那些尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
#为了打开对端的连接,内核需要发送一个syn报文,并附带也回应前一个syn的ack
net.ipv4.tcp_synack_retries = 1