我要特么早点看完马哥视频,我之前不至于死的那么惨啊!本以为能从事运维的话,这辈子就可以不用学编程了,实在太年轻了!哭死了,春秋大梦破灭了,啊啊啊。我现在想从事运维都难,不过确实是我没理解好,没想到对方来真的,经历的太少。希望10月份爆发一次,就1次就行!以后面试不能像背,应该像给小白讲的那样回答,可是我做不到,555...
1、将两个文件按列合并,按行合并呢?
答:行:awk ‘{print $0}‘ 1.txt 2.txt
列:paste 1.txt 2.txt
2、为什么要在Lvs的后台真实服务器上绑定VIP呢?并且是在环回口上绑定VIP呢?
答:(1)客户端发送给分发器的请求数据报文的目的IP地址是VIP,经过分发器器会根据相应的算法把请求交给后台真实的服务器处理,DR模式下只会更改目的MAC地址,而目的IP地址(即VIP)是不变的,当后端真实服务器收到该报文后发现目的地址是VIP而不是自己的真实物理接口地址,便会进行丢弃数据包,而不会响应。为了解决这个问题,所有后端真实服务器上都会绑定VIP。
(2)如果VIP都绑在所有真实服务器的物理接口上,很显然会引起IP地址冲突,是不可能正常发包的。是ARP的原因,不是交换机的MAC地址表原因
3、如何删除该目录下除某个文件以外的所有文件?
答:(1)ls|grep -v 1.txt|xargs rm ##只针对不存在递归目录的
(2)如果有递归目录,比如当前目录下有1.txt 2.txt test,在test目录下还有3.txt,4.txt 5.dir,问如何除了3.txt以外删除所有的普通文件?(因缺思婷)
答: find . ! -name "3.txt" -type f|xargs rm ##find 自动递归,!非名称为3.txt的,rm不可以使用-r参数,否则会删除5.dir目录
4、failback问题。master挂掉了,我们应该让slave顶上,一会我们修复好了master,可是如何把修复这段时间的更新数据从slave恢复到master上来呢,什么原理?(还是让我迷糊。后续看到好的资料再好好重新整理)
答:当往一台mysql服务器中写入数据时候,会把数据记录到数据文件中,并且同时记录下二进制日志中的事件。我觉得可以先把修复好的原master作为slave,把数据从新master同步过来,以后就这么反着来了。意思就是把原来的主成为从,原来的从成为主。
5、select * 和select 全部字段这2种写法有何优缺点?(貌似整理过)
答:(1)select * 需要解析数据字典,而【select 全部字段】不需要
(2)从执行效率来说,【select 全部字段】强于【select *】
(3)【select 全部字段】可以建立索引进行优化,【select * 】无法优化 (不清楚这一点)
(4)表字段改名,前者不需要修改,后者需要改
(5)【select 全部字段】的可读性比【select * 】要高
6、对于一个大型网站,lvs调度器一般为主备2台,为使其具有良好的可扩展性,那么如何使lvs变成3台、4台甚至更多台呢?
答:(1)在DNS服务器上设置多个A记录,解析域名的时候,由一个域名轮询或智能解析成多个IP地址。
(2)在LVS前端,搞一个路由器或者三层交换机,启用OSPF协议,使路由到各个lvs主机上,多达8个。(我擦,这也可以,老男孩老师厉害!)
##另外lvs是四层负载均衡,即TCP层转发,终于解惑了;Nginx是七层即http层转发
7、随着应用的日益增长,读操作很多,我们可以扩展slave,但是如果master满足不了写操作了,怎么办呢?(这回看了视频我要好好整理下,有新想法了,唉,然并卵呀,已挂)
答:(1)用固态硬盘做RAID5阵列(这个玩意能快速解决,应急支撑一段时间)
(2)根据业务逻辑,分表分库(呵,栽在这儿了,后悔没早点看视频,马哥建议没有15k以上薪水+8年DBA经验别乱拆,因为很难修复,记住了!)
(3)将mysql一主一从模型变成双主,把slave替换成master,双主模型是可以提高写性能的。比如以前Master有2000行记录,现在把master分割成1-1000行,另一台由slave提升的master负责记录第1001-2000行,这样分割,前端依然放置一台调度器相当于路由,当客户需要读取相应记录的时候,调度器做hash(object)算法,转发请求到后端数据库select。(老男孩说双主可以,而马哥又说双主不能提高写性能,因为彼此都要循环复制一次,生产环境容易不建议使用双主,因为彼此容易冲突,导致数据的不一致性)
8、孤儿进程和僵死进程的理解?会带来什么问题,怎么解决?(老是记不住这个,考上又得跪)
答:孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。
僵尸进程:(1)一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
(2)问题:如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,如果大量的产生僵死进程,
将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
(3)解决:杀死僵死进程的父进程,这样僵死进程就变成孤儿进程,最后被Init进程收养。
参考文档:http://www.cnblogs.com/Anker/p/3271773.html
9、在地址栏键入网址之后的过程是什么样的,数据流向,哪一个过程最耗时间?(常考)
答:(1)域名解析,得到web站点的IP地址
(2)通过IP地址,从客户端到服务端会经历一系列的路由交换过程
(3)找到服务端后,通过80端口,建立TCP三次握手
(4)TCP建立成功后,客户端发出http请求,服务端响应http应答报文
最耗时间:在路由交换过程中最长,因为要经过互联网,这中间有很多路由器,需要查表,有分组转发延迟、有线路传输延迟。
10、TCP四次挥手原理?
答:由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN和ACK包,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
11、TCP三次握手原理?
答:(1)客户端会发送一个SYN报文,表示我要主动建立连接,此时客户端处于SYN-sent状态,等待服务器的确认;
(2)服务端收到SYN包后,必须进行确认并发送一个ACK包,同时自己也发送一个SYN包,即SYN+ACK包,此时服务端进入SYN_RECV状态;
(3)客户端收到服务器的SYN+ACK包,向服务端发送确认包,服务端收到后,客户端和服务端都处于ESTABLISHED状态,完成三次握手,此时可以传输数据了。
12、http协议通信原理?
答:(1)首先http是借助于tcp 80端口,基于客户/服务器的模式。两个节点先建立TCP3次握手,保证可以传输数据,
(2)浏览器向Web服务器发送请求命令
(3)服务端收到http请求报文后,判断客户端请求的是动态页面还是静态页面,如果是静态页面,直接从/var/www/html目录下找到对应网页返回给它,如果是动态页面,fastcgi需要把请求转向PHP解释器或者Java解释器,甚至有必要的话,会请求查询后端数据库。解释器处理完数据后,先返回给web服务器,最后web服务器封装http应答报文,浏览器收到报文后解析显示给用户。
(4)断开TCP连接,释放网络资源。
13、TCP 为什么是三次握手,为什么不是两次或四次?(知乎上看到的,自己回答感觉很难有说服力)
三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天balabala……”
两次握手:
“喂,你听得到吗?”
“我听得到呀”
“喂喂,你听得到吗?”
“草,我听得到呀!!!!”
“你TM能不能听到我讲话啊!!喂!”
“……”
四次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,你能听到我吗?”
“……不想跟傻逼说话”
答:(1)不是两次握手的原因:计算机网络书上明确指出,如果只有2次握手,当TCP连接断开后,因为网络延迟原因,服务端过了很久才收到上次TCP连接的停留的分组,于是服务端以为客户端又要建立连接,进行确认报文段建立连接,一直等待客户端发来数据,服务端的许多资源就白白浪费了
(2)不是四次握手的原因:三次握手已经能保证对方均处于ESTABLIHED状态了,何必还要发一次分组浪费无谓的带宽呢?
14、tcp的四次挥手C/S中哪个先发起,为什么一般不是服务器先发起?(这个问题问的真蠢啊)
答:可以既由服务端发起,也可以由客户端发起,都是主动关闭的一方发起。至于为什么一般不是服务器先发起:因为服务器通常作为响应的一方,客户端发出请求,按常理来说得到了响应的数据,就算完成工作了,而服务端处理完毕后还要处理下一个连接。
15、session存在服务器的哪个地方? 共享session有何意义?什么实现方法?(session还是不好理解)
答:(2)session可以放在memcache API的内存缓存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空;
(2)第二种是PHP中的session以默认文件的形式保存在本地服务器的硬盘上。
意义:如果不采用session共享,那么网站的用户将会频繁在几个服务器上输入用户名和密码,导致用户体验大打折扣,另外迫使开发人员必须时时读写数据库,从而增重立数据库的负担。于是网站跨服务器的session共享问题变得迫切起来。
方法:(1)基于cookie的session共享(2)基于数据库的session共享(3)基于memcached的session共享
16、B/S和C/S架构的区别。
答:(1)B/S是三层模式,浏览器、服务器、数据库;而C/S是二层模式,即客户端和服务器
(2)从升级与维护的观点来说,C/S需要操作环境,而B/S不需要操作环境,所以B/S只需要维护server端,而C/S既需要负责客户端又要负责服务端,成本自然要高些
(3) 从应用范围来说,C/S更偏向局域网段,B/S更适合用于互联网段。 (这一点是看的网上的,不是很有说服力)
17、当master的二进制日志每产生一个事件,都需要发往slave,如果我们有N个slave,那是发N次,还是只发一次?
答:可以发N次,也可以发1次。
(1)如果是N次,在master内部,维护N个线程,每一个线程负责将二进制日志文件发往对应的slave。master既要负责写操作,还的维护N个线程,负担会很重。
(2)如果是1次,可以这样,slave-1是master的从,slave-1又是slave-2,slave-3,...的主,同时slave-1不再负责select。slave-1将master复制线程的负担,转移到自己的身上。这就是所谓的多级复制的概念。当然master肯定有binlog,slavve-1既有binlog又有relay-log。
一主多从的意义:主依然负责写请求,多个从来分担读的任务。
18、讲讲TCP的拥塞控制。(考的不多,考上必跪)
答:概念:拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
引起拥塞的原因:(1)网络流量过多(2)链路带宽太小(3)遭遇攻击
检测拥塞方法:随机早期检测RED
解决方法:慢开始,拥塞避免,快重传,快恢复。其中慢开始,拥塞窗口(发送窗口)指数级增长,当达到一定阈值后,使用拥塞避免算法线性增长。
19、如何锁定一个Linux用户账号?
答:(1)usermod -L user1
(2)或者更改登陆shell,usermod -s /sbin/nologin user1
(3)或者在/etc/passwd文件中,将含有该用户的文件行注释掉(使用 * )
20、mysql里记录货币用什么字段类型好?
答:numeric和decimal类型。
##Numeric(10,2) 指字段是数字型,长度为10,小数为两位的;decimal十进制(18,0) 18是定点精度(指定指定小数点左边和右边可以存储的十
进制数字的最大个数),0是小数位数。
21、MySQL数据库服务器性能分析的方法命令有哪些?
答:(1)show variables like ‘%max_connections%‘;##查看最大连接数、超时时间、表缓存数
(2)show global status; show process list;show session status;
(3)explain执行计划分析
22、MYSQL数据表在什么情况下容易损坏?如何修复?
答:原因:(1)服务器突然断电导致数据文件损坏。
(2)强制关机,事先没有先关闭mysql服务。
解决:用repair table TABLE_NAME
23、mysql存储引擎有哪些?如何修改mysql存储引擎?
答:种类:(1)myisam(2)默认Innodb(3)memory(4)CSV
修改引擎:mysql>alter table TABLE_NAME type=innodb:
24、mysql有关权限的表都有哪几个?
答:(1)user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
(2)db权限表:记录各个帐号在各个数据库上的操作权限。
(3)table_priv权限表:记录数据表级的操作权限。
(4)columns_priv权限表:记录数据列级的操作权限。
(5)host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。
25、一个目录可 读、可写、可执行分别意味什么?
答:可读意味着可以ls浏览该目录下的内容,可写意味着可以在该目录下创建、删除、修改文件的权限,可执行代表可以cd进入该目录。
26、MySQL服务器一主一从或一主多从模式中,当Master挂掉,如何决定由哪台从服务器启动成为master呢?
答:应该可以指定一些算法如轮询,采用使用Keepalived进行故障切换,配置文件中启用多个vrrp实例,并写一个脚本进行Mysql状态的检查,如果Master挂掉,那么我们停掉keepalived进程,让VIP飘移到任意指定的从服务器上,只要它可以提供服务,而后,master修复完毕,需手动切换到master,再重启keepalived服务。当然测试的时候,是人为让一台Master死掉,检查/var/log/message的日志情况或者tcpdump vrrp,另外keepalived所指的配置文件里当keepalived切换动作时也有邮箱发送。
参考文档:http://wenku.baidu.com/view/21bd9a839e31433238689347.html?from=search
27、LVS的持久连接的原理是什么?
答:当一个客户端发起请求时,不管TCP连接有没有断开,只要这个客户访问过,我们的LVS就会在内存缓冲区当中,将来自客户端第一次发起请求的连接IP地址和给他所选定的real server绑定映射关系,无论使用何种算法。当客户端再次访问时,直接查看这个会话表,若持久连接模板
没有超时,则交给同一个real server处理。将共享sesion放在memcached内存缓存服务器也行。
28、介绍下DNS负载均衡?
答:采用轮询的方式,在域名服务器中对某一台主机添加多条A记录,不同的客户端解析同一个域名,可以得到多个IP地址,目的是让多台web服务器出现同一个网页页面。
优点:可以将联通用户流量分摊到联通服务器,电信用户流量分摊到电信服务器
缺点:(1)可靠性低。如果某台服务器宕机,DNS服务器是无法知晓的,仍旧会将访问请求分配到此服务器,那么可能造成部分用户能访问,部分用户不能访问;
(2)负载分配不均匀。由于采用轮询,无法针对不同服务器的处理性能进行分配,可能有的服务器处理很多请求,有的服务器处理很少请求。
29、在LVS负载均衡中,当客户端1上传一个附件到服务器A中,而客户端2访问的是服务器B,那么此时客户端2需要下载客户端1上传的附件,该怎么办?(其实就是LVS后台真实服务器的数据同步问题)
答:(1)可以在2台Real Server后面放置一台NFS或者Samba共享存储,然后挂载至各自的所属的附件目录中(当然要求真实服务器拥有双网卡)
(2)对于Real Server本地LAMP环境的网页程序,可以使用rsync+inotify进行文件的同步。或者使用sersync替代
30、当一个select发往mysql proxy,可能这次由slave-2响应,下次由slave-3响应,这样的话,就无法利用查询缓存了,该怎么办?
答:应该找一个共享式的缓存,比如memcache来解决。将slave-2,slave-3,这些查询的结果都缓存至mamcache中。