Linux运维跳槽必备面试题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维跳槽必备面试题相关的知识,希望对你有一定的参考价值。

如何优化 Linux系统(可以不说太具体)?
1、root,添加普通用户,通过sudo授权管理;2、更改默认的远程连接SSH服务端口及禁止root用户远程连接;3、自动更新服务器时间;4、配置国内yum源;5、关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外); 6、调整文件描述符的数量;7、精简开机启动服务(crond rsyslog network sshd);8、内核参数优化(/etc/sysctl.conf);9、更改字符集,支持中文,但建议还是用英文字符集,防止乱码;10、锁定关键系统文件;11、清空/etc/issue,去除系统及内核版本登录前的屏幕显示
请列举出web服务器的负载架构:
答:nginx、Haproxy、LVS
用tcpdump嗅探80端口的访问看看谁最高:
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." ‘{print $1"."$2"."$3"."$4}‘| sort | uniq -c | sort -nr |head -20
统计/var/log/httpd/access.log日志访问频繁前十的地址,并从大到小排序。
cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10
软硬:{共性}:修改软硬链接文件,所有的文件都是同步修改的。
硬链接: 本质:同一个文件多个名字、链接数:有一个以上的链接,不可跨分区,只允许对文件创建链接,不依赖原始文件,删除硬链接文件的源文件,硬链接文件仍然存在,不占用空间,格式:ln 目标文件 链接名?
软连接:本质: 一个文件对应快捷方式,是不同文件,链接数:只有一个链接,可以跨分区,可以对目录和文件夹进行链接,依赖于原始文件,删除源文件,软连接则指向一个空文件,它具有依赖性,占用磁盘空间,格式: ln -s 目标文件 源文件
取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1
取分区利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head - n1
取分区利用率:sed -rn ‘ s/^([^[:space:]]+).([0-9]+)%./\2/p‘
用户:sed -rn ‘ s/^([^[:space:]]+).([0-9]+)%./\1/p‘
查看版本型号: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+"
查看版本型号:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ "
查看版本型号:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release
匹配手机号码:egrep -o " 1[0-9]{10} " tel.txt
匹配email邮箱:egrep -o "([[:alnum:]]|_)[email protected][[:alnum:]]+.com$" mail.txt
使用sed命令取IPV4地址:
1、|sed -n ‘2p‘ |sed -r ‘s/inet//‘ |sed -r ‘s/netmask.//‘ |tr -d " " 2、|sed -n ‘2p‘ sed -e ‘s/^.inet//‘ -e ‘s/.//‘ 3、|sed -n -e ‘2s/^.inet//‘ -e ‘2s/ .//p‘ 4、|sed -nr ‘[email protected] (.) [email protected]\[email protected]5、|sed -nr ‘2s/[^0-9]+([0-9.]+)./\1/p‘
快速查找/root目录中大于2M的文本,并将文件中的magedu,换成www.magedu.com
find /root --size +2M -type f -exec sed -i ‘s/magedu/www.magedu.com/g‘ {} \;
三个私有地址网络: A:10.0.0.0/8~10.255.255.255/8 B、172.16.0.0/16 ~ 172.31.255.255/16 16个地址用于内部 C、192.168.0.0/24 ~ 192.168.255.255/24 256个地址用于内部
阐述iptables的工作原理,四表五链:
iptables是工作在TCP/IP的2、3、4层,当主机收到一个数据包后,数据包先在内核空间处理,若发现目标地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目标不是自身,则会将包丢弃或进行转发,4表:raw表,mangle表,net表,filter表,5链:input、output、forward、prerouting、postrouting。
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
mysql部分:四种隔离级别:
A、READ UNCOMMITTED(未提交读),事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,也被称为脏读(Dirty Read),这个级别会导致很多问题
B、READ COMMITTED(提交读),大多数数据库系统的默认隔离级别,一个事务开始时,只能“看见”已经提交的事务所做的修改,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,也叫不可重复读(nonrepeatable read),有可能出现幻读(Phantom Read),指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)
C、REPEATABLE READ(可重复读),通过InnoDB和XtraDB存储引擎,是mysql的默认事务隔离级别
D、SERIALIZABLE(可串行化)最高级别,通过强制事务串行执行,避免了幻读问题,会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题。
技术图片
MySQL事务ACID:
原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作
一致性(consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态
隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的
持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中
MySQL索引的优点:
三个优点:1、索引大大减少了服务器需要扫描的数据量 ;2、索引可以帮助服务器避免排序和临时表;3、索引可以将随机I/O变为顺序I/O
什么情况下应不建或少建索引
1、表记录太少;2、经常插入、删除、修改的表;3、数据重复且分布平均的表字段,假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。4、经常和主字段一块查询但主字段索引值比较多的表字段
行级锁定的优缺点
优点:1、当在许多线程中访问不同的行时只存在少量锁定冲突;2、回滚时只有少量的更改 3、可以长时间锁定单一的行
缺点:1、比页级或表级锁定占用更多的内存;2、当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁;3、如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多;4、用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定
key和index的区别
1、key是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key,unique key,foregin key等
2、index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等
Mysql主从配置:1、master开启二进制日志;2、master和slave配置不同的server_id;3、slave配置中继日志;4、master做账户授权;5、slave开启同步。
MySQL主从同步过程
1:Slave端的IO线程连接上Master,并向Master请求指定日志文件的指定位置(新部署的Master和Slave从最开始的日志)之后的日志。2:Master接收到来自Slave的IO线程请求,负责IO复制的IO线程根据Slave的请求信息读取相应的日志内容,然后将本地读取的bin-log的文件名、位置及指定位置之后的内容一起返回给Slave的IO线程处理。 3:Slave的IO线程将接收到的信息依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到Master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从哪个bin-log的哪个位置开始往后的日志内容请发给我”。
4:Slave的sql线程检查到relay-log中新增了内容后,会马上将relay-log中的内容解析为在Master端真实执行时候的可执行命令,并顺序执行,从而保证对Slave的MySQL进行响应的增加或删除等操作,最终实现和Master数据保持一致。
MySQL主从复制原理以及流程:
1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;
3. 从:sql执行线程——执行relay log中的语句;
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
下图就描述了一个多个数据库间主从复制与读写分离的模型
技术图片
在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。如果配置了多个从服务器或者多个主服务器又涉及到相应的负载均衡问题,关于负载均衡具体的技术细节还没有研究过,今天就先简单的实现一主一从的主从复制功能。
技术图片
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
Mysql中的myisam与innodb的区别
1、InooDB支持事务,而MyISAM不支持事务;2、InnoDB支持行级锁,而MyISAM支持表级锁;3、InnoDB支持MVCC,而MyISAM不支持;4、InnoDB支持外键,而MyISAM不支持;5、InnoDB不支持全文索引,而MyISAM支持
B树和B+树的区别
1、B树,每个节点都存储key和data,所有的节点组成这可树,并且叶子节点指针为null,叶子节点不包含任何关键字信息
技术图片
2、B+树,所有的叶子节点中包含全部关键字的信息,及指向含有这些关键字记录的指针,且叶子节点本身依关键字的大小自小到大的顺序链接,所有的非终端节点可以看成是索引部分,节点中仅含有其子树根节点中最大(或最小)关键字
技术图片
HTTP和Nginx的状态码解析:
1XX 它表示请求已经被接受,正在继续处理,这种响应是临时响应,不会返回响应体。
2XX 成功处理并返回,它表示在服务器内已经被接收,被知晓,并处理完成。
3XX 重定向功能,告知客户端需要继续执行操作才可以完成请求。
4XX 出现问题,和客户端有关系,比如401表示权限问题,404表示访问了一个不存在的URL。
5XX 出现问题,和服务端有关,比如500表示内部错误,504表示请求超时。
在linux系统中,一般都会有swap内存,你觉得使用swap内存有什么好处,在什么情况下swap内存才会被使用?你觉得在生产环境中要不要用swap内存?
答:好处:在内存不够用的时候,将部分内存上的数据交换到swap空间上,以便让系统不会因为内存不够用而导致紧急情况出现。
什么情况下会用swap:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap空间中,等到那些程序要运行时,再从swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行swap交换。
简述进程的启动、终止的方式以及如何进行进程的查看:
答:在Linux中启动一个进程有手工启动和调度启动两种方式:
(1)手工启动:用户在输入端发出命令,直接启动一个进程的启动方式。可以分为:①前台启动:直接在SHELL中输入命令进行启动。②后台启动:启动一个目前并不紧急的进程,如打印进程。
(2)调度启动:系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的时间和场合,到时候系统会自动完成该任务。 经常使用的进程调度命令为:at、batch、crontab。
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
答:静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表。
动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。
简述网络文件系统NFS,并说明其作用:
答:网络文件系统是应用层的一种应用服务,它主要应用于Linux和Linux系统、Linux和Unix系统之间的文件或目录的共享。对于用户而言可以通过 NFS方便的访问远地的文件系统,使之成为本地文件系统的一部分。采用NFS之后省去了登录的过程,方便了用户访问系统资源。
有状态和无状态的服务区别:
答:无状态的HTTP协议:http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(html)文档从Web服务器传送到客户端的浏览器。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
有状态就是多次访问之间有关联关系,需要记录多次之间的访问关系。
Redis集群的原理,redis分片是怎么实现的,公司redis用在了哪些环境?
答:redis3.0版本之前是不支持集群的,官方推荐最大的节点数量为1000,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。集群可以将数据自动切分(split)到多个节点,当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。
redis分片:分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储。分片部署方式一般分为以下三种:
(1)在客户端做分片;这种方式在客户端确定要连接的redis实例,然后直接访问相应的redis实例;
(2)在代理中做分片;这种方式中,客户端并不直接访问redis实例,它也不知道自己要访问的具体是哪个redis实例,而是由代理转发请求和结果;其工作过程为:客户端先将请求发送给代理,代理通过分片算法确定要访问的是哪个redis实例,然后将请求发送给相应的redis实例,redis实例将结果返回给代理,代理最后将结果返回给客户端。
(3)在redis服务器端做分片;这种方式被称为“查询路由”,在这种方式中客户端随机选择一个redis实例发送请求,如果所请求的内容不再当前redis实例中它会负责将请求转交给正确的redis实例,也有的实现中,redis实例不会转发请求,而是将正确redis的信息发给客户端,由客户端再去向正确的redis实例发送请求。
redis用在:java、php环境用到redis,主要缓存有登录用户信息数据、设备详情数据、会员签到数据等。
你会使用哪些虚拟化技术?
答:vmware vsphere及kvm,我用得比较多的是vmware vsphere虚拟化,几本上生产环境都用的vmware vsphere,kvm我是用在测试环境中使用。vmware 是属于原生架构虚拟化技术,也就是可直接在硬件上运行。kvm属于寄居架构的虚拟化技术,它是依托在系统之上运行。vmware vcenter管理上比较方便,图形管理界面功能很强大,稳定性强,一般比较适合企业使用。KVM管理界面稍差点,需要管理人员花费点时间学习它的维护管理技术。
nginx中rewrite有哪几个flag标志位(last、break、redirect、permanent),说一下都什么意思?常用的Nginx模块,用来做什么的?
答:last : 相当于Apache的[L]标记,表示完成当前的rewrite规则
break : 停止执行当前虚拟主机的后续rewrite指令集
redirect : 返回302临时重定向,地址栏会显示跳转后的地址
permanent : 返回301永久重定向,地址栏会显示跳转后的地址、
301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解:
last一般写在server和if中,而break一般使用在location中
last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后匹配
break和last都能组织继续执行后面的rewrite指令
1、rewrite模块,实现重写功能 2、access模块:来源控制 3、ssl模块:安全加密 4、ngx_http_gzip_module:网络传输压缩模块 5、ngx_http_proxy_module 模块实现代理 6、ngx_http_upstream_module模块实现定义后端服务器列表 7、ngx_cache_purge实现缓存清除功能
什么是运维:
运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,
在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术
运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等。
现在给你三百台服务器,你怎么对他们进行管理?
管理3百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。
简述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 从库 RAID5RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
答:LVS: 是基于四层的转发;HAproxy:是基于四层和七层的转发,是专业的代理服务器;Nginx:是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
区别: LVS由于是基于四层的转发所以只能做端口的转发;而基于URL的、基于目录的这种转发LVS就不行
工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做;在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大;选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器;配置简单,所以中小型企业推荐使用HAproxy。
什么是中间件?什么是jdk?
中间件:是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源;中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯;是连接两个独立应用程序或独立系统的软件。相连接的系统即使它们具有不同的接口;但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递;通过中间件,应用程序可以工作于多平台或OS环境。
jdk:jdk是Java的开发工具包;它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。
Tomcat8005、8009、8080三个端口的含义?
8005:闭时使用;8009:为AJP端口;即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口;8080:一般应用使用。
什么叫CDN?
答:即内容分发网络;其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘。使用户可就近取得所需的内容,提高用户访问网站的速度。
什么叫网站灰度发布?
答:灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式;AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B;如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来;灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
简述DNS进行域名解析的过程?
答:用户要访问 www.baidu.com, 会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com, 然后发给请求的服务器,保存一份之后,再发给客户端。
RabbitMQ是什么东西?
答:RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器;消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用;队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用;消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地。
Keepalived的工作原理?如何做健康检查
答:在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性;由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的;
Keepalived健康检查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 检查的url可以是多个
digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成
status_code 200# HTTP/SSL 检查返回的状态码
}
connect_port 80 # 连接端口
bindto<IPADD>
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 2 #连接间隔时间
}
讲述一下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需要对负载均衡器发过来的数据包进行还原,所以说必须支持 IP TUNNEL协议,所以,在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这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
mysql的innodb如何定位锁问题:
在使用 show engine innodb status检查引擎状态时,发现了死锁问题;在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)
innodb_trx ## 当前运行的所有事务 innodb_locks ## 当前出现的锁 innodb_lock_waits ## 锁等待的对应关系
mysql如何减少主从复制延迟:
如果延迟比较大,就先确认以下几个因素:
1、从库硬件比主库差,导致复制延迟;2、主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。更高版本的mysql可以支持多线程复制;3、慢SQL语句过多;4、网络延迟;5、master负载:主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层;6、slave负载:一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器。
MySQL数据库主从同步延迟解决方案
最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行;还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit= 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog。innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。
如何重置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 [email protected]’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;
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请求。
mysql数据备份工具
mysqldump工具
mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump;支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景,Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。
基于LVM快照备份
在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别;而innodb不开启独立表空间的话只能备份整个数据库。
tar包备份
percona提供的xtrabackup工具:支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展;可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份。
简述raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率;但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证;而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合。
RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据;不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能;RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性;当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上;任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏);所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能。
说说TCP/IP的七层模型
应用层 (Application):网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层(Presentation Layer):数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等。
会话层(Session Layer):建立、管理、终止会话。(在五层模型里面已经合并到了应用层);对应主机进程,指本地主机与远程主机正在进行的会话。
传输层 (Transport):定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层。
网络层 (Network):进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层 (Link):建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议);将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层(Physical Layer):是计算机网络OSI模型中最低的一层;物理层规定:为传输数据所需要的物理链路创建、维持、拆除而提供具有机械的,电子的,功能的和规范的特性;简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层;物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础;物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境;如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。
技术图片
正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:1、访问原来无法访问的资源,如google;2、可以做缓存,加速访问资源;3、对客户端访问授权、上网进行认证;4、代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。
反向代理:实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的用途:1、保证内网的安全,可以使用反向代理提供WAF功能,阻止web*;2、大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
技术图片
所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
技术图片
三次握手and四次挥手
第一次握手:客户端发送SYN标志位为1的请求到服务端,并随机生成一个seq 序列号x,其中seq是随机产生的数据包的序列号。
第二次握手:服务器收到客户端请求并返回SYN=1,ACK=1,seq=y,ack=x+1,其中ACK=1表示是响应报文,seq=y是服务器随机产生的数据包序列号,ack=x+1是确认客户端序列号有效并返回给客户端确认。
第三次握手**:客户端收到服务器的确认ack=x+1有效的验证信息,即在自己发送的序列号基础之上加了1表示服务器收到并返回,表示第二次连接有效,然后客户端恢回复ACK=1,seq=x+1,ack=y+1,这是讲服务器发来+1后的序列号当做自己的seq序列号,确认号ack使用服务器的随机号y再加1即ack=y+1,这样客户端就完成了第三次的验证在讲数据包发给服务器,服务器收到后验证确认号是在自己的seq之上加了1,表示没有问题就开始传输数据。

以上是关于Linux运维跳槽必备面试题的主要内容,如果未能解决你的问题,请参考以下文章

Linux运维跳槽40道面试精华题

Linux运维跳槽40道面试精华题

40道Linux运维面试精华题,请收下这份跳槽秘籍!

今年跳槽难?40套Linux运维精华面试题助你查漏补缺!

十二条Linux运维面试必备经典笔试/面试题

Linux运维工程师必备面试题20道及解析