日了狗了,最近一家面试都没有啊,就特么一场笔试,还不给劳资消息,至今0 offer,唉。真没有学习的兴趣了,特别烦,我好特么想堕落一段时间,可是我不敢,由于我工做还没找到。我就想要进入运维行业都这么难,我付出太多了。话是那么说,校招不成功,找实习生门槛低点,呵呵,不甘心啊, 别人都能随便拿10k左右,我当特么个实习生也就3k左右,唉!我早就意识到工做问题,咋现在仍是这么被动啊...html
一、详细描述mysql主从复制的方式?(相似跟DRBD高可用的协议类型)前端
答:(1)同步复制(C协议:sync):只有在本地和远程磁盘都肯定写入已完成时,主节点才会认为写入完成。master的变化,必须等待slave-1,slave-2,...,slave-n完成后才能返回。这样显然不可取,也不是MYSQL复制的默认设置。好比,在WEB前端页面上,用户增长了1条记录,须要等待很长时间。python
(2)异步复制(A协议:aysnc):只要主节点完成本地写操做就认为写操做完成,而且复制的数据包会被存储在本地的TCP发送缓存中。master只须要完成本身的数据库操做便可,至于slaves是否收到二进制日志、是否完成操做,不用关心。MYSQL的默认设置。mysql
(3)半同步复制(B协议):当本地磁盘的写已经完成,而且复制的数据包已经到达对应从节点,此时主节点才认为磁盘写已经完成。master只保证slaves中的一个操做成功,就返回,其余slave无论。linux
二、MySQL一主多从模式下,读写分离的原理。(一说到这种问题,最好脑子里有个拓扑图,这样好描述一些,放慢节奏)nginx
答:当代理组件mysq-proxy收到了前端应用程序(好比Java解释器、PHP解释器)的SQL语句请求时,若是是insert/update/delete,那么交给Master来进行写操做,若是是select操做,将读的任务交给一个调度器能够是HAProxy(但不能是LVS,由于LVS仅仅支持对http、mail的分发),该调度器负责选取必定的算法后,如轮询方式,将读操做交给众多slave中的一个slave来进行处理。在这里,mysql-proxy仅仅充当SQL路由的角色,并不进行执行相应的SQL语句。web
三、若是mysql-proxy , director,甚至master他们中的某些挂了怎么办?面试
答:这些都容易成为单点故障,毫无疑问要对mysql-proxy、dircetor进行高可用,再搭建一台服务器充当备份角色,当遭遇不测的时候,进行keepalived自动主备切换。若是master挂了,先让slave-1提高为新主,其余的slave都重新主复制日志,也可能其余slave一直都是slave-1(新主)复制日志。算法
四、解释一下在Linux中的负载均衡是什么?sql
答:当一台服务器的性能达到极限时,咱们可使用服务器集群来提升网站的总体性能。那么,在服务器集群中,须要有一台服务器充当调度者的角色,用户的全部请求都会首先由它接收,调度者再根据每台服务器的负载状况将请求分配给某一台后端服务器去处理。
五、若是对Mysql服务器进行优化?(马哥总结,不细分读仍是写)
答:从数据库层面、从操做系统层面(内存、CPU多线程、本地磁盘IO、网络带宽)、从服务器硬件层面(固态硬盘以及RAID阵列)
这里从数据库层面的优化分析以下:
(1)是否正确设定了表结构的相关属性,尤为是每一个字段的字段类型是否为最佳。同时,是否为特定类型的工做组织使用了合适的表及表字段也将影响系统性能,好比,数据频繁更新的场景应该使用较多的表而每张表有着较少字段的结构,而复杂数据查询或分析的场景应该使用较少的表而每张表较多字段的结构等,则进行分表分库
(2)是否为高效进行查询建立了合适的索引。
(3)是否为每张表选用了合适的存储引擎,并有效利用了选用的存储引擎自己的优点和特性。好比是否支持事务的特性
(4)是否基于存储引擎为表选用了合适的行格式(rowformat)。例如,压缩表在读写操做中会下降I/O操做需求并占用较少的磁盘空间,InnoDB支持读写应用场景中使用压缩表,但MyISAM仅能在读环境中使用压缩表。
(5)是否使用了合适的锁策略,如在并发操做场景中使用共享锁,而对较高优先级的需求使用独占锁等。同时,还应该考虑存储引擎所支持的锁类型,诸如表锁、行锁、页锁等等
(6)对my.cnf配置文件参数设置是否为InnoDB的缓冲池、MyISAM的键缓存以及MySQL查询缓存设定了合适大小的内存空间,以便可以存储频繁访问的数据且又不会引发页面换出。好比能够设置缓冲提升其写性能,当客户端提交一个数据时,并非当即把数据写入到硬盘中,而是放在内存缓冲区里,等缓冲区积累必定程度后,再把它复制到硬盘上,这样能够避免频繁对磁盘IO,那么咱们所作的步骤就是对配置文件设置buffer区的缓冲大小。
七、Squid代理服务器的工做原理,有何意义?反向代理是什么?透明代理又是什么?(忽然反应貌似上次是想问我这个东西)
答:原理:(1)ClientA发出资源请求,根据客户端上的代理服务配置设置,将请求发送到代理服务器。 (2)而后由代理服务器表明客户端发出请求,假如代理服务器将请求发给了一个web主机
(3)Web主机将资源返还给代理服务器
(4)代理服务器将资源返再还给客户端,并将内容存储在缓存中
(5)ClientB请求与ClientA相同的资源,和ClientA同样,也会将请求发送到代理服务器 (6)代理服务器已有该资源内容,因此代理服务器直接将资源内容发送给客户端ClientB
意义:解决了内网计算机没法上网的问题,由于共享Squid外网IP因此节约了IP地址资源,屏蔽了内网网站的信息,必定程度保证了安全性,同时,它会缓存内容以供下次访问,因此节省了带宽,也提升了访问效率。再者,Squid具备acl和http_access访问控制属性,相似于防火墙的功能。
反向代理:代替互联网上的计算机来访问内网的服务器资源。
透明代理:客户端只须要把网关设置为代理服务器的内网网卡IP便可,无需再作其余设置,即可以经过代理服务器帮它从Internet上取回网页资源。
八、代理服务器除了Squid还有哪些?Squid的端口号是多少来着?透明代理实验你是如何测试的?作Squid服务的时候还须要作哪些服务?
答:Nginx也有很好的代理缓存功能,windows系统可使用proxy-server等;Squid内网端口监听3128,外网监听端口80。
测试:外网web服务器设置一个测试网页,在内网浏览器访问一个外网IP地址(在虚拟机中是能够设置一个公有IP的,也能正常使用),因而返回显示一些访问页面则Squid实验成功,而且使用http-watch插件安装在火狐浏览器上,进行http报文字段分析,第一次访问没有一个hit字段,第二刷新就会有一个hit命中字段,说明缓存成功。然后,查看这个外网web服务器的访问日志以及squid的访问日志。其中web服务器的日志会显示Squid的外网IP,同时,Squid会显示内网客户端的IP。
还须要DNS服务,客户端输入一个URL,没了网关,找不到DNS服务器,只有请求代理服务器,因此只能让代理服务器请求外部并完成域名解析的任务。
九、mysql主从复制的优势、读写分离的场合?
答:复制优势:(1) 若是主服务器出现问题, 能够快速切换到从服务器提供的服务;
(2)能够在从服务器上执行查询操做, 下降主服务器的访问压力;
(3) 能够在从服务器上执行备份, 以免备份期间影响主服务器的服务。
分离场合:读操做(访问)很是大的时候
十、Suqid有几种日志、Squid.conf中设置visable_hostname有何意义?
答:(1)access.log、cache.log、store.log
(2)指定主机名,当访问出错时返回给客户端页面包含的名字,从而帮助管理员分析哪一个代理服务器挂了。
十一、日志过多了怎么办?用什么东西分析日志?如何打印今天访问的日志?日志总共1000行,如何查看其中的200-500行日志?
答:写脚本日志切割,每个月一个目录,而后天天是它的子目录;或者logrotate日志轮替,多了的日志不要了。Awstatus专业日志分析工具。grep 关键字,好比今天的日期 grep 24/Aug/2016 access.log 。
head -500 access.log |tail -301
十二、rsync+inotfiy是双向同步仍是单向同步?有几种工做模式?
答:双向同步。shell模式和deamon模式
1三、为何要在LVS的后端真实服务器上抑制ARP应答?请解释下ARP工做原理?
答:Director Server和全部的Real server共享VIP,若是有客户端PC发出ARP请求其相应的VIP地址时,Director Server与全部Real server 都作应答的话,就出现问题了,所以,须要禁止Realserver的响应ARP。
ARP原理:源IP地址是本身的,目的IP地址是对方的,源MAC地址是本身的,目的MAC地址为空,以广播形式从本地网卡发送出去,当该数据帧到达对方节点时,对方拆包比对目的IP是不是本身的,若是是,则填上本身的MAC地址,并以单播形式返回过去,若是目的IP和本身网卡的IP不同,则丢弃。
1四、Http1.1相比Http1.0作了哪些改进?(老男孩老师说运维面试官不喜欢问这个,开发、CTO总监喜欢问这个,因缺思婷,我之后面试别人也不问这个,太特么偏了)
答:(1)可扩展性、缓存处理、带宽优化、持久链接、HOST头、错误通知、消息传递、内容协商等方面。
(2)http1.0状态响应码有16个,http1.1状态码有24个(不知道)
1五、http状态码502与504的区别?
答:(1)502是网关错误,504是网关超时
(2)两者很相似,502是代理服务器后面的真实服务器节点配置出了问题或者已经挂掉了,而504是代理服务器后面的真实服务器已通过载,它要处理的请求报文实在太多,忙不过来了。
(3)502还有一种状况就是nginx与fastcgi即PHP进程配合的不恰当,致使返回502网关错误。
1六、http应答报文格式是什么?空行有何做用?
答:起始行:协议版本号、状态码、状态信息;
响应头部:资源文件类型、文件长度、日期等
空行 ##用来告知对端,此报文头部到此截止已经没有了
报文实体内容 ##就是真实的网页代码
1七、什么是MySQL多实例,如何配置MySQL多实例?
答:(1)定义:是在同一台机器上面开启多个不一样的端口,运行多个MySQL服务进程,这些MySQL多实例公用一套安装程序。
(2)应用场景:a、一台物理数据库服务器支撑多个数据库的数据服务,为提升mysql复制从机的复制效率,采用多实例部署
b、异地灾难备份
(3)做用:有效利用服务器的资源,单个服务器资源有剩余时,能够充分利用剩余的资源提供更多的服务.
(4)配置方式:a、使用多个配置文件启动不一样的进程来实现多实例,这种方式的优点逻辑简单,配置简单,缺点是管理起来不太方便。
b、经过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每一个实例的配置不太方便,优势是管理起来很方便,集中管理。
参考文档:http://www.codesec.net/view/194257.html
1八、如何增强MySQL数据的安全,请你给出可行的思路?(TMD这个话题老生长谈啊)
答:(1)从操做系统层面,iptables、TCP_wrappers干掉不可信任的外部网络
(2)从数据库层面,对用户的受权加以严格控制,防止内网搞破坏
(3)使用chroot,改变mysql日志文件或数据文件的根目录。
(4)移除或禁用~/.mysql_history文件,由于此文件记录了用户操做命令信息,若是被***获取,便能知道数据库的表结构
参考文档:http://soft.chinabyte.com/database/76/12788576.shtml
1九、工做中数据库被误操做执行了一个删除的SQL语句,你如何完整恢复丢失的数据?(这问题颇有思考意义,工做中若是删了,呵呵,完蛋了)
答:(1)若是是Innodb引擎,而且没有设置自动提交,那么能够经过rollback进行事务回滚
(2)从binlog日志中进行恢复,可是要求日志格式是row的,就麻烦了。
参考文档:http://www.cnblogs.com/gomysql/p/3582058.html
20、SQL语句如何优化?(再整理一遍,劳资为何就是记不住!)
答:(1)合理添加索引(他妈的这句我记得最清楚)
(2)使用内链接代替子查询,避免使用多表查询
(3)select 使用明确的字段用来代替*号
(4)对表使用别名
(5)用Where 子句替换HAVING 子句由于HAVING 只会在检索出全部记录以后才对结果集进行过滤
2一、MySQL Sleep线程过多如何解决?
答:现象:MySQL里大量的Sleep线程等待,没法及时释放链接,拖累系统性能。
缘由:(1)使用了太多持久链接
(2)程序中,没有及时关闭mysql链接
(3)数据库查询不够优化,过分耗时。
影响:严重消耗mysql服务器资源(主要是cpu, 内存),并可能致使mysql崩溃
解决:在配置文件中对wait_timeout值设置的小一点,超过这个时间,就断开Mysql的链接。对于正在运行中的生产服务器,在不能中止服务状况下,以root用户登陆到mysql,执行:set global wait_timeout=100
参考文档:http://blog.sina.com.cn/s/blog_78ecbe330101332k.html
2二、mysql读写分离架构中,若是Master挂了,那么slave上会不会写数据,从而致使数据不一致?
答:不会。master挂了之后,mysql-proxy可以进行健康检查,而且不会再容许有写的请求发过来。
2三、timw_wait的做用?(至关于问2MSL的做用)
答:(1)使本次TCP链接中全部网络分组均死掉,避免干扰下一次链接
(2)是ACK报文尽量到达目的端。
2四、你知道运维中的常见故障有哪些?
答:(1)命令所在的安装包丢失,没法继续操做命令
(2)启动配置文件丢失,致使不能重启系统
(3)服务器硬件改动进入了emergency紧急模式
(4)bash文件损坏致使用户没法正常登录
(5)Nginx负载均衡器出现故障
(6)文件变成了只读模式
(7)错综复杂的网络不通问题
2五、http协议中,put与post有何区别?
答:(1)PUT一般指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器本身决定。
(2)传输数据的大小不一样,前者通常是提交表单的数据,后者通常是附件类的大文件。
2六、NFS的工做原理?
答:1)首先服务端启动RPC,并开启111端口
2)服务端启动NFS,并向RPC注册端口信息
3)客户端启动RPC的主程序portmap端口映射,向服务端的111端口创建TCP网络链接,
4)服务端的RPC把NFS随机端口信息反馈给给客户端。
5)客户端经过该NFS随机端口(小于1024)来创建和服务端的链接,以便进行数据的传输
2七、traceroute 的原理。(UDP数据报的意思仅仅是说上层运输层封装的是UDP,在这里它是三层数据报文)
答:源端向目的端发送不一样TTL(time to live )的UDP用户数据报,第一个TTL为1,在通过第一个路由器后,TTL减1,因而变为0,该路由器就会丢弃
该数据包,并向源端发送一个ICMP超时报文,然后,源端发送一个TTL为2的数据包,再通过2个路由器后,TTL又等于0因而又发给源端ICMP超时报文,当到达最后目的主机时,TTL是1,这时候TTL再也不减1,主机也不转发数据包,可是因为IP数据包封装的是没法交付的UDP用户数据报,因而目的主机会返回给源端ICMP不可达的差错报告报文。
##在这里主要的疑惑是UDP用户数据包怎么就没法交付了,网上的说法是 “前提是发出的UDP数据报中要求的端口在目的主机上没有进程在使用。若是目的主机上正好有进程在使用这个端口,接收这个包并按正常方式处理,这样traceroute就收不到"端口不可达"的错误了。为了不出现这种状况,UDP数据报的端口很高(书中的实现是初始值33435,之后每发送一次再加1,端口号最大能够到65535)”。 actually,我也不太清楚。
参考文档:http://blog.csdn.net/hero456123/article/details/11472363
2八、编写脚本实现如下功能;
天天早上5点开始作备份;要备份的是/var/mylog里全部文件和目录能够压缩进行备份;备份能够保存到别一台FTP即器上19二、16八、一、2 ,FTP账号aaa,密码 bbb;而且天天的备份文件要带有当天的日期标记
答:
#!/bin/bash ##file:log_bak_ftp.sh BACKDIR=/var/mylog TIME=`date +%F` tar zcf $BACKDIR_$TIME.tar.gz $BACKDIR ##ftp上传 ftp -n <<EOF open 192.168.1.2 user aaa bbb bin ##必需要设置为二进制模式,否则会传输ASCII码的东西,是没法解压的,记住了! put $BACKDIR_$TIME.tar.gz bye EOF ##crontab -e: 0 5 * * * /bin/bash /root/log_bak_ftp.sh
2九、编写Nginx日志切割脚本,并测量运行时间。
答:
#!/bin/bash ##切割日志,/usr/lcoal/nginx/logs/access.logs/access.log LOG=/usr/lcoal/nginx/logs/access.log mkdir /newlog_dir TIME=${date -d "yesterday" +%Y%m%d} Year=${date -d "yesterday" +%Y} Month=${date -d "yesterday" +%Y%m} mkdir -p /newlog_dir/Year/Month if [ -d /newlog_dir -a -d /newlog_dir/Year -a /newlog_dir/Year/Month ] ##若是全部目录都存在 then tar -zcf /newlog_dir/Year/Month/ginx_access_log.${TIME}.tar.gz $LOG if [ $? -eq 0];then rm -f $LOG echo "---$TIME---备份成功---">>/newlog_dir/log_event.txt fi fi ##查看时间time bash /cut_log.sh
优秀参考文档:http://www.tianfeiyu.com/?p=2230
30、如何杀掉linux系统中全部的带“nginx”字段的进程,请给出详细命令?(批量杀死相关进程的缘由)
答:(1)ps aux |grep "nginx" |grep -v grep |xargs kill -9
(2)for KILLPID in `ps aux|grep "nginx"|grep -v grep |awk '{print $2}' `
do
kill -p $KILLPID
done