NSD练习册

更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
nginx如何实现四层负载?
Nginx的四层静态负载均衡需要启用ngx_stream_core_module模块
默认情况下,ngx_stream_core_module是没有启用的,需要在安装Nginx时,添加--with-stream配置
参数启用
配置HTTP负载均衡时,都是配置在http指令下,配置四层负载均衡,则是在stream指令下,结构如下
所示.stream {
Upstream mysql_backend {
Server 192.168.175.100:3306 max_fails=2 fail_timeout=10s weight=1;
Least_conn;
}
Server { #监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp;
Listen 3307; #失败重试 proxy_next_upstream on;
Proxy_next_upstream_timeout 0;
Proxy_next_upstream_tries 0; #超时配置 #配置与上游服务器连接超时时间,默认60s
Proxy_connect_timeout 1s; #配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超
时,将自动断开连接 #即连接存活时间,通过它可以释放不活跃的连接,默认10分钟 proxy_timeout 1m;
#限速配置 #从客户端读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_upload_rate 0; #从
上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_download_rate 0; #上游服务器
Proxy_pass mysql_backend;
}
}
使用Nginx的四层动态负载均衡有两种方案:使用商业版的Nginx和使用开源的nginx-stream-upsync-
Module模块。注意:四层动态负载均衡可以使用nginx-stream-upsync-module模块,七层动态负载均
衡可以使用nginx-upsync-module模块。
Squid、Varinsh、Nginx 有什么区别?
Nginx本来是反向代理/web服务器,用了插件可以做做这个副业(缓存服务器)。但本身支持的特性
不是很多,只能缓存静态文件
Varinsh 和squid是专业的cache服务,而nginx这些需要使用第三方模块
Varnish本身在技术上的优势要高于squid,它采用了可视化页面缓存技术。
在内存的利用上,Varnis h比 Squid 具有优势,性能要比 Squid 高。
还有强大的通过 Varnish 管理端口,可以使用正则表达式快速、批量地清除部分缓存
Varnish 是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的。
要做 cache 服务的话,我们肯定是要选择专业的 cache 服务,优先选择Squid 或者 Varnish37. nginx是如何处理http请求的
四个步骤:
读取解析请求行;
读取解析请求头;
开始最重要的部分,即多阶段处理;
Nginx把请求处理划分成了11个阶段,也就是说当nginx读取了请求行和请求头之后,将请求封装
了结构体ngx_http_request_t,然后每个阶段的handler都会根据这个ngx_http_request_t,对请
求进行处理,例如重写uri,权限控制,路径查找,生成内容以及记录日志等等;
最后将结果放回给客户单。
也可以这么回答:
首先,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的
Master 进程里面先初始化好这个监控的Socket(创建 S ocket,设置 addr、reuse 等选项,绑定到
指定的 ip 地址端口,再 listen 监听)。
然后,再 fork(一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为子进
程 )出多个子进程出来。
之后,子进程会竞争 accept 新的连接。此时,客户端就可以向 nginx 发起连接了。当客户端与
Nginx进行三次握手,与 nginx 建立好一个连接后。此时,某一个子进程会 accept 成功,得到这个
建立好的连接的 Socket ,然后创建 nginx 对连接的封装,即 ngx_connection_t 结构体。
-接着,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。
最后,Nginx 或客户端来主动关掉连接,到此,一个连接就寿终正寝了。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万
时就有进程可能超过10240了,这时会返回502错误。
(4. use epoll
(5. worker_connections 65535
每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为
Worker_processes*worker_connections。
(6. keepalive_timeout 60;
(7.
Client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k
(8. open_file_cache max=65535 inactive=60s;
这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,
Inactive 是指经过多长时间文件没被请求后删除缓存。
(9. open_file_cache_valid 80s;
这个是指多长时间检查一次缓存的有效信息。
(10. open_file_cache_min_uses 1;
Open_file_cache 指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件
描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。46. Tomcat你做过哪些优化
(1. Tomcat的运行模式 : bio,nio, apr
一般使用nio模式,bio效率低,apr对系统配置有一些更高的要求
(2. 关键配置
MaxThreads: 最大线程数,默认是200,
MinspareThread: 最小活跃线程数,默认是25
Maxqueuesize: 最大等待队列个数
(3. 影响性能的配置:
Compression 设置成on,开启压缩
禁用AJP连接器: 用nginx+Tomcat的架构,用不到AJP
EnableLookups=false 关闭反查域名,直接返回ip,提高效率
DisableUploadTimeou=false上传是否使用超时机制
AcceptCount=300 , 当前所有可以使用的处理请求都被使用时,传入请求连接最大队列长队,超过
个数不予处理,默认是100
Keepalive timeout=120000 场链接保持时间
(4. 优化jvm
/bin/catalina.sh
-server:jvm的server工作模式,对应的有client工作模式。使用“java -version”可以查看当前工作
模式
-Xms1024m:初始Heap大小,使用的最小内存
-Xmx1024m:Java heap最大值,使用的最大内存。经验: 设置Xms大小等于Xmx大小
-XX:NewSize=512m:表示新生代初始内存的大小,应该小于 -Xms的值
-XX:MaxNewSize=1024M:表示新生代可被分配的内存的最大上限,应该小于 -Xmx的值
-XX:PermSize=1024m:设定内存的永久保存区域,内存的永久保存区域,VM 存放Class 和 Meta
信息,JVM在运行期间不会清除该区域
-XX:MaxPermSize=1024m:设定最大内存的永久保存区域。经验: 设置PermSize大小等于
MaxPermSize大小
-XX:+DisableExplicitGC:自动将System.gc( ) 调用转换成一个空操作,即应用中调用System.gc( )
会变成一个空操作,避免程序员在代码里进行System.gc( )这种危险操作。System.gc( )
除非是到了万不得也的情况下使用,都应该交给 JVM。