linux常见面试题
Mysql数据库
1. 关系型数据库小结
-
关系型数据库在存储数据时实际就是采用的一张二维表(和 Excell 里表格几乎一样)。
市场占有量较大的是 MySQL 和 Oracle 数据库,而互联网场景最常用的是 MySQL 数据库。
通过SQL结构化查询语言来存取、管理关系型数据库的数据。关系型数据库在保持数据安全和数据一致性方面很强,遵循 ACID 理论ACID指的的事务的4大特性:
(原子性(Atomicity):事物是不可拆分的最小单元;
一致性(Consistency):事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态;
隔离性(Isolation):各个事务的执行互不干扰;
持续性(Durability):事务一旦提交对数据所做的任何改变,都要记录到永久存储器中。这四个特性也简称ACID性。)
-
常用关系型数据库管理系统
Oracle 数据库; MySQL 数据库; MariaDB 数据库; SQL Server 数据库;
2. 非关系型数据库小结
NoSQL 数据库不是否定关系型数据库,而是作为关系数据库的一个重要补充。
NoSQL 数据库为了灵活及高性能、高并发而生;
在NoSQL 数据库领域,当今的最典型产品为 **Redis(持久化缓存)、MongoDB、Memcached(纯内存)**等。
NoSQL 数据库没有标准的查询语言(SQL),通常使用数据接口或者查询API。
-
常用非关系型数据库管理系统
Memcached(Key-Value) Redis(Key-Value) MongoDB (Document-Web)
3. 关系型数据库与非关系型数据库的区别:
-
关系型数据库 :
优点:
-
易于维护:都是使用表结构,格式一致;
-
使用方便:SQL语言通用,可用于复杂查询;
-
复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
- 读写性能比较差,尤其是海量数据的高效率读写;
- 固定的表结构,灵活度稍欠;
- 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
-
-
非关系型数据库:严格上不是一种数据库,是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
-
格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛。
-
速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
-
高扩展性;
-
成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
- 不提供sql支持,学习和使用成本较高;
- 无事务处理;
- 数据结构相对复杂,复杂查询方面稍欠
-
4. oracle和mysql的区别
Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。
Oracle的内存占有量非常大,而mysql非常小
MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。
MySQL字符串可以使用双引号包起来,而Oracle只可以单引号
MySQL分页用limit关键字,而Oracle使用rownum字段表明位置,而且只能使用小于,不能使用大于
MySQL中0、1判断真假,Oracle中true false
MySQL中命令默认commit,但是Oracle需要手动提交
MySQL在windows环境下大小写不敏感 在unix,linux环境下区分大小写,Oracle不区分
5.导致SQL执行慢的原因
-
硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。
-
没有索引或者索引失效.
-
数据过多(分库分表、读写分离)
-
服务器调优及各个参数设置(调整my.cnf)
-
索引:当查询速度过慢可以通过建立优化查询速度,可以当作调优。
6. Mysql主从复制原理:
主节点master开启bin-log日志,开启之后增删改的sql语句就会进入到bin-log日志里面,从节点slave要开启io线程,与master节点建立连接,io线程会自动读取master节点里bin-log里面的内容,存储进自己的中继日志里,然后从节点会开启sql线程,将中继日志中最新的sql语句,执行一遍。
7.MySQL主从复制有延迟,怎么解决**:**使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器,只作为备份用,不进行其他任何操作,就能相对最大限度地达到’实时’的要求。
9.主从同步失效如何排查原因:
(1).show slave status\G;
(2).根据提示信息定位报错位置。
10.MySQL怎么解决主节点故障问题:
(1).给MySQLmaster做keepalived;
(2).给MySQL做多源复制集群。
11.MySQL的备份方式
(1).物理备份
Ⅰ.完全备份-----完整备份
Ⅱ.增量备份: 每次备份上一次备份到现在产生的新数据
Ⅲ.差异备份:只备份跟完整备份不一样的
(2).逻辑备份
12.数据库的存储引擎:数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据;MySQL的核心就是存储引擎。
(1).MySQL引擎功能: 除了可以提供基本的读写功能,还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能。
(2).InnoDB存储引擎:默认引擎,最常用的。
Ⅰ.InnoDB:事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定;InnoDB是默认的MySQL引擎;
Ⅱ.InnoDB特点: 支持事务处理,支持崩溃修复和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
12.mysql的优化
(1).安全方面:修改默认端口号,禁止root用户远程登录,对用户降权,以普通用户运行mysql;
(2).性能方面:升级硬件,内存、磁盘、优化sql语句(开启慢查询)、设置索引;
(3).参数优化:innodb的buffer参数调大,连接数调大、缓存的参数优化;
(4).架构方面:读写分离,一主多从,高可用。
13.脏读、不可重复读、幻读是什么
(1).脏读:a开启了一个事务并更新了数据,但是未提交,b读取了a更新的数据,但是a此时进行了事务回滚,b读到的就是脏数据
(2).不可重复读:事务a多次读取同一数据,事务b在a多次读取过程中对数据做了更新并提交,导致a在多次读取数据时结果不一致。
(3).幻读:管理员a将学生成绩从具体分数改为abcde等级,但是管理员b在这个时候插入了一条具体分数的记录,当管理员a修改结束后,发现还有一条数据没改过来,就像发生了幻觉一样。
不可重复读和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除,解决不可重复读只需锁住满足条件的行,解决幻读需要进行锁表。
14.读写分离的好处:分摊服务器的压力,提高系统的处理效率。分担主服务器的读取压力,间接提高了主库的写入压力。因为读请求全部发给了从库。
二.Nginx
1.Nginx介绍:**nginx是一款轻量级、高性能、稳定性高、并发性好的http和反向代理服务器(支持https),同时也是一款负载均衡软件,可以做7层和四层负载均衡。可以做动静分离,nginx解析静态页面的效率非常高,但是动态请求很鸡肋。nginx功能非常强大,常用的比如地址重写,防盗链,会话保持,访问控制,流量控制等。**
2.Nginx的特性
(1).作为 Web 服务器:相比 Apache,Nginx 占用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应。
(2).作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perl要好的多。
(3).作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
(4).Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器;Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的热升级。
3.Nginx和Apache 之间的不同点?
(1).最核心的区别:
Ⅰ.apache是同步多进程模型,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。
Ⅱ.需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑apache 。
(2).两者优缺点比较:
Ⅰ.Nginx 配置简洁,Apache 复杂 ;Nginx 静态处理性能比 Apache 高 2倍以上 。
Ⅱ.Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;Apache 的组件比 Nginx 多 。
Ⅲ.apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程。
Ⅳ.Nginx处理静态文件好,耗费内存少;动态请求由apache去做,Nginx只适合静态和反向。
Ⅴ.Nginx适合做前端服务器,负载性能很好;Nginx本身就是一个反向代理服务器 ,且支持负载均衡。
4.Nginx如何处理HTTP请求
(1).nginx会根据过来的http请求头里的Host字段里的值,来判断使用哪个server{}。
(2).如果请求头里没有Host字段,或者Host字段里的值,和Nginx配置文件里的server{}里的{server_name}都不匹配,则使用第一个server{},来处理这个请求。
(3).如果请求头里的Host字段里的值和Nginx配置文件里的某个server{}里的{server_name},匹配上了,则使用这个server{},来处理这个请求。
5.反向代理与正向代理的区别?为什么使用反向代理?
(1).反向代理与正向代理的区别:
Ⅰ.代理对象不同:正向代理代理的是客户端,反向代理代理的是服务器。正向代理帮助客户访问其无法访问的服务器资源,反向代理帮助服务器做负载均衡,另外,由于客户端跟真实服务器不直接接触,能起到一定安全防护的作用。
Ⅱ.架设主体不同:正向代理一般是客户端架设的,比如在自己的机器上装一个代理软件,反向代理一般是服务器架设的,通常是在机器集群中部署个反向代理服务器。
Ⅲ.保护对象不同:正向代理保护对象是客户端,反向代理保护对象是原始资源服务器。
Ⅳ.作用目的不同:正向代理主要目的是解决访问限制问题,而反向代理一方面是作为负载均衡,再就是起到安全防护的作用。
(2).为什么使用反向代理:
Ⅰ.安全:如果使用反向代理,请求不会直接到达Web服务器。它们有助于保护Web服务器免受已知漏洞的影响。
Ⅱ.缓存:一些反向代理可以充当缓存机器。通常,如果您在一分钟内发送一千个请求请求相同的资源,这些请求将一遍遍地到达请求相同资源的服务器,浪费了资源和宝贵的时间。首次请求资源时,反向代理可以缓存(保存)获取的资源,等下次需要相同资源时,直接可以获取,节省了资源和时间。
Ⅲ.负载均衡:反向代理最大的优点就是可以充当负载均衡器,高流量网站通常面临每分钟处理大量请求的问题,这可能会降低其系统性能并破坏响应时间。使用反向代理可以保证更好的用户体验和更快的响应。
反向代理在请求和响应周期中很有用。它可以提高安全性,也可以为访问高流量网站的用户提供更快速的响应。
6.Nginx有哪些优点?
(1).可以高并发连接:官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。
(2).内存消耗少:Nginx+PHP(FastCGI)服务器,在3万并发连接下,开启10个Nginx进程消耗150MB内存,15MB10=150MB,开启的64个PHP-CGI进程消耗1280内存,20MB64=1280MB,加上系统自身消耗的内存,总共消耗不到2GB的内存。
(3).成本低廉:购买F5BIG-IP、NetScaler等硬件负载均衡交换机,需要十多万到几十万人民币,而Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费试用,并且可用于商业用途。
(4).配置文件非常简单。
(5).可以做负载均衡,会话保持,能实现动静分离,可以做反盗链,支持Rewrite重写。
Rewrite重写:能够根据域名、URL的不同,将http请求分到不同的后端服务器群组。
(6).内置的健康检查功能:如果NginxProxy后端的某台Web服务器宕机了,不会影响前端的访问。
(7).节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。
(8).支持热部署:Nginx支持热部署,它的自动特别容易,并且,几乎可以7天*24小时不间断的运行,即使,运行数个月也不需要重新启动,还能够在不间断服务的情况下,对软件版本进行升级。
7.Nginx如何优化?
1.更改nginx服务的默认用户;
2.优化nginx启动进程个数,一般设置成与逻辑CPU数量相同;
3.配置nginx worker进程打开的最大文件数;
4.调整nginx单个进程允许的客户端最大并发连接数;
5.开启gzip压缩实现性能优化;
6.开启高效文件传输模式;(sendfile on tcp_nopush on tcp_nodelay on)
7.绑定不同的nginx进程到不同的CPU上;
8.限制网站来源的IP访问;
9.隐藏版本信息;(在配置文件http模块中添加server_tokens off)
8.LVS、Nginx、HAproxy 有什么区别?
(1).nginx工作在网络的第7层,对网络的依赖较小,安装和配置比较简单,内存消耗小。
(2).lvs就比较依赖网络环境,工作在4层,不支持7层规则修改。
Ⅰ.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生;
Ⅱ.稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
Ⅲ.应用范围比较广,可以对所有应用做负载均衡;
(3).HAproxy的特点:
Ⅰ.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
Ⅱ.配置简单,支持url检测后端服务器状态;
Ⅲ.仅做负载均衡软件使用,在高并发情况下,处理速度高于 nginx;
Ⅳ.TCP层多用于Mysql从(读)服务器负载均衡。
9.四七层负载均衡有什么区别?
(1).四层负载均衡(基于IP+端口的负载均衡):**所谓四层负载均衡,也就是主要通过报文中的目标ip地址和端口,再加上负载均衡设备设置的服务器选择方式(分发策略,轮询),决定最终选择的内部服务器。**
(2).七层的负载均衡(基于虚拟的URL或主机IP的负载均衡):所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
| | 四层负载均衡 | 七层负载均衡 |
+----------+-------------------------+----------------------------------------------+
| 基于 | 基于IP+Port的 | 基于URL或主机IP等。 |
+----------+-------------------------+----------------------------------------------+
| 类似于 | 路由器 | 代理服务器 |
+----------+-------------------------+----------------------------------------------+
| 复杂度 | 低 | 高 |
+----------+-------------------------+----------------------------------------------+
| 性能 | 高;无需解析内容 | 中;需要算法识别 URL和 HTTP head 等信息 |
+----------+-------------------------+----------------------------------------------+
| 安全性 | 低, | 高, |
+----------+-------------------------+----------------------------------------------+
| 额外功能 | 无 | 会话保持,图片压缩,防盗链、地址重写、流量限制等
总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。**四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高**,而七层**负载均衡的优势则体现在功能多,控制灵活强大。**在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。
10.什么时候用haproxy什么时候用nginx什么时候用lvs
(1).在并发量大得时候可以用lvs,中小型公司可用nginx或者haproxy。
(2).如果只是单纯的负载均衡可以用haproxy,但如果是web服务器的话,建议使用nginx。
(2).比如RabbitMQ集群,有三台RabbitMQ,我们都知道RabbitMQ镜像模式使用还是比较多的,每个节点都提供服务,但我们总不能给开发提供三个RabbitMQ的节点,也不能只提供一个节点的ip,所以就可以使用lvs或者haproxy给三个RabbitMQ提供一个VIP,这样开发人员可以用这个vip写进前端的配置中。不至于所有数据都往一个RabbitMQ上发送。
11.为什么要做动、静分离?
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态网页的速度,降低对后台应用访问,将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则将静态请求全部到nginx服务器,动态资源请求全部到tomcat,达到动静分离的目的。
12.upstream支持的负载均衡算法
(1).轮询(默认):可以**通过weight指定轮询的权重**,权重越大,被调度的次数越多;
(2).ip_hash:可以实现会话保持,将同一客户的IP调度到同一样后端服务器,可以解决session的问题,不能使用weight;
(3).url_hash:按请求的url的hash进行调度,从而使每个url定向到同一服务器,使用第三方的url_hash模块;
(4).fair:可以根据请求页面的大小和加载时间长短进行调度,使用第三方的upstream_fair模块。
13.Nginx是如何实现高并发的:异步非阻塞,nginx采用一个master进程,多个woker进程的模式。
14.为什么Nginx不使用多线程:因为每个进程或线程都会分配 cpu 和内存,导致并发过大耗光服务器资源。nginx采用单线程来异步非阻塞处理请求不会为每个请求分配cpu和内存资源,节省了大量资源,所以Nginx支持更高的并发。
15.Nginx如何开启压缩?开启压缩之后有什么作用?
配置文件里启用Gzip压缩。作用:压缩文件大小,提高页面加载速度。
16.nginx防盗链怎么做:需要使用一个模块ngx_http_referer_module,并在server块中添加Vaild_referers none;
17.Nginx如何记录真实客户端的ip地址:在Nginx的配置文件中,增加 proxy_set_header X-Forwarded-For $remote_addr。
三.LVS
1.LVS简介:基于系统内核工作的四层负载均衡软件,稳定性强工作在网络四层,成本低,配置简单,支持多种算法,支持多种工作模式。不足:只能做四层负载均衡,不适合小规模使用。
2.LVS的工作模式
(1).NAT模式(LVS-NAT):网络地址转换模式,进站/出站的数据流量经过分发器/负载均衡器(IP负载均衡,他修改的是IP地址) --利用三层功能。
(2).直接路由(LVS-DR:Direct Routing)模式:只有进站的数据流量经过分发器/负载均衡器(数据链路层负载均衡,因为他修改的是目的mac地址)--利用二层功能mac地址。
(3).IP隧道模式(LVS/TUN):只有进站的数据流量经过分发器/负载均衡器。
(4).双向转换模式(FULL-NAT):通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发。
(1).nat模式
Ⅰ.原理:把客户端发来的数据包的ip头的目的地址,在负载均衡器上换成其中一台的rs的ip地址,并发至次rs进行处理,处理完之后,将数据包交给负载均衡器,负载均衡器将源ip改为自己的vip,把目的ip改为客户端的ip。期间不论进来的流量和出去的流量都经过负载均衡器。
Ⅱ.优点:集群中的物理服务器可以使用任何支持tcp/ip操作系统,仅负载均衡器需要一个合法ip
Ⅲ.缺点:扩展性有限,当服务器节点增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都要经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变得很慢
(2).tun模式(隧道模式)
Ⅰ.原理:首先要知道,互联网上的请求包一般都很小,而应答包却很大。那么隧道模式就是把客户端发来的数据包,封装一个新的ip头标记(仅目的ip)发送给rs,rs收到后先把数据包的头解开,还原数据包,处理后直接返回给客户端,不需要再经过负载均衡器,注意,由于rs需要对数据包进行还原,所以必须支持Iptunnel协议,所以在rs的内核中,必须编译支持Iptunnel这个选项
Ⅱ.优点:负载均衡器只负责分发请求包,而rs直接返回给客户,减少了负载均衡器的大量数据流量,负载均衡器就能处理很大量的请求,这种方式一台负载均衡器能够为很多rs进行分发,而且跑在公网上就能对不同地域进行分发。
Ⅲ.缺点:隧道模式的rs节点都需要合法ip,这种方式需要所有服务器支持IP tunneling协议,服务器可能只局限在部分linux系统上。
(3).DR模式
负载均衡器和rs使用同一个ip对外服务,但只有dr对ARP请求进行响应,所有的rs对本身这个ip的arp请求保持静默,也就是说网关会把对这个服务ip的请求全部定向给dr,dr根据调度算法找出对应的rs,把目的MAC地址改为rs的MAC地址(因为ip一致),并将请求转发到这台rs,rs收到数据包,处理完成后由于ip一致,直接将数据返给客户端,等于直接从客户端收到数据包无异,处理完直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和rs之间必须在同一个广播域,也可以理解为在同一台交换机上。
Ⅱ.优点:和tun模式一样,负载均衡器只负责转发请求,应答包通过单独的路由方法返回给客户端,与tun模式相比,dr模式不需要隧道结构,因此可以使用大多数操作系统作为物理服务器
Ⅲ.缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
3.LVS的算法
静态算法:rr轮询,按顺序一个一个来,均等对待每一台服务器,不考虑服务器的实际连接数和系统负载
wrr:根据节点权重和顺序分发请求
sh:匹配客户端最近一次访问的服务器节点,将请求交给这个服务器
动态算法:
lc:动态将请求调度到已建立连接数最少的服务器
wlc:调度器自动问询服务器的负载情况,动态调整权值
四.Keepalived
1.keepalived的工作原理
keepalived是通过vrrp(虚拟路由冗余协议)实现的,将n台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上有对外提供服务的vip,master会发组播,当backup接收不到vrrp包的时候,会认为master宕掉了,这时会根据优先级选举一个backup成为master,这样就保证了集群的高可用
2.对什么做过高可用,怎么实现的
对nginx的负载均衡做过高可用,还有mysql双主双从做过。负载均衡集群通过keepalived提供对外服务的vip,keepalived可以解决心跳故障,但是无法解决nginx的故障,需要利用keepalived的script模块执行一个健康检测脚本,脚本的内容就是检测nginx负载均衡集群的健康状况,当负载均衡器其中一个节点宕掉了就停止该节点上的keepalived服务。
五.Tomcat
1.Tomcat的默认端口是多少,默认发布目录在哪?怎么修改?
默认端口**8080;默认发布目录:tomcat安装目录下的webapps/ROOT**;
找到tomcat的安装目录,有个conf文件夹,里面有个server.xml。
2.tomcat怎么优化
(1).性能方面的优化:
Ⅰ.内存优化:-Xms java虚拟机初始化时的最小内存、-Xmx java虚拟机可使用的最大内存;
Ⅱ.并发优化:maxThreads客户请求最大线程数、minSpareThreads tomcat初始化时创建的socket线程数、maxSpareThreads tomcat连接器的最大空闲socket线程数、enableLookups 若设置为true,则支持域名解析,可把ip地址解析为主机名、redirectPort 在需要基于安全通道的场合,把客户请求转发到基于ssl的redirectPort端口、acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads)、connectionTimeout连接超时;
Ⅲ.缓存优化:compression 打开压缩功能、compressionMinSize 启用压缩的输出内容大小,默认为2kb、compressableMimeType 压缩类型、connectionTimeout定义建立客户连接超时的时间,如果为-1,表示不限制建立客户连接的时间;
(2).安全方面的优化:
Ⅰ.降权启动:防止不法分子通过tomcat获得root权限;
Ⅱ.修改端口号:修改tomcat配置文件server.xml中的http连接器端口号,防止黑客攻击;
Ⅲ.更改tomcat的关闭指令:
隐藏服务类型:在server.xml文件中,为connector元素添加server=” ”,注意不是空字符串,是空格组成的长度为1的字符串,或者输入其他的服务类型,在response header中不显示server的信息。
六.Redis&Memcached构建缓存数据库
1.Redis介绍: redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
2.Redis的特点
(1).丰富的数据结构 -----String,list,set,hash等数据结构的存储;
(2).Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
(3).支持事务---------------事务是指“一个完整的动作,要么全部执行,要么什么也没有做”;
(4).Redis支持master-slave(主-从)模式应用。
3.Redis相比较Memcached有什么优势
(1).Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2).Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
(3).Redis支持master-slave(主-从)模式应用。
4.redis数据持久化 – 两种方式
(1).RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
特点:
Ⅰ.周期性;
Ⅱ.不影响数据写入; #RDB会启动子进程,备份所有数据。当前进程,继续提供数据的读写。当备份完成,才替换老的备份文件。
Ⅲ.高效; #一次性还原所有数据
Ⅳ.完整性较差; #故障点到上一次备份,之间的数据无法恢复。
(2).AOF(Append Only File):则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
特点:
Ⅰ.实时性;
Ⅱ.完整性较好;
Ⅲ.体积大。 #记录数据的指令,删除数据的指令都会被记录下来。
5.redis有几种集群模式
(1).主从模式:提供数据的多冗余,主节点和从节点提供相同的数据,主节点宕机后,集群不可用。
(2).哨兵模式:哨兵模式是官方推荐的高可用方案,但不是真正的高可用。哨兵模式是在主从集群基础上实现的,每个节点部署哨兵,涉及到主观下线和客观下线,当半数以上的哨兵认为master宕机后,会根据优先级从从节点中选取一个成为新的master,当坏掉的master恢复后,会自动成为从slave。解决了主从集群的单点故障问题,但是所有节点提供相同的服务,资源有点浪费。
注:redis哨兵原理:哨兵是一个独立的进程,原理就是哨兵通过发送命令,等待redis主节点响应,超过指定时间没有响应,哨兵会认为主节点下线了,选举从节点成为主节点。其中涉及到一个主观下线和客观下线。指定时间内哨兵没收收到目标节点的响应会认为 该节点主观下线,当半数以上的哨兵认为该节点下线后则认为客观下线,然后会发起选举,选举从节点成为主节点。
(3).去中心化集群模式:采用无中心化结构,每个节点保存数据和整个集群的状态,每个节点中间能够进行内部通讯,redis-cluster的数据使用分片的方式实现,redis-cluster集群内置了16384个哈希槽,0-16383,当要存储一个key-value时,redis会对key进行crc16运算出一个结果,用这个结果对16384进行取余,然后将这个key分配到对应的节点哈希槽中。当连接任何一个节点获取这个数据时,也会有这样的算法,然后内部跳转到存放key的这个节点上。去中心化一般也会做成主从模式,一个主节点对应一个或多个从节点,当主节点宕机后,从节点会成为新的主节点。当主节点没有从节点时,集群不可用,当主节点和从节点同时失效,集群不可用。
6.redis和mysql的区别
(1).mysql支持通用sql语句,redis不支持。
(2).mysql使用固定表结构,可用复杂查询。
(3).mysql的数据存储方式单一,redis数据存储比较灵活。
(4).mysql数据存储于磁盘,对于高并发的读写请求,磁盘io是很大的瓶颈。redis的数据存储于磁盘或者内存中,读写效率更高。
7.reids上存储什么数据
热点数据:一般会存一些经常查询且变动不是很频繁的数据;
比如:新闻网站实时热点、微博热搜等,需要频繁更新。总数据量大得时候直接从数据库中查询会影响性能。
电商网站信息:大型电商平台初始化页面数据的缓存。比如去哪网购买机票的时候首页的价格和你点进去的价格会有差异
8.mysql和redis为什么结合使用
当网站的处理和访问量非常大的时候,我们数据库的压力就变大了,数据库同时处理数据的能力就会大打折扣。使用redis,将表中经常访问的数据记录到Redis中,用户查询时先去查询redis中的数据,没有的话再查询mysql,由于数据是存储在内存中的,处理速度会非常快。
七.Zabbix
1.zabbix的优缺点
(1).Zabbix的优点:开源,无软件成本投入;server端对设备性能要求低;自带多种监控模板,支持分布式集中管理,有自动发现功能,可以实现自动化监控。
(2).zabbix的缺点是需在被监控主机上安装agent;所有数据都存在数据库里,产生的数据很大,项目批量修改不方便。图形单调。
2.zabbix的监控模式
(1).被动模式:server端向agent端请求获取监控项配置的相关数据,agent端响应,并将数据发送给server端
(2).主动模式:agent端主动向server请求与自己相关监控配置,主动将server配置的监控项的相关数据发送给server端
3.zabbix自定义监控怎么做
先创建监控脚本,测试一下能否获取到我们想获取的值,然后在zabbix_agentd.conf.d目录下创建以.conf结尾的文件,在文件中写入UserParameter=,,key就是自定义监控项的名字,command是要执行的命令或者你创建的脚本的执行路径
4.你们用Zabbix监控什么,怎么做的,说的详细一点
(1).cpu利用率,cpu负载、磁盘使用情况
(2).Zabbix监控nginx
Ⅰ.
Ⅱ.
Ⅲ.
(3).Zabbix监控Mysql
Ⅰ.监控mysql主从复制状态
[1].自定义监控项参数:vim /etc/zabbix/zabbix_agentd.d/status.conf
UserParameter=mysql.status,mysql -u root -e "show slave status\G" | grep -E 'Slave_IO_Running: Yes|Slave_SQL_Running: Yes' | grep -c Yes
[2].设置完成后重新启动zabbix-agent
Ⅱ.**监控主从是否存在延迟**
[1].自定义监控项参数:vim /etc/zabbix/zabbix_agentd.d/status.conf
UserParameter=mysql.ab,mysql -u root -e "show slave status\G" | grep "Seconds_Behind_Master" | awk -F: '{print $2}'
[2].设置完成后重新启动zabbix-agent
Ⅲ.监控mysql吞吐量
[1].先获取到mysql吞吐量的信息(监控MYSQL的插入、查询、删除、更新等);
[2].创建脚本获取对应的值:cat /etc/zabbix/zabbix_agentd.d/youngfit.sh
#!/bin/bash
com_insert(){ mysqladmin extended-status | awk '/\/{print $4}' }
com_slow(){ mysqladmin status | awk '{print $9}' }
com_delete(){ mysqladmin extended-status | awk '/\/{print $4}' }
com_update(){ mysqladmin extended-status | awk '/\/{print $4}' }
com_select(){ mysqladmin extended-status | awk '/\/{print $4}' }
$1
给脚本执行权限:chmod 777 /etc/zabbix/zabbix_agentd.d/youngfit.sh
[3].自定义监控项参数:cat /etc/zabbix/zabbix_agentd.d/status.conf
UserParameter=mysql_status[*],bash /etc/zabbix/zabbix_agentd.d/youngfit.sh "$1"
重启zabbix-agent
(4).Zabbix监控redis
Ⅰ.
Ⅱ.
Ⅲ.
5.zabbix分布式监控有什么特点
主要缓解server监控端的压力,当agent过多时,server需要跟多个agent进行交互,数据过多时,server承受不住那么大的压力。所以可以在server和agent之间增加proxy,proxy代替server搜集数据,然后将数据统一发送给server
6.zabbix的自动发现功能
创建发现规则,扫描一个规则范围内的ip,然后创建发现主机后的action动作,我们一般都有创建好的模板,模板关联某个主机群组(有监控项、触发器、动作),发现主机后,将它添加到主机群组,实现自动化监控
7.zabbixagent端能够执行脚本,但是zabbix server端zabbix get获取不到数据,响应超时,为什么
可能是防火墙没有开放,可以看一下日志,如果没有报错的话说明请求根本就没有发送过去,可以看一下agent端的配置文件有没有问题,如果有错误日志可以看一下是拒绝访问还是那些问题。
八.Jenkins
1.Jenkins的工作流程
(1).开发者将新版本push到git server (Gitlab)。
(2).build
Ⅰ.从git仓库拉取代码(需要git插件,jenkins服务器下载git,并将jenkins的公钥配置到仓库的ssh密钥,jenkinsweb界面配置自己的私钥)
Ⅱ..通过maven编译打包(可以达成war包或jar包,需要jdk和maven的环境和插件),将打包好的包发送到web服务器的网站发布目录(需要将jenkins的公钥发送到web服务器对应的用户家目录)
2.Jenkins的工作原理:Jenkins的思想就是自动化部署,自动化的具体体现在:当我们向版本库提交新的代码后,应用服务器(Tomcat)就会自动从我们的版本库上拉去新的war包,然后重新部署,用户或测试人员看到的就是最新的应用程序。
3.jenkins构建项目之后,发布有问题,该如何处理:回滚到稳定版本。
4.jenkins功能强大到哪里:jenkins可以进行参数化构建,版本回退(可以基于修订号以及标签、分支进行版本回退或构建)。也可以实现自动发布,定时发布,需要在jenkins和gitlab仓库配置gitlab webhook插件。
九.Ansible
1.Ansible有什么优势
(1).轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2).批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3).使用Python编写,维护更简单,ruby语法过于复杂;
(4).支持sudo;
2.你用Ansible写过什么剧本:简单的有lnmp架构的部署,还有批量部署jdk+tomcat+jenkins
3.ansible的常用模块
(1).远程复制模块:copy -m copy –a ‘src=/ dest=/’
owner指定属主、group指定属组、mode指定权限,backup在覆盖之前将源文件备份
(2).yum模块:-m yum –a “name= state= ” state状态(absent卸载、latest最新的、removed卸载)
(3).服务管理模块:service –m service –a “name= state= ” (restart重启、start启动、enable开机自启yes|no)
(4).文件模块:file –m file –a “path= mode= state=” (owner属主、group属组、mode权限、path路径、recurse递归设置文件属性,只对目录有效yes表示使用递归设置、touch创建一个新的文件、directory创建一个目录,当目录存在不会进行修改)
ansible命令参数:ansible
-i (主机文件) -m (指定模块) -a(模块参数) -v(详细显示)
4.Ansible剧本格式
- hosts: (控制节点)
user: (指定用户)
tasks: (任务元素,一个剧本只能有一个tasks)
- name: (定义tasks的名称,可以有多个name)
file: (使用的模块)
tags:
notify:
handlers: (用于当前关注的资源发生变化时采取的指定的操作)
- name: (名称要跟notify定义的对应)
tags: (给指定任务定义一个调用标识)
十.Elk+Filebeat+Kafka
1.ELK介绍:logstash安装在需要搜集日志的主机上,负责搜集日志,并发送给es集群,es集群负责存储日志数据,kibana提供可视化日志分析界面。
2.logstash:主要是用来进行日志的搜集、过滤、分析的工具,支持大量的数据获取方式,一般工作方式为C/S。client端安装在需要搜集日志的主机上,server端负责将受到的各节点日志进行过滤,修改并发送到elasticsearch上。
注:logstash有哪些组件
(1).input:配置日志搜集的位置;
(2).filter:过滤作用;
(3).output:配置输出es集群的ip地址;
3.Filebeat:轻量级数据收集引擎。(功能虽少但是资源消耗也小)
注:为什么用 Filebeat ,而不用原来的 Logstash 呢?
原因很简单,Logstash资源消耗比较大。
4.logstash的过滤功能用过吗,过滤的是什么
logstash过滤功能用过,实用filter模块过滤日志或者数据,但是我们用的是filebeat实现过滤功能的,直接在采集的时候过滤不需要的内容,incloud_lines指定记录包含某些内容的行。exclude_lines指定过滤包含某些内容的行。TIPS:与multiline联合使用的时候,会针对合并后的记录再过滤。
5.搜集过什么数据,怎么过滤的
数据没有搜集过,只搜集过日志信息,用来给开发优化代码。比如nginx的访问日志,其他服务的错误日志,主要搜集error和warn信息。通过filebeat的处理器进行过滤。
十一.RabbitMQ
1.RabbitMQ普通模式和镜像模式的区别
(1).普通模式:以两个节点(a、b)来说明,对于Queue(消息队列载体)来说明。对于Queue来说,消息实体只存在于其中一个节点a(或者b),a和b两个节点仅有相同的元数据,即队列的结构,当消息进入a节点的Queue后,consumer从b节点消费时,RabbitMQ会临时在a、b间进行传输,把a中的消息实体取出,并经过b发送给consumer。所以consumer应尽量连接每一个节点从中取消息,即对于同一个逻辑队列,要建立多个节点建立物理Queue。否则无论consumer连a或b,出口总在a,会产生瓶颈。
(2).镜像模式:将需要消费的队列变成镜像队列,存在于多个节点中,这样就可以实现RabbitMQ高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取,缺点就是,集群内部的同步通讯会占用大量的网络宽带。
镜像模式适用于对可靠性要求比较高的场合中使用。
2.RabbitMQ和kafka的区别
(1).RabbitMQ:基于AMQP协议实现的,这个协议主要特征是面向消息队列、路由(包括点对点和发布订阅)、可靠性、安全。用于在企业系统内对数据一致性,稳定性和可靠性要求很高的场景,对性能和吞吐量的要求在其次。
(2).kafka:基于pull的模式来处理消息消费,追求高吞吐量,目的是用于日志的搜集和传输,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据搜集业务。
3.RabbitMQ集群是做七层负载均衡还是四层:使用lvs或者haproxy做四层负载均衡。
8.堡垒机有什么作用
(1).访问控制:可以确保运维人员在其账号有效权限、期限内合法访问操作资源,降低操作风险,以实现安全监管目的,保障运维操作人员的安全、合法合规、可控制性。
(2).账号管理:进行账号集中管理与密码的批量修改,并可一键批量设置SSH秘钥对。
(3).资源授权:能够对用户、资源、功能作用进行细致化的授权管理,解决人员众多、权限交叉、资产繁琐、各类权限复制等众多运维人员遇到的运维难题
(4).指令审核:堡垒机具有安全审计功能,主要对审计运维人员的账号使用情况,包括登录、资源访问、资源使用等。针对敏感指令,堡垒机可以对非法操作进行阻断响应或触发审核的操作情况,审核未通过的敏感指令,堡垒机将进行拦截
(5).审计录像:运维人员在堡垒机中所进行的运维操作均会以日志的形式记录,管理者即通过日志对微云人员的操作进行安全审计录像。
(6).身份认证:可以为运维人员提供不同强度的认证方式,既可以保持原有的静态口令方式,还可以提供微信、短信等认证方式。
(7).操作审计:可以将运维人员所有操作日志集中管理与分析,不仅可以对用户行为进行监控与拦截,还可以通过集中的安全审计数据进行数据挖掘,以便于运维人员对安全事故的操作审计认定。
9.堡垒机的应用场景?
(1).互联网 + 业务:互联网 + 业务云上资源众多,大量运维服务暴露在公网,且由于服务高度公开,容易被外部攻击者盯上。堡垒机在业务资源远程运维时,通过隐藏真实运维端口与真实管理账户,解决远程运维安全问题。同时产品提供云上服务器运维日常审计,通过运维规则库梳理不良运维习惯,减少运维事故,帮助业务系统长期稳定运行。
(2).企业:企业内部通常存在大量经营数据等敏感信息,这些信息在行业中具有一定价值,且容易泄密。堡垒机为账号与岗位进行细颗粒度的权限划分,确保运维人员无法越权操作。
(3).金融:金融行业具有大量金融及个人信息数据,且存在大量第三方代维机构,代维机构是否违规操作是金融企业需要重点关注的一个问题。堡垒机为账号与岗位进行细颗粒度的授权控制,严格落实岗位规范,确保运维人员无法越权操作。通过 AI 引擎对运维行为进行深度分析,挖掘内部异常操作,防止金融数据被非法利用。
(4).政务民生:政务民生在互联网化过程中,需要大量第三方机构进行建设和运维。堡垒机可将运维方与管理方的权责分明,通过操作审计对运维问题进行追溯,确保安全事故有效定责。通过 AI 引擎对运维行为进行深度分析,挖掘内部异常操作,对民生政务数据(医疗、教育、社保、税务等信息)泄露进行预警。
10.上家公司是做什么的,你参与过什么项目,你负责什么工作内容?出现过什么问题?如何解决的?
(1).保障业务系统长期稳定运行
毕竟业务系统要是出现一点差错,用户就要投诉,所以运维工程师最核心的工作就是保证业务系统能够稳定运行。
首先要知道业务跑在什么上,一般来说网站服务器都是nginx、apache等,依赖mysql数据库进行数据储存,依靠PHP进行解析,所以运维工程师必须掌握LNMP、LAMP等环境部署的知识。
(2).保障数据安全可靠
Ⅰ.有时候需要手动改数据库的内容,就要学会掌握mysql数据库的增删查改知识;
Ⅱ.有时候需要应对数据库的服务器硬件坏了,就需要Mysql主从复制以备不时之需;
Ⅲ.有时候需要还原数据库,就需要学会mysql增量备份和恢复,以还原到指定的时间点;
Ⅳ.有时候为了增加服务器安全性,就要通过iptables来控制公司的IP或者跳板机IP访问权限。
(3).构建监控报警体系
运维工程师常用的是zabbix、nagios来进行报警监控,如果没有监控运维就是瞎子,所以要先构建报警监控体系,此后就要解决系统故障。一般来说,常见的故障有应用故障、数据库故障、网线故障等等,有的是软件故障,有时候是硬件故障,而一个有经验的运维工程师能在第一时间定位故障原因。
2.Redis去中心化的优点?
1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2.客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
3.节点的fail是通过集群中超过半数的节点检测失效时才生效。
七.面试第六弹
1.准备自我介绍,完善的自我介绍(你好,我叫小明,我在上海云科技有限公司工作了两年,公司主要做线上教育的,我主要负责虚拟机的管理,
日常应用服务功能的巡检,日常基础应用服务的维护,日常故障的排查以及处理。一些基础环境的部署,比如Nginx,Mysql,Redis,消息队列等等。。。我自我介绍完毕,您有什么想问的?)
2.准备上家公司,准备的要完善,上家公司是做什么的,你负责什么项目?项目中负责什么工作内容?
物理服务器配置:
cpu:64核,内存:128G 磁盘:1块就是2T空间,有的服务器能插6块,有的能插8块,自己看着说就行
cpu:128核心,内存:256G
虚拟机通常配置:
cpu:2核 内存:4G 一般跑的都是比较轻量级的应用,不太占用资源(cpu,内存)
cpu:4核 内存:8G
cpu:8核 内存:16G
cpu:16核 内存:32G/64G 一般最大也就这个了