Tomcat面试题+http面试题+Nginx面试题+常见面试题
Tomcat面试题
1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种connector运行模式(服务的请求方式)? 答:三种。修改它的运行模式需要在主配置文件中找到connector字段中的protocol进行修改
这三种不同运行模式的性能相差很大,具体如下:
BIO:阻塞型I/O操作,一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,默认使用这种方式。
NIO:基于缓冲区,能提供非阻塞I/O操作,和传统的BIO相比,具备更好的抗并发性能;
APR(Apache portable run-time libraries):简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和相应性能,也是Tomcat运行高并发的首选模式,在Linux中需要安装APR动态库才可以使用这种模式。
复制
3、如何避免用户在访问一个不存在的页面时,Tomcat将其详细版本信息返回给用户。 答:解决办法就是将404状态码进行重定向,以便我们自定义返回的页面信息。 4、优化tomcat可以从哪些方面着手?
答:
1、内存优化;
2、线程池的优化
3、禁用DNS查询;
4、开启日志切割功能;
5、关闭404错误返回的版本信息;
复制
————————————————————————————————————————————————————————————————————————————————————————————————————————
httpd服务面试题
1、请说一下你对httpd服务的了解? 答:Apache是一个模块化服务,支持的模块比较多,采用servlet处理模型,同步阻塞模型,工作模式多变,对于高并发的场景处理速度会比较慢,运行稳定。支持异步读写,可以通过正则表达式做动静分离。
2、httpd服务的三种工作模式你了解多少? 答:httpd有三种工作模式。
prefork:预派生子进程 prefork模式可以算是很古老但是很稳定的模式。httpd服务在刚启动时,就会fork出一些子进程(默认为5个),一个子进程对应一个线程,然后等待request进来,并且总是试图保持一些空闲的子进程,之所以这样做,是为了减少频繁创建和销毁进程的开销。在同一个时间点内,一个线程只能处理一个进程。
worker工作模式 worker模式和prefork模式比起来,是使用了多进程+多线程的模式,它也是预先fork了几个子进程,每个子进程能够生成一些服务线程和一个监听线程,该监听线程及接入请求并传递给服务线程处理和应答。worker工作模式占用的内存较少,在高并发下表现还算优异。不过必须要考虑线程安全的问题,因为多个子进程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,也许中间几乎没有请求,这是就会发生阻塞,线程被挂起,需要一直等待到超时才会被释放。如果过多的线程,就这样被占据,也会导致在高并发场景下的无服务线程可用。(该问题同样会发生在prefork模式)。
event工作模式 这是Apache最新的工作模式,它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,线程被长期被占用的的资源浪费问题。
event工作模式中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候偶,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理多个请求了,实现异步非阻塞。
event工作模式在遇到某些不兼容的模块时,它会失效,并退回到worker模式,一个工作线程处理一个请求。官方自带的模块,全部都是支持event工作模式的。
3、可以从哪几个方面着手优化httpd? 合理配置其进程及线程数; 开启httpd的deflate压缩功能; 开启expires缓存功能; 禁止httpd进行目录遍历; 隐藏httpd的版本信息; 开启日志切割功能; 配置防盗链; ————————————————————————————————————————————————————————————————————————————————————————————————————————————
Nginx面试题
1、缺省安装的Nginx+php-fpm环境,假设用户浏览一个耗时的网页,但是却在服务端渲染页面的中途中关闭了浏览器,那么请问服务端的PHP脚本是继续执行还是退出执行? 答:正常情况下,如果client异常退出了,Server端的程序还是会继续执行,直到与IO进行了两次交互操作。Server端发现client端已经断开连接,这个时候会出发一个User_abort,如果这个没有设置ignore_user_abort,那么这个php-fpm的程序才会被中断。
2、nginx是如何实现高并发的? 答:nginx之所以可以实现高并发,与它采用的epoll模型有很大的关系。epoll模型采用异步非阻塞的事件处理机制。这种机制可让nginx进程同时监控多个事件。
简单来说,就是异步非阻塞,使用了epoll模型和大量的底层代码优化。如果深入一点的话,就是nginx的特殊进程模型和事件模型的设计,才使其可以实现高并发。
进程模型
它是采用一个master进程和多个worker进程的工作模式。
1、master进程主要负责收集、分发请求。当一个请求过来时,master拉起一个worker进程负责处理这个请求。;
2、master进程也要负责监控worker的状态,保证高可靠性;
3、worker进程议案设置为和CPU核心数一致或者其二倍。nginx的worker进程和Apache的不一样。apache的进程在同一时间只能处理一个请求,所以它会开启很多个进程,几百甚至几千个。而nginx的worker进程在同一时间可以处理的请求数只受内存限制,因此可以处理更多请求。
复制
事件模型 nginx是异步非阻塞的。
一个master进程,多个worker进程,每个worker进程可以处理多个请求。每进来一个request,都会有worker进程去处理。但不是全程的处理,那么处理到的程度就是可能发生阻塞的地方,比如向后端服务器转发request,并等待请求返回。那么,在等待期间,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是它就去休息了,此时,如果再有request进来,它就可以很快再按这种方式处理。而一旦后端服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。 由于nginx的的这个工作性质决定了每个请求大部分的生命都是在网络传输中,所以实际上花费在nginx 服务器上的时间并不多,这就是它几进程就能解决高并发的秘密所在。
3、已知nginx和php-fpm安装在同一台服务器上,nginx连接php-fpm有两种方式:一种是类似127.0.0.1:9000的TCP socket,另一种是类似/tmp/php-fpm.sock的Unix domain socket,请问如何选择?需要注意什么? Unix domain socket的流程不会走到TCP那层,直接以文件的形式,以stream socket通信。如果是TCP Socket,则需要走到IP层。说的通俗一点,追求可靠性就是选择TCP(需要占用一个端口,更稳定,如:127.0.0.1:9000),追求高性能就是Unix Socket(不需要占用端口,更快,但可靠性不如TCP的方式)。
4、nginx和Apache的区别? 两者最核心的区别在于apache是同步多进程模型,一个request对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。
一般来说,需要性能的web服务,用nginx,如果不需要性能只求稳定,更考虑Apache,后者的各种模块实现的比前者好很多,epoll网络IO模型是nginx处理性能高的根本,但并不是所有情况下epoll大获全胜的,如果本身提供静态服务的只有几个文件,apache的select模型或许比epoll更高性能。当然,这只是一个假设,真正还需要实测了再说。
更通用的方案是,前端nginx抗并发,后端apache集群,配合起来会更好。
5、nginx的调度算法有哪些?
sticky:通过nginx-sticky模块,来实现cookie黏贴的方式将来自同一个客户端的请求发送到同一个后端服务器上处理,这样一定程度上可以解决多个后端服务器的session会话同步的问题;
round-robin(RR):轮询,每个请求按时间顺序依次分配到不同的后端服务器,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响;
weight:轮询权重,weight的值越大分配到的访问概率就越高,主要用于后端每台服务器性能不均衡的情况下,或者仅仅为在主从的情况下设置不同的权重,达到合理有效的利用主机资源。
least_conn:请求被发送到当前活跃连接最少的realserver上,会考虑到weight的值;
ip_hash:每个请求按照IP的哈希结果分配,使来自同一个IP的访客固定访问后端服务器,可以有效的解决动态网页存在的session共享问题。
fair:比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面的大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,相应时间短的优先分配。nginx本身不支持fair,如果需要使用这种调度算法,则必须安装upstream_fair模块。
url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到后端服务器,可以进一步提高后端缓存服务器的效率。同样,nginx本身不支持url_hash,如果需要这种调度算法,则必须安装nginx的hash软件包。
复制
6、nginx负载均衡调度状态 在nginx upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态。
常用的状态有:
down:表示当前的server暂时不参与负载均衡;
backup:预留的备份机器。当其他所有的非backup机器出现故障或者繁忙的时候,才会请求backup机器,因此这台机器的访问压力最低;
max_fails:允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstraem模块定义的错误;
fail_timeout:请求失败超时时间,在经历了max_fails次失败后,暂停服务的时间。max_fails和fail_timeout可以一起使用。
复制
7、如何查看nginx已添加的模块?如果需要添加某个模块,应该如何实现? 查看已添加的模块:nginx -V; 如果需要添加某个模块,需要将工作目录切换至nginx的源码包中,执行“nginx -V”命令查看之前配置时的选项进行复制,然后增加需要添加的模块配置项,进行配置并编译,将新生成的nginx命令覆盖掉原有的nginx命令,然后重载nginx服务,即可实现在线添加模块。
8、可以从哪些方面来优化nginx服务?
配置nginx的proxy缓存;
对静态页面开启压缩功能,如br压缩或者gzip压缩;
调整nginx运行工作进程个数,最多开启8个,8个以上话性能就不会再提升了,而且稳定性变得更低,所以8个足够用了;
调整nginx运行CPU的亲和力;
修改nginx最多可打开的文件数,若超过系统限制的最多打开文件数(ulimit -n命令查看系统的最多打开文件数),还需要修改系统默认的文件数;
修改单个worker的最大连接数;
开启高效传输;
设置连接超时时间,以便保护服务器资源,因为建立连接也是需要消耗资源的;
优化fastCGI的一个超时时间,也可以根据实际情况对其配置缓存动态页面;
expires缓存调优,主要针对图片、css、js等元素更改较少的情况下使用。
配置防盗链;
优化内核参数,如进程可以同时打开的最大句柄数;开启tcp重用机制,以便允许TIME_WAIT sockets重新用于新的TCP连接....还有好多,记不住。
复制
————————————————————————————————————————————————————————————————————————————————————————————————
Linux运维常见面试题
1、什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术 运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等 2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维 开发运维:是给应用运维开发运维工具和运维平台的 应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查 系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等 总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑 开发运维、应用运维和系统运维他们的工作是环环相扣的 ——————————————————————————————————————————————————————————————————————————————————
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的? 游戏运营要做的一个事情除了协调工作以外 还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划 ———————————————————————————————————————————————————————————————————————————————————————— 3、现在给你三百台服务器,你怎么对他们进行管理? 管理3百台服务器的方式: 1)设定跳板机,使用统一账号登录,便于安全与登录的考量。 2)使用saltstark、ansiable、puppet进行系统的统一调度与配置的统一管理。 3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录 ———————————————————————————————————————————————————————————————————————————————————————————————————————————— 4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点 RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据 还有一个大功能,多块盘放在一起可以有冗余(备份) RAID整合方式有很多,常用的:0 1 5 10 RAID 0,可以是一块盘和N个盘组合 其优点读写快,是RAID中最好的 缺点:没有冗余,一块坏了数据就全没有了 RAID 1,只能2块盘,盘的大小可以不一样,以小的为准 10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高 RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘 特点,读写性能一般,读还好一点,写不好 冗余从好到坏:RAID1 RAID10 RAID 5 RAID0 性能从好到坏:RAID0 RAID10 RAID5 RAID1 成本从低到高:RAID0 RAID5 RAID1 RAID10 单台服务器:很重要盘不多,系统盘,RAID1 数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10) WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘) 有多台,监控、应用服务器,RAID0 RAID5 我们会根据数据的存储和访问的需求,去匹配对应的RAID级别 ————————————————————————————————————————————————————————————————————————————————————————————————————————— 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择? LVS: 是基于四层的转发 HAproxy: 是基于四层和七层的转发,是专业的代理服务器 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的转发所以只能做端口的转发 而基于URL的、基于目录的这种转发LVS就做不了 工作选择: HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做 在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大 选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器 配置简单,所以中小型企业推荐使用HAproxy ———————————————————————————————————————————————————————————————————————————————————————————————————————————————— 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择? Squid、Varinsh和Nginx都是代理服务器 什么是代理服务器: 能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资 源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接 收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你 如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网 区别: 1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业 但是本身不支持特性挺多,只能缓存静态文件 2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成 3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术 在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。 还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存 它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的 4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境 工作中选择: 要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 7、Tomcat和Resin有什么区别,工作中你怎么选择? 区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少 最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些 但稳定性和java程序的兼容性,应该是比resin的要好 工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 8、什么是中间件?什么是jdk? 中间件介绍: 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源 中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯 是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口 但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递 通过中间件,应用程序可以工作于多平台或OS环境。 jdk:jdk是Java的开发工具包 它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 9、讲述一下Tomcat8005、8009、8080三个端口的含义? 8005==》 关闭时使用 8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口 8080==》 一般应用使用 —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 10、什么叫CDN? 即内容分发网络 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到 最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度 —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 11、什么叫网站灰度发布? 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式 AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B 如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 12、简述DNS进行域名解析的过程? 用户要访问 www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 13、RabbitMQ是什么东西? RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器 消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用 队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用 消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地 ———————————————————————————————————————————————————————————————————————————————————————— 14、讲一下Keepalived的工作原理? 在一个虚拟路由器中,只有作为MASTER的VRRP(虚拟路由冗余协议)路由器会一直发送VRRP通告信息, BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息) 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性 由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息 ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
15、讲述一下LVS三种模式的工作过程? LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式) 一、NAT模式(VS-NAT) 原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址 并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP 将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址 缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈 因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时 大量的数据包都交汇在负载均衡器那,速度就会变慢! 二、IP隧道模式(VS-TUN) 原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大 那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过 负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持 IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项 优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户 所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量 这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。 缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling” (IP Encapsulation)协议,服务器可能只局限在部分Linux系统上 三、直接路由模式(VS-DR) 原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应 所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR 而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致) 并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户 则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端 由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域 也可以简单的理解为在同一台交换机上 优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端 与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。 缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟? mysql的innodb如何定位锁问题: 在使用 show engine innodb status检查引擎状态时,发现了死锁问题 在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎) innodb_trx ## 当前运行的所有事务 innodb_locks ## 当前出现的锁 innodb_lock_waits ## 锁等待的对应关系 mysql如何减少主从复制延迟: 如果延迟比较大,就先确认以下几个因素: 从库硬件比主库差,导致复制延迟
主从复制单线程,如果主库写并发太大,来不及传送到从库
就会导致延迟。更高版本的mysql可以支持多线程复制 慢SQL语句过多
网络延迟
master负载 主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层 slave负载 一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器 只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数: –slave-net-timeout=seconds 单位为秒 默认设置为 3600秒 #参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据 –master-connect-retry=seconds 单位为秒 默认设置为 60秒 #参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试 通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟 MySQL数据库主从同步延迟解决方案 最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行 还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 17、如何重置mysql root密码? 一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法: 1、 在SHELL环境下,使用mysqladmin命令设置: mysqladmin –u root –p password “新密码” 回车后要求输入旧密码 2、 在mysql>环境中,使用update命令,直接更新mysql库user表的数据: Update mysql.user set password=password(‘新密码’) where user=’root’; flush privileges; 注意:mysql语句要以分号”;”结束 3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。 grant all on . to root@’localhost’ identified by ‘新密码’; 二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下: 1、 关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务) 2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务 /usr/local/mysql/bin/mysqld_safe –skip-grant-table & 3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码 #mysql -u root Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’; Mysql> flush privileges; —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 18、lvs/nginx/haproxy优缺点 Nginx的优点是: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构 它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一 Nginx单凭这点可利用的场合就远多于LVS了。 2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一 相反LVS对网络稳定性依赖比较大,这点本人深有体会; 3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来 LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。 4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。 5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了 如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。 6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器 LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。 7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器 8、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了 不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃 9、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多 Nginx的缺点是: 1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点 2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测 不支持Session的直接保持,但能通过ip_hash来解决 LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器 它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability) LVS的优点是: 1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生 这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低 2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西 所以并不需要太多接触,大大减少了人为出错的几率 3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案 如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived 4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。 5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等 LVS的缺点是: 1、软件本身不支持正则表达式处理,不能做动静分离 而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在 2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了 特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了 相对而言,Nginx/HAProxy+Keepalived就简单多了。 HAProxy的特点是: 1、HAProxy也是支持虚拟主机的。 2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导 同时支持通过获取指定的url来检测后端服务器的状态 3、HAProxy跟LVS类似,本身就只是一款负载均衡软件 单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的 4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡 对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡 5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种: ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的; ② static-rr,表示根据权重,建议关注; ③leastconn,表示最少连接者先处理,建议关注; ④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似 我们用其作为解决session问题的一种方法,建议关注; ⑤ri,表示根据请求的URI; ⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name; ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求; ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。