面试宝典
一、Linux系统相关
1、基础相关
1.1、Linux系统受欢迎的特点有哪些?
1. 开源自由
2. 是一个完善的支持多用户,多任务,多进程,多CPU的系统
3. 具有很高的系统稳定性、可靠性、安全性
4. 有完善的网络服务及大量的第三方应用程序
5. 有完善的开发平台,数据库平台及图形用户界面,并且有众多的业界厂商支持
1.2、查看Linux系统版本和内核信息
cat /etc/redhat-release #查看系统版本信息
uname -r #查看内核的版本号
uname -m #查看系统平台,如X86_64
1.3、SSH服务连不上,怎么排查?
1. 客户端使用ping命令测试到服务器的网络
2. 客户端使用telnet或nmap命令测试端口是否开启,注意nmap只适用于linux,如 nmap 10.0.0.6 -p 22
3. 检查iptables等防火墙策略是否阻挡了连接
1.4、Linux的基础优化与安全总结
1. 不用root登录系统,而以普通用户登录,通过sudo授权管理
2. 更改默认的远程连接SSH服务端口,禁止root用户远程连接
3. 配置时间同步服务,使其与互联网时间同步
4. 配置yum更新源,从国内更新源下载安装软件包
5. 调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量;limit -n 65535或修改/etc/security/limits.conf
6. 定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满
7. 精简并保留必要的自启动服务(如crond,ssh,network,rsyslog,sysstat)
8. Linux内核参数优化/etc/sysctl.conf,执行sysctl -p 生效
9. 锁定关键系统文件,如/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,/etc/inittab
10. 清空多余的系统虚拟用户账号
11. 清空/etc/issue,/etc/issue.net,去除系统及内核版本登录前的屏幕显示
12. 为grub引导菜单加密码
13. 关闭SELinux与iptables(根据业务而定)
14. 如要支持中文件,需将系统字符集改为 “ zh_CN.UTF-8”,防止中文乱码问题
1.5、CentOS系统启动流程
1. POST加电自检
2. 加载bootloader
3. 内核初始化
4. 系统初始化
大致流程:POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init(systemd)
1.6、描述文件的元数据信息有哪些,分别表示什么含义,如何查看?
元数据信息包含:
File:文件名
Size:文件大小(单位:B)
Blocks:文件所占块个数
IO Block:每个数据块的大小(单位:B)
regular file:普通文件(此处显示文件的类型)
Inode:文件的Inode号,文件的索引节点号
Links:硬链接次数
Access:权限
Uid:(属主id/属主名)
Gid:(属组id/属组名)
Context:文件所在的环境
Access:访问时间 access time (atime)
Modify:修改时间 modification time (mtime)
Change:改变时间,元数据改动时间 change time (ctime)
使用stat命令可以查看文件的元数据信息。
2、Iptables
2.1、三种报文件流向
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
2.2、Iptables的组成
五表:
filter:过滤规则表,根据预定义的规则过滤符合条件的数据包;
nat:地址转换规则表;
mangle:修改数据标记位规则表;
raw:关闭nat表上启用的连接跟踪机制,加快封包穿越防火墙的速度;
security:用于强制访问控制网络规则,由Linux安全模块(如SELinux)实现
五链:
prerouting 、input 、forward 、output 、postrouting
2.3、内核中数据包的传输过程
当一个数据包进入网卡时,数据包首先进入prerouting链,内核根据数据包目的IP判断是否需要转送出去;
如果数据包就是进入本机的,此时数据包就会到达input链,到达input链后,任何进程都会收到它;
本机上运行的程序可以发送数据包,这些数据包会经过output链,然后到达postrouting链输出;
如果数据包是要转发出去的,且内核允许转发,数据包就会经过forward链,然后到达postrouting链输出。
二、网络相关
1、OSI七层模型与TCP五层模型
1.1、OSI七层模型与TCP五层模型分别是什么
OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP五层:物理层、数据链路层、网络层、传输层、应用层
各层传输数据的单位:物理层为数据位bit,数据链接层为数据帧frame,网络层为数据包package,传输层为数据段segment,其它更高层是消息message
2、TCP相关
2.1、TCP三次握手
第一次握手:建立连接时,客户端发送syn包(syn=1)到服务器,请求报文的序号为(seq=x),并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers);
第二次握手:服务器收到syn包后,若同意建立连接,则回复一个syn包给客户端(SYN=1,ACK=1),并选择一个请求报文的序号(seq=y),且回复报文中的确认号(ack=x+1),此时服务器进入同步已接收状态(SYN-RCVD)
第三次握手:客户端收到服务器的同步确认后,向服务器发送确认包(ack=1),并将报文序号加1(seq=x+1),同时回复报文确认号(ack=y+1),此包发送完毕,客户端和服务器建立连接,进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
2.2、TCP四次挥手
1) 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时客户端进入FIN-WAIT-1(终止等待1)状态。
2) 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3) 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4) 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5) 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6) 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
2.3、为什么连接的时候是三次握手,关闭的时候却是四次挥手?
因为当服务器端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务器端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我服务器端所有的报文都发送完了,才能发送FIN报文,因此不能一起发送。故需要四次挥手。
2.4、简述TCP和UDP的区别
1) TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接;
2) TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;
3) TCP面向字节流;UDP是面向报文的;
4) TCP传输效率低;UDP传输效率高;
5) TCP具有拥塞控制和流量控制,UDP没有;
6) TCP是全双工的;UDP则是一对一、一对多、多对一、多对多;
7) TCP首部开销大(20字节);UDP首部开效小(8字节)
三、进程相关
1、进程状态
1.1、进程的状态有哪些?
运行态:running (R)
就绪态:ready
睡眠态:sleeping 又分为可中断睡眠 interruptible (S) 和 不可中断睡眠 uninterruptible (D)
僵死态:zombie (Z)
停止态:stopped (T)
1.2、进程状态之后的字母含义
s:session leader 会话(子进程)发起者
+:前台进程,占据着某终端
l:多线程进程
<:高优先级进程
N:低优先级进程
四、加密与安全
1、信息安全防护的目标
保密性 Confidentiality
完整性 Integrity
可用性 Usability
可控制性 Controlability
不可否认性 Non-repudiation
2、安全防护环节
物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法
3、加密算法与协议
对称加密:加密和解密都使用同一个密钥;常见算法有:DES,3DES,AES,IDEA,RC6,Blowfish,Twofish,CAST5
非对称加密:采用公钥加密,私钥解密;公钥从私钥中提取而来;常见算法有:RSA,DSA
单向加密:只能加密不能解密;常见算法有:MD5(126bits),SHA1(160bits),SHA256,SHA512,CRC32
密钥交换:IKE(Internet Key Exchange),双方通过交换密钥来实现数据的加密解密;有两种交换方式:公钥加密和DH(Deffie-Hellman)
4、SSL/TLS
SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议;TLS是SSL的继承版本,与SSL在传输层对网络连接进行加密;
SSL协议位于传输层与应用层之间;
SSL协议可分为两层
SSL记录协议(SSL Record Protocol):提供数据封装、压缩、加密等功能
SSL握手协议(SSL Handshake Protocol):提供通迅双方进行身份认证、协商加密算法、交换加密密钥等功能
5、HTTPS的加密方式
前期认证时用的非对称加密,后期传数据时用的对称加密
6、SSH的加密方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证(非对称加密)
五、服务相关
1、MYSQL
1.1、数据库管理系统的基本功能
数据定义、数据处理、数据安全、数据备份
1.2、数据库系统的架构
单机架构、大型主机/终端架构、主从架构、分布式架构
1.3、数据有几种范式
六种:第一范式、第二范式、第三范式、巴德斯科范式、第四范式、第五范式
1.4、MySQL的特性
插件式存储引擎、单进程多线程、诸多扩展与新特性、提供了较多的测试组件、开源
1.5、数据库的组件(对象)
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等
1.6、SQL语句分类
DDL:数据定义语言;create,drop,alter
DML:数据操纵语言;insert,delete,update
DQL:数据查询语言;select
DCL:数据控制语言;grant,revoke,commit,rollback
1.7、存储过程的优势
存储过程把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要时从数据库中直接调用,省去了编译的过程;
提高了运行速度;
同时降低网络数据传输量。
1.8、存储过程与自定义函数的区别
存储过程实现的过程要复杂一些,而函数的针对性较强
存储过程可以有多个返回值,而自定义函数只有一个返回值
存储过程一般可独立执行,而函数往往是作为其他SQL语句的一部分来使用
1.9、MyISAM存储引擎的特点(MySQL5.5.5前默认的数据库引擎)
不支持事务;
表级锁定;
读写相互阻塞,写时不能读,读时不能写
只缓存索引;
不支持外键约束和聚簇索引
读取数据较快,占用资源较少
不支持MVCC(多版本并发控制机制)高并发
崩溃恢复性较差
1.10、InnoDB存储引擎的特点(从MySQL5.5.5开始为默认的数据库引擎)
支持事务,适合处理大量短期事务;
行级锁;
读写阻塞与事务隔离级别相关;
可缓存数据和索引;
支持聚簇索引;
支持MVCC高并发;
崩溃恢复性更好;
1.11、索引的优缺点
优点:索引可以降低服务需要扫描的数据量,减少了IO次数;索引可以帮助服务器避免排序和使用临时表;索引可以帮助将随机IO转为顺序IO;
缺点:占用额外空间,影响插入速度
1.12、索引的类型
B+TREE、HASH、R TREE
聚簇索引、非聚簇索引:数据和索引是否存储在一起
稠密索引、稀疏索引:是否索引了每一个数据项
1.13、SQL语句性能优化
查询时,能不要*就不用*,尽量写全字段名
大部分情况连接效率远大于子查询
多表连接时,尽量小表驱动大表,即小表 join 大表
在有大量记录的表分页时使用limit
对于经常使用的查询,可以开启缓存
多使用explain和profile分析查询语句 explain select clause
查看慢查询日志,找出执行时间长的sql语句优化
1.14、事务的特征(ACID特性)
A:atomicity 原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚
C:consistency 一致性;数据库总是从一个一致性状态转换为另一个一致性状态
I:Isolation 隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离级别、实现并发
D:durability 持久性;一旦事务提交,其所做的修改会永久保存于数据库中
1.15、事务的隔离级别(从上至下更加严格,由服务器变量tx_isolation指定,配置文件中为transaction_isolation)
读未提交,READ UNCOMMITTED,可读取到未提交的数据,产中脏读;
读已提交,READ COMMITTED,可读取到提交数据,但未提交数据不可读,产生不可重复读,即可读取到多个提交数据,导致每次读取数据不一致;
可重复读,REPEATABLE READ,多次读取数据都一致,产生幻读,即读取过程中,即使有其它提交的事务修改数据,仍只能读取到未修改前的旧数据。此为MySQL默认设置;
可串行化,SERIALIZABLE,未提交的读事务阻塞修改事务,或者未提交的修改事务阻塞读事务。导致并发性能差。
1.16、MySQL日志分类
事务日志 transaction log
错误日志 error log
通用日志 general log
慢查询日志 slow query log
二进制日志 binary log
中继日志 reley log
1.17、MySQL备份时需要考虑的因素以及需要备份哪些东西?
考虑因素:温备的持锁多久;备份产生的负载;备份过程的时长;恢复过程的时长。
备份什么:数据;二进制日志,InnoDB的事务日志;程序代码(存储过程,函数,触发器,事件调度器);服务器的配置文件。
1.18、MySQL主从复制原理
主库把外界接收的SQL请求记录到自己的binlog日志中,从库的I/O thread去请求主库的binlog日志,并将binlog日志写到中继日志中,然后从库的SQL Thread重做中继日志的SQL语句,从而达到数据复制效果。
1.19、MHA(Master High Availability)的工作原理
1. 从宕机崩溃的master保存二进制日志事件(binlog events)
2. 识别含有最新更新的slave
3. 应用差异的中继日志(relay log)到其它的slave
4. 应用从master保存的二进制日志事件(binlog events)
5. 提升一个slave为新的master
6. 使其它的slave连接到新的master进行复制
1.20、Galera Cluster特点
多主架构:真正的多点读写集群,在任何进候读写数据,都是最新的
同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失
并发复制:从节点应用数据时,支持并行执行,更好的性能
故障切换:在出现数据库故障时,因支持多点写入,切换容易
热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务的时间就会非常少。在节点故障期间,节点本身对集群的影响非常小
自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,Galere Cluster会自动拉取在线节点数据,最终集群会变为一致
对应用透明:集群的维护,对应用程序是透明的
1.21、什么是MySQL多实例
MySQL多实例就是在一台服务器上同时开启多个不同的端口,同时运行多个MySQL服务进程,每个服务进程通过不同的socket监听不同的端口来提供服务。
2、DNS
2.1、DNS的工作原理
第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器;
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回;
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址;
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址;
第五步:重复第四步,直到找到正确的纪录;
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户 。
3、HTTP
3.1、HTTP/1.0与HTTP/1.1的区别
缓存处理:HTTP1.1中引入了更多的缓存策略;
带宽优化:HTTP1.0中当请求对象中的部分内容时,会将整个对象发过来且不支持断点续传,有些浪费宽带;HTTP1.1则进行了优化,可以只获取对象中的部分内容;
错误通知的管理:HTTP1.1中新增了24个状态响应码,错误原因更精确;
HOST头:HTTP1.1的报文头增加了更多的信息;
持久连接:HTTP1.1支持长连接,在一个TCP连接中可以传送多个请求和响应,减少了建立和关闭连接的消耗和延迟,弥补了HTTP/1.0每次请求都要创建连接的缺点。
3.2、HTTP常用的请求方法有哪些?
HEAD:只请求响应报文中的HTTP首部
GET:客户端请求指定资源信息,服务器返回指定资源信息
POST:将客户端的数据提交到服务器
PUT:用从客户端传送给服务器的数据取代指定的文档内容
DELETE:请求服务器删除Request-URI所标识的资源
MOVE:请求服务器将指定的页面移至另一个网络地址
3.3、HTTP响应码介绍及常见响应码
100~199:表示一些通知信息提示
200~299:表示请示成功
300~399:表示重定向
400~499:表示客户端错误
500~599:表示服务器端错误
常见响应码:
200:成功,表示服务器成功返回所请求的信息;OK
301:永久重定向;Moved Permanetly
302:临时重定向;Moved Temporary
403:禁止访问;Forbidden
404:服务器找不到客户端请求的资源;Not Found
500:内部服务器错误;Internet Server Error
502:坏的网关,Bad Gateway;一般为代理服务器请求后端服务器时,后端服务器不可用或没有响应网关服务器;通常为反向代理服务器下面的节点出问题所致;
503:当前服务不可用,Service Unavailable;可能是服务器超限或停机维护导致的,或反向代理服务器后面没有可提供服务的节点
504:网关超时,Gateway Timeout;一般是网关代理服务器请求后端服务时,后端服务器没有在特定时间内完成处理请求所致;多数是后端服务器过载导致。
3.4、网站访问量充其量指标?怎么计算?
IP:独立IP,指不同IP地址的计算机访问网站的次数;
PV:页面浏览,用户只要访问网站页面就计数一次;PV反映的是浏览某网站的页面数,PV与来访者的数据量成正比,但并不是页面的来访问数量,而是网站被访问的页面数量;
UV:独立访客,同一个客户端访问网站被计为一个访客;UV一般是以客户端cookie等技术作为统计依据的,实际统计会有误差;
并发连接:指单位时间内能够处理的最大连接数
计算方法:日志分析;页面嵌入的JS程序;第三方公司提供的工具统计,如GA统计
3.5、HTTP的请求过程
1. 建立连接:接收请求或拒绝请求;
2. 接收请求:接收客户端请求报文中对某资源的一次请求过程;
3. 处理请求:服务器对请求报文进行解析,并获取请求资源及请求方法等相关信息,根据方法、资源、首部和可选的主机部分对请求进行处理;
4. 访问资源:服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源;
5. 构建响应报文:根据用户请求的资源类型以及URL重定向进行报文件响应;
6. 发送响应报文;
7. 记录日志信息。
3.6、WEB访问的响应模型
单进程I/O模型:启动一个进程处理用户请求,而且一次只能处理一个,多个请求被串行响应
多进程I/O模型:并行启动多个进程,每个进程响应一个用户请求;
复用I/O结构:启动一个进程,同时响应N个请求;
复用的多进程I/O结构:启动M个进程,每个进程响应N个请求,可同时接收M*N个请求
4、Apache
4.1、Apache的工作模式有哪些?各有什么优缺点?
prefork:多进程I/O模型;每个进程响应一个请求,默认的模型;一个主进程,多个子进程;
主进程:负责生成和回收N个子进程,创建套接字等;不响应请求;
子进程:负责处理请求,每个子进程处理一个请求;系统初始时,预先生成多个空闭进程,等待请求,最大不超过1024个
优点:稳定;
缺点:慢,占用资源,不适用于高并发场景
worker:复用的多进程I/O模型,多进程多线程;IIS也使用的此模型;一个主进程生成多个子进程,每个子进程再生成多个线程,每个线程处理一个请求;
优点:相比prefork占用的内存较少,可以同时处理更多的请求;
缺点:使用keep-alive的长连接方式,某个线程会被一直占据,即使没有传输数据,也需要一直等待到超时才会被释放,如果过多的线程被这样占据,在高并发场景下也会导致无线程可用;
event:事件驱动模型(worker模型的变种);一个主进程生成多个子进程,每个子进程再生成多个线程,每个线程处理一个请求,每组线程中有一个专门的监控线程来管理其它的线程,它会让这些keep-alive的线程在处理完请求后释放出来,增强了高并发场景下的请求处理能力;
优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀;
缺点: 没有线程安全控制
4.2、正向代理与反向代理
正向代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。
反向代理(reverse proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
5、NFS
5.1、目前网络集中式存储模型有哪些?
DAS:Direct Attached Storage,直接附加存储,直接附加在主板上的存储设备,如机箱内的硬盘等;
NAS:Network Attached Storage,网络附加存储,通过网络文件服务的形式来提供文件共享存储;
SAN:Storage Area Networks,存储区域网络,通过SCSI、IP、ATM等高级协议来实现将数据存储在远程主机上的共享存储模式。
| DAS | NAS | SAS | |
| 传输类型 | SCSI、FC | IP | IP、FC、SAS |
| 数据类型 | 数据块 | 文件 | 数据块 |
| 典型应用 | 任何 | 文件服务器 | 数据库应用 |
| 优点 | 磁盘与服务器分离,便于统计管理 |
不占用应用服务器资源; |
高扩展性; |
| 缺点 |
连接距离短; |
不适合存储量大的块级应用; |
相比NAS成本较高; |
5.2、NFS的工作原理
1)首先服务器端启动RPC服务,并开启111端口;(RPC:Remote Procedure Call Protocol远程过程调用)
2)服务器端启动NFS服务,并向RPC注册端口信息;
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口;
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端;
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
5.3、FTP数据传输模式
主动模式:指数据传输连接由服务器主动连接客户端某个随机端口;
命令(控制):客户端:随机port ---> 服务器:tcp21
数据:客户端:随机port <--- 服务器:tcp20
被动模式:指数据传输连接由客户端的某个随机端口去连接服务端的某个随机端口;
命令(控制):客户端:随机port ---> 服务器:tcp21
数据:客户端:随机port ---> 服务器:随机port
5.4、Samba服务相关进程与端口
smbd:管理samba主机所分享的目录、文件或者打印机;使用TCP协议的139和445两个端口进行数据的传输;
nmbd:提供NetBIOS名称解析,主要是通过UDP的137和138两个端口来负责名称解析任务。
6、LVS
6.1、集群的概念及类型
集群是指为解决某个特定问题将多台计算机组合起来形成的单个系统;
分类:
负载均衡集群:LBC(Load Balancing Clusters)
高可用集群:HAC(High-availability Clusters)
高性能集群:HPC(High-performance Clusters)
网格计算集群:(Grid computing)
6.2、集群的设计原则
可扩展性——集群的横向扩展能力
可用性——无故障时间
性能——访问响应时间
容量——单位时间内的最大并发吞吐量
6.3、LVS的集群类型
lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某个挑选出的RS的RIP和PORT实现转发;
lvs-dr:Direct Routing,直接路由,LVS的默认模式,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某个挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
lvs-tun:在原请求IP报文之外新加一个IP首部;不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP);
lvs-fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发;
6.4、LVS的调度算法有哪些?
静态方法4种:
RR:roundrobin,轮询
WRR:Weighted RR,加权轮询
SH:Source Hashing,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
DH:Destination Hashing,目标地址哈希;第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS
动态方法6种:
LC:least connections,最小连接
WLC:Weighted LC,带权重的最小连接;默认调度算法
SED:Shortest Expecting Delay,初始连接高权重优先
NQ:Never Queue,第一轮均匀分配,后续按SED算法
LBLC:Locality-Baced LC,基于地址的最小连接数调度;相当于动态的DH算法,将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的,否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑
LBLCR:LBLC with Replication,带复制功能的LBLC;解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
7、Keepalived
7.1、Keepalived的主要功能有哪些?
1. 管理LVS的负载均衡
2. 具有对LVS集群节点健康检查功能
3. 作为网络服务的高可用功能
7.2、什么是VRRP?Keepalived的工作原理?
1. VRRP(Virtual Router Redundancy Protocol) 虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障问题;
2. VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的;
3. VRRP用IP的多播的方式实现高可用对之间的通信;默认的多播地址为224.0.0.18;
4. 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但Keepalived系统运维工作中都是一对;
5. VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
Keepalived的工作原理:Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作中主会优先获取所有的资源,备节点处于等待状态,当主挂了的时候,备节点就去接管主节点的资源,然后顶替主节点对外提供服务。
在Keepalived服务对之间,只是作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。
7.3、什么是"裂脑"问题?
由于某些原因,导致两台高可用服务器对在指定的时间内,无法检测到对方的心跳信息,各自取得资源及服务的所有权,而此时的两台高可用服务器都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或造成数据丢失,这个情况就被称为裂脑。
7.4、导致"裂脑"发生的原因有哪些?
1. 高可用服务器对之间心跳线链路发生故障,导致无法正常通信;
- 心跳线坏了(包括断了,老化)
- 网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)
- 心跳线间连接的设备故障(网卡及交换机)
- 仲裁的机器出问题(采用仲裁的方案)
2. 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输;
3. 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败;
4. 其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件Bug等。
7.5、解决裂脑的常见方案
1. 同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息;
2. 如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决;
3. 做好对裂脑的监控报警,在问题发生时人为第一时间介入仲裁,降低损失。
8、Nginx
8.1、系统IO模型有哪些?
1. 同步/异步:关注的是消息通信机制,即在等待一件事情的处理结果时,被调用者是否提供完成通知;
同步:进程发出请求调用后,等内核返回响应以后才继续下一个请求,即如果内核一直不返回数据,那么进程就一直等;
异步:进程发出请求调用后,不等内核返回响应,接着处理下一个请求,Nginx是异步的;
2. 阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态;
阻塞:指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情;
非阻塞:指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成,最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情;
8.2、网络IO模型有哪些?
1. 同步阻塞型IO模型
2. 同步非阻塞型IO模型
3. IO多路复用模型
4. 信号驱动IO模型
5. 异步非阻塞IO模型
9、Ansible
9.1、ansible命令执行过程
(1)加载自己的配置文件 默认/etc/ansible/ansible.cfg
(2) 加载自己对应的模块文件,如command
(3)通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
(4) 给文件+x执行
(5) 执行并返回结果
(6) 删除临时py文件,退出
浙公网安备 33010602011771号