linux的一些问题个人总结

目录

在工作中遇到的问题?

挖矿病毒

mysql主从失效的问题

mysql相关问题

数据库的类型

数据库的引擎

设置索引的原则

事务的四个特性

脏读、不可重复读、幻读是什么

事务的隔离级别

常用的SQL语句

数据库的数据类型

mysql的数据备份有几种

主从复制原理(主从复制方式:binlog日志、gtid)

主从复制方式

主从复制的作用

主从复制延迟的原因

mysql主从数据不一致的原因

mysql读写分离的流程

读写分离的好处

MySQL数据库的优化

nginx面试相关问题

介绍一下nginx

nginx工作原理

nginx有什么功能?

apache和nginx的区别,为什么不用apache

nginx的升级方式

平滑升级的流程

动静分离的目的

四层七层负载均衡的区别

HTTP的请求方式

异步非阻塞

nginx负载均衡怎么做?

负载均衡的算法有哪些

nginx如何获取客户端的地址

nginx如何隐藏版本信息

Nginx会话保持

会话保持的方式

nginx开启gzip的好处

访问网站响应比较慢

防盗链模块

Nginx流量控制

漏桶算法

HTTPS优点

HTTPS缺点

https访问流程

nginx优化的方向有哪些

tomcat面试相关问题

tomcat怎么优化

jenkins面试相关问题

jenkins是什么?功能有哪些?

jenkins都需要什么插件?

maven是来干嘛的,编译打包的时候可以加什么参数

jenkins的工作流程

jenkins怎么实现版本回退?

jenkins参数化构建的流程

jenkins自动化构建流程

Redis面试相关问题

redis缓存雪崩

redis缓存穿透

Redis上存储什么数据,针对内存过高怎么优化

Redis的优缺点

Redis数据库持久化的方式有几种?

Redis主从同步原理

Redis哨兵原理是什么?

Redis集群模式有几种?以及区别

gitlab和github面试相关问题

gitlab,gitee,github

git与svn的区别

zabbix面试相关问题

zabbix监控的流程

zabbix监控的模式有几种

zabbix遇到过什么问题

zabbix监控过什么?

zabbix优缺点

Zabbix监控nginx哪些指标,具体怎么监控

zabbix分布式监控有什么特点?怎么部署?

zabbix自定义监控怎么做

Zabbix钉钉自动监控报警

Zabbix电话报警怎么做?

zabbix的自动发现功能怎么做?

zabbix图形化怎么配置

Zabbix邮箱mailx自动报警部署

ansible面试相关问题

Ansible的原理是什么?

Ansible都有哪些模块?有什么作用?

你都用Ansible做过什么?怎么写的

lvs面试相关问题

介绍一下lvs

LVS 四种工作模式原理、以及优缺点比较

haproxy面试相关问题

介绍一下haproxy

haproxy什么场景使用四层负载均衡,什么是时候使用七层

四七层负载均衡的区别?

网站使用四层负载均衡还是七层负载均衡

nginx、haproxy、lvs的区别

什么时候用haproxy什么时候用nginx什么时候用lvs

keepalived面试相关问题

keepalived作用和工作原理?

keepalived对什么做过高可用,怎么实现的

ELK面试相关问题

ELK的工作流程?

ES集群你们有几台?里面索引分片机制是什么?

你们都收集什么日志?干嘛用的

ES优化

elasticsearch的特点,工作原理

kafka的工作原理是什么

kafka的主要作用有什么?

Elasticsearch分片

ES为什么要实现集群

分片存储规则

fkelk工作流程

iptables面试相关问题

介绍一下iptables

四表五链

iptables和Firewalld的区别

如何用防火墙设置允许某个ip来访问本机22号端口

Centos7的启动流程是什么

面试常问相关问题

CentOS 6和CentOS 7的区别

centos和ubantu的区别

在取消挂载的时候取消不掉,怎么查看

linux中创建文件失败,但是磁盘空间也有,是什么原因

systemctl启动和绝对路径启动的区别

软链接和硬链接的区别

查看系统资源的常见命令有哪些

raid-磁盘阵列

cpu的平均负载和利用率有什么区别

python和shell有什么区别

固态磁盘(ssd)与机械磁盘的区别

location匹配规则

高可用和负载均衡的区别

linux系统优化

进程和线程的区别

写过什么脚本


在工作中遇到的问题?

挖矿病毒

有一天值班的时候,突然收到一条报警信息、说内存和cpu占用很高、服务器变的很卡、然后我就用top命令查看了一下、发现有一个程序占了cpu的500%、服务器是8核的、当时对这个进程没有什么印象、然后也询问了一下开发人员、开发人员说这个进程也不是他们的进程、于是我就kill直接杀死了、但是过了一会这个程序他又自己起来了,当时也是第一次遇见这种情况、就上网搜了一下、发现应该是中了挖矿病毒、最后经过一系列的排查、发现他是由一个普通用户执行起来、这个用户也不是我创建的、于是我就把这个普通用户给删了、但是这个用户他会自己创建、当时也比较头疼、最后我通过find命令跟这个进程的名字找到了这个文件的所在位置、他能自动的启动原因是因为有一个计划任务在执行一个脚本、它会一直查询这个进程在不在、所以我不管是把进程杀死还是把这个用户给删了、他还是会启动、因为他的源文件还在、最后是把进程杀掉、把计划任务也删掉、源文件通过find命令找到也给他删掉、这个文件还是个隐藏文件、最后再把那个用户也给删掉、然后才解决。

mysql主从失效的问题

还有一个问题是mysql的主从失效、这个我们是zabbix做的一个自定义监控、会过滤出mysql从节点的io线程和sql线程的状态、他会显示两个yes、我们通过对这个两个yes进行统计、如果结果小于2个的话就会报警、我们当时的zabbix就报的这个警、当时的第一时间、我们就去mysql配置文件查看了一下、发现是没有问题的、然后也排查了好久、最后发现从节点的版本是8.0的、主节点的版本是5.7的、这个可以说是之前的运维留下的一个坑吧、它为什么不同步呢就是、我在从节点敲show slave status 命令的时候、他会有那个报错信息、last sql 和last io最近的一个报错信息是由于一个sql语句没有执行成功、那个sql语句是、在5.7的时候grant授权和创建用户可以在一条命令上执行、但是在8.0的时候不能同时执行、需要先创建用户在授权、所以在同步这个语句的时候,没有同步成功、导致主从失效、处理的方式就是在从节点上设置了跳过当前的一个事务、他的主从就可以恢复了正常的状态、然后在去从节点上手动创建这个用户就可以了、但是这个问题的话、我们还没有把这个8.0的改成5.7、因为改的话比较的麻烦、所以暂时还是这样设置的、后续的话创建用户、在主节点采用create的方式去创建就不用grant去创建了。

mysql相关问题

数据库的类型

关系型数据库:Oracle、SQL Server、MySQL/MariaDB

优点:支持事务,支持sql语句,支持复杂查询,使用表结构,易于维护。

缺点:读写性能差,存储结构不灵活,对于高并发的读写请求,磁盘I/O是很大的瓶颈。

非关系型数据库: MongoDB、Memcached、Redis

优点:存储格式灵活,读写速度快,具有高扩展性。

缺点:不支持事务和sql语句;数据结构相对复杂。

数据库的引擎

innodb(存储型引擎):支持事务,支持行锁定

myisam(存储型引擎):查询速度快,但是不支持事务

memory(内存型引擎):数据存储在内存,读写速度快但是安全性不高,支持锁表但是不支持行锁定。

设置索引的原则

1.常用于查询条件的字段较适合作为索引,例如where语句。

2.唯一性太差的字段不适合作为索引,例如性别。

3.更新过于频繁的字段不适合作为索引。

4.使用索引可以加快检索速度,但由于索引也是一种数据结构,它需要占用额外的内存空间,因而索引并非越多越好。

事务的四个特性

原子性:事务的最小执行单位,事务中的所有操作要么全部执行,要么全部不执行,不会出现部分执行的情况。

一致性:事务开始前和结束后,数据库系统都必须处于一致状态。

隔离性:事务之间是相互隔离,互不影响的。

持久性:事务执行成功后,对数据库所作的修改是永久保存的,即使系统崩溃也不会丢失。

脏读、不可重复读、幻读是什么

脏数据:因数据重复录入,共同处理等不规范操作而产生的混乱,无效数据

脏读:一个事务读取了另一个事务未提交的数据,即读取到不正确的数据

不可重复读:在一个事务前后两次读取期间,另一个事务进行了数据修改,前后读取数据不一致。

幻读:一个事务前后两次读取,另一个事务在此期间进行了插入数,后一次读取数据变多了

幻读侧重于新增或删除,不可重复读侧重于修改,解决不可重复读只需锁住满足条件的行,解决幻读需要进行锁表

事务的隔离级别

分为读未提交、读提交、可重复读、串行化。隔离等级越高,数据越安全,但是消耗的资源就越多。(mysql的默认事务隔离级别是可重复读)

常用的SQL语句

数据定义语言(DDL):用于定义数据库对象,例如表、索引等。常用的DDL语句包括create、alter、drop等。

数据操作语言(DML):用于对数据库中的数据进行操作,例如插入、修改、删除等。常用的DML语句包括select、insert、update、delete等。

数据查询语言(DQL):用于查询数据库中的数据。常用的DQL语句为seclect语句。

数据控制语言(DCL):用于定义数据库的安全性和访问权限。常用的DCL语句为grant、revoke等。

数据库的数据类型

整数型、浮点型、文本字符串类型、日期时间类型、枚举型、

mysql的数据备份有几种

逻辑备份:用的mysqldump,备份的是sql语句,速度慢,恢复也慢,需要一条一条执行sql语句

物理备份:xtrabackup备份

完全备份:备份当前的所有数据

增量备份:备份上一次备份到当前时间点的更新的所有数据(上一次备份可以是全备也可以是增量备份),数据占用磁盘空间小,但恢复过程较复杂

差异备份:备份上一次完全备份到当前时间点的所有数据,占用磁盘空间比较大,恢复过程简单

策略:周日做全备,周一到周六每天增量备份,结合计划任务定期处理7天前的备份数据(迁移到其他安全的地方)

主从复制原理(主从复制方式:binlog日志、gtid)

主库开启 binlog 日志,授权用户密码。

从库指定主库ip、授权用户密码、binlog日志文件、节点位置,然后开启io线程和sql线程。

当主库binlog日志内容更新后,从库的io线程会去读取binlog日志,并将内容记录到从库的中继日志,sql线程读取中继日志,并执行相应的sql语句,从而达到复制目的。

主从复制方式

数据库同步复制、半同步复制和异步复制都是数据库复制技术的不同类型。它们的主要区别在于它们在复制数据时,如何处理数据复制的同步和异步问题。

同步复制:在同步复制中,当主数据库写入数据时必须等待所有备份数据库确认已写入成功,然后主数据库才会继续执行后续操作。这种方式可以保证复制数据时数据的一致性,但是会降低主数据库的效率,增加系统的延迟。

半同步复制:在半同步复制中,主数据库写入数据后会等待多个备份数据库中至少一个完成数据复制, 然后主数据库才会继续执行后续操作。这种方式可以保证数据的一致性,并且与异步复制相比,半同步复制减少了数据丢失的可能性。

异步复制:在异步复制中,主数据库将写入的数据直接复制到备用数据库,而不会确认备用数据库是否已成功将数据复制。这样可以确保主数据库不会因为等待备份数据库进行确认而受到延迟,系统的响应速度更快。但是,由于数据的异步复制,可能存在从主数据库写入的数据未被及时复制到备份数据库上的情况。

总体而言,同步复制保证了最高的数据一致性,但是性能相对较低;异步复制性能最快,但是可能存在数据丢失风险;半同步复制则在这两种方式之间权衡,提供了较高的性能和较小的数据丢失风险。

主从复制的作用

做数据的热备,作后备数据库,当主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。

做架构的扩展。提高单个机器的I/O性能。

做读写分离,减轻主服务器的负载压力,提高系统的并发处理能力。

主从复制延迟的原因

1、主服务器配置高,从服务器的配置低。

2、网络延迟比较高

3、并发量大导致主服务器读的慢,从服务器写的慢。

4、慢SQL语句太多,如果单个SQL的写入时间太长,可以修改后分多次写入。

mysql主从数据不一致的原因

1、网络延迟比较高

2、主从机器的负载不一致

3、版本不一致

4、最大允许的数据包大小设置不一致:主库设置的最大允许数据包大小比从库大,一条大的sql语句在主库能执行完毕,但在从库上无法执行,导致主从不一致。

解决方法:停掉从库、在配置文件中添加跳过这一个事务;再重新做主从。

mysql读写分离的流程

mysql的读写分离是在mysql的主从复制基础上做的、读写分离要借助个中间件,我们用的的是mycat,安装需要jdk环境,只需要在server.xml文件里配置mycat的用户和密码,和虚拟库名。在schema.xml文件的write标签和read标签里在分别填入主库和从库的ip,用户密码。就配置成功了

读写分离的好处

分摊服务器的压力,提高系统的处理效率。分担主服务器的读取压力,间接提高了主库的写入压力,因为读请求全部发给了从库。

MySQL数据库的优化

安全方面:修改默认端口号,对用户降权,以普通用户运行mysql。

性能方面:升级硬件,内存、磁盘、优化sql语句、设置索引。

参数优化:innodb的缓存区大小提前设置好,连接数调大、

架构方面:做读写分离,一主多从,高可用。

nginx面试相关问题

介绍一下nginx

nginx是一款轻量级、高性能、稳定性高、并发性好的http和反向代理服务器(支持https),同时也是一款负载均衡软件,可以做7层和四层负载均衡。可以做动静分离,nginx解析静态页面的效率非常高,但是动态请求很鸡肋。nginx功能非常强大,常用的比如地址重写,防盗链,会话保持,访问控制、流量控制等

nginx工作原理

首先nginx采用的是多线程IO多路复用,nginx启动后,会开启一个master线程和多个worker线程,master负责管理worker线程,当有请求进来时,会通过nginx配置文件将请求映射到对应的location模块,location模块会将请求进行处理。

nginx有什么功能?

web服务器、正反代理、负载均衡、动静分离 、地址重写、防盗链、会话保持、访问控制、流量控制等、

apache和nginx的区别,为什么不用apache

nginx比apache 占用更少的内存及资源 ,抗并发能力更强,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

nginx的配置文件比apache更加简单,容易调试和排错。

apache的地址重写功能比nginx强大,模块也更多,两者相比nginx的bug要稍多一点。

一般情况下对性能要求高的话可以使用nginx,如果只要求稳定不要求性能的话可以使用apache

nginx的升级方式

热备、冷备

灰度升级 :灰度升级是指将新版本软件逐步推广到一部分用户或服务器上,以便测试新版本的稳定性和兼容性,如果没有问题,则逐步推广到更多的用户或服务器上。

平滑升级:平滑升级是指在不影响系统正常运行的情况下,对系统进行版本或配置的更新。

平滑升级的流程

(1)在不停掉老进程的情况下,启动新进程。

(2)老进程负责处理仍然没有处理完的请求,但不再接受新请求。

(3)新进程接受新请求。

(4)老进程处理完所有请求后,关闭所有连接,然后停止。

动静分离的目的

将网站静态资源与后台应用分开部署,提高用户访问静态网页的速度,降低对后台应用的访问。动静分离的做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则将静态请求全部请求到nginx服务器,动态资源请求全部请求到tomcat,达到动静分离的目的。

四层七层负载均衡的区别

四层负载均衡工作在传输层基于tcp协议、是基于ip+端口进行转发的,复杂度低,传输效率高,因为不需要解析具体的消息内容,但是安全性比较低,七层负载均衡工作在应用层基于http协议的,是基于url或者主机ip进行转发的,复杂度高,传输效率相比四层比较低,但是安全性高,功能也比较丰富。

HTTP的请求方式

GET:单纯获取数据(获取一个index.html页面)

POST:上传/创建文件(会产生新的数据)

PUT:保存数据(覆盖/更新文件、图片等,不会产生新的数据)

DELETE:删除

异步非阻塞

异步非阻塞其主要原理是在任务之间的执行过程中不需要等待上一个任务完成才能开始下一个任务,从而提高程序的效率和响应速度。

异步指的是,在程序执行过程中可以同时处理多个任务,而不是等待前一个任务执行完毕才能开始下一个任务。

非阻塞则是在程序执行过程中不会对后续的代码执行造成阻塞。当某个任务需要等待I/O操作等耗时操作完成时,程序可以不必一直等待,可以继续执行其他任务,等到该任务执行完成后再通过事件通知机制来获取其执行结果。

异步回调则是在异步任务执行完成后,调用预定义的回调函数来处理异步结果的一种编程模式。

nginx负载均衡怎么做?

负载均衡通过将请求分散到多台服务器上处理,从而减轻单一服务器的压力,从而提高应用系统的性能和稳定性。

nginx做7层负载、首先在子配置文件里、先定义一个upstream的地址池、里面写上后端服务器的地址和端口号、权重写的是1、算法用的是ip_hash、然后在server模块写一个proxy_path给他转到地址池里、就可以实现负载均衡了。

负载均衡的算法有哪些

轮询 :   每个请求按时间顺序逐一分配到不同的后端服务器处理。

适用业务场景:后端服务器硬件性能配置完全一致,业务无特殊要求时适用。

加权轮询  用户请求按权重比例分配。

适用业务场景:后端服务器硬件性能处理能力不平均的情形。

ip_hash  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session会话保持问题。

适用业务场景:适用于需要账号登录的系统,会话连接保持的业务。

url_hash  需编译安装第三方模块ngx_http_upstream_hash_module。

按访问url的hash结果来分配请求,使同一个url访问到同一个后端服务器。

适用业务场景:适用于后端服务器为缓存服务器时比较有效。

fair智能模块算法 需编译安装第三方模块ngx_http_upstream_fair_module。

特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配。

适用业务场景:对访问响应速度有一定要求的业务。

nginx如何获取客户端的地址

在nginx的配置文件中添加,proxy_set_hearder X-Forwarded-For $remode_addr

nginx如何隐藏版本信息

在配置文件http模块中添加server_tokens off;

Nginx会话保持

会话保持是指保证用户请求被同一台服务器处理。

会话保持的方式

ip_hash:将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。但当后端服务器宕机后,会话丢失;可能导致负载失衡。

基于cookie    将用户的会话存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用户的会话,如果没有就先把cookie里面的会话存入该服务器,实现会话保持,缺点是存入cookie有安全隐患。

jvm_route:一开始请求过来,没有带会话信息,jvm_route就根据轮询的方法,发到一台tomcat上面。 tomcat添加上会话信息,并返回给客户。 用户再此请求,jvm_route看到会话中有后端服务器的名称,它就把请求转到对应的服务器上。

nginx开启gzip的好处

可以使网站的html等文件在传输时进行压缩,从而提高访问速度

打开方式:主配置文件中有gzip on这一行,打开注释就行。

访问网站响应比较慢

首先要进行排查确定是客户端还是服务端的问题。可以先自己访问进行测试一下访问处理速度,如果访问的快,就基本是客户端问题,就和客户沟通解释,如果自己访问也慢,可以利用浏览器的调试功能,看是哪一项数据消耗时间过多,可以开启nginx的Gzip压缩功能、如果是出口带宽问题,就申请加大出口带宽、然后还可以查看MySQL的慢查询日志,看看是不是某条SQL语句查询慢、跟开发人员沟通一下看看能不能优化一下SQL语句。

防盗链模块

防盗链是指其他网站在未经允许的情况下,直接使用你网站上的图片、视频等媒体资源,这会导致你的带宽被消耗以及资源被盗用等问题。为了解决这些问题,可以使用防盗链技术。

在location模块里添加一个vaild_referers 的参数,设置允许访问和拒绝访问网站的名单。

Nginx流量控制

流量限制可以用作安全目的,比如可以减慢暴力破解密码的速率和用来抵御 DDOS 攻击。更常见的情况,该功能被用来保护上游应用服务器不被同时太多用户请求所压垮。

漏桶算法

nginx的流量限制使用的是漏桶算法,主要用于对流量的速率进行限制,减少网络阻塞和拥塞的发生。简单来说就是,在请求处理方面,水代表来自客户端的请求,桶底漏出的水代表离开缓冲区被服务器处理的请求,桶口溢出的水代表被丢弃和不被处理的请求。

HTTPS优点

所有信息都是加密传播,黑客无法窃听。

具有校验机制,一旦被篡改,通信双方会立刻发现。

配备身份证书,防止身份被冒充。

HTTPS缺点

SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐

HTTPS访问涉及到的安全算法会消耗 CPU 资源,访问过程需要加密解密,所以用户访问耗时会增加。

https访问流程

客户端向服务器发起 HTTPS 请求。

服务器返回数字证书。

客户端验证数字证书的合法性,证书验证通过后客户端生成会话密钥。

服务器生成会话密钥。

客户端与服务端开始进行加密会话。

nginx优化的方向有哪些

1.做防盗链,地址重写。

2.增大文件句柄打开数,调整work进程数、最大连接数、cpu亲和度。

4.设置会话保持时间和超时时间

5.启用Gzip压缩功能,减少网络传输的数据量,提高响应速度。

6.做负载均衡,分摊请求压力,提高性能和可用性。

tomcat面试相关问题

tomcat怎么优化

可以在配置文件里设置好堆栈空间的大小、一般设置为内存的一半、永久区大小的话一般设置为堆栈大小的三分之一、因为经常访问的变量一般放在永久区、只要永久区不出问题、设好限制、就不会产生内存溢出的现象、安全方面可以修改默认端口,限制tomcat服务启动用户的权限,代码方面跟开发人员进行沟通看看能不能再进行一些优化。还有就是可以每天定时重启tomcat。

jenkins面试相关问题

jenkins是什么?功能有哪些?

Jenkins是一个开源的做持续集成持续发布工具。是用java语言编写的、所以在部署的时候需要安装jdk的环境和配置好相应的环境变量、jenkins可以在Tomcat上运行,也可独立运行。jenkens有很多的功能、可以做参数化构建,版本回退、也可以做自动发布,定时发布,但是这些功能都需要安装一些相应的插件。

jenkins都需要什么插件?

Status Monitor Plugin:构建状态插件

Deploy to container    ---支持自动化代码部署到tomcat容器(自动发布)

GIT plugin  拉取git代码,git参数化等

Maven Integration   jenkins利用Maven编译,打包所需插件

Publish Over SSH  通过ssh连接

Email  邮箱插件

maven是来干嘛的,编译打包的时候可以加什么参数

编译打包的,clean、package、pom.xml

jenkins的工作流程

首先开发要将代码上传到gitlab上、然后jenkins会去gitlab上拉取相应的代码、将拉取到的代码进行编译打包处理、可以打成war包、编译打包完成后、会将编译打包好的war包发送到后端服务器的发布目录下进行发布、这个过程中、gitlab和后端服务器上都需要配置jenkins的公钥、jenkins的web页面也要配置自己的私钥、然后还要安装相应的插件、比如git、ssh、maven等相关插件

jenkins怎么实现版本回退?

jenkins的版本回退可以用参数化的构建方式来实现、因为参数化的构建方式是用标签或者是修订号的形式进行构建的、只需要在构建的历史中找到想要回退的版本、重新构建即可。

jenkins参数化构建的流程

首先要在jenkins的web页面上安装参数化构建的相关插件、比如git、ssh、maven插件等等、然后在构建方式里点击git参数构建、参数类型可以选择标签或者commit修订号,tag标签的方式需要开发在上传代码之前打上标签、然后再推送代码到gitlab仓库上、而commit修订号的方式不需要在上传的时候打上标签、因为每次提交代码会自动生成相应的修订号。我们一般采用修订号的方式、因为开发可能有时候会忘记打标签、这样可以减少一些不必要的麻烦。排序方式选择逆序的方式、这样每次最新上传的代码都在最上面、方便构建、然后在源码管理里面配置拉取gitlab代码仓库的url地址、最后指定分支为commit修订号、就可以进行参数化构建了。

jenkins自动化构建流程

jenkins的自动化构建需要安装一个gitlab  webhook的插件,这样jenkins就能够接收到gitlab发过来的触发请求、然后在jenkins的构建触发器里把secret提前配置到gitlab的webhook页面和url里、这样只要代码有改动、就会用webhook去触发这个地址、然后触发jenkins的自动构建、在这之前gitlab和jenkins之间也要配置好公钥和私钥。

Redis面试相关问题

redis缓存雪崩

redis集群大面积故障、缓存失效,但依然大量请求访问缓存服务redis、从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。

改善的方案:限流、

redis缓存穿透

当你在redis上查询一个不存在的数据时、会到mysql中查询、查不到的数据不会写入缓存中、

但是如果一直查询不存在的数据、就会造成缓存穿透。

改善方案:如果查询数据库的时候也为空,就设置一个默认值存放到缓存、这样以后再次查询时就不会访问数据库了。

Redis上存储什么数据,针对内存过高怎么优化

一般会存一些经常查询且变动不是很频繁的数据和缓存。内存过高时可以设置存储key值的过期时间、对于一些不经常用的key值、可以将过期时间设置小一点。

Redis的优缺点

优点:数据存储在内存, 读写速度快、支持数据持久化,便于数据备份、支持主从复制、 支持哨兵机制。

缺点:数据存储在内存,安全性较差、用于缓存时,易出现’缓存雪崩‘,’缓存击穿‘等问题

Redis数据库持久化的方式有几种?

RDB和AOF两种,RDB是根据时间为节点做持久化,类似快照,在持久化的过程中,写入的数据将被放在缓存区,因此RDB本身的局限性就是不完整性和不及时性。AOF的完整性会高一点,因为AOF记录数据的写指令,再重启之后,只需要将这些指令重新执行一遍,就能够恢复数据。我们一般使用的是RDB方式,AOF视情况开启,一般只会选择一种,因为开启两种的话,可能会对redis造成一定的压力。只用RDB的话虽然数据完整性不高,但是影响也不大,因为数据库中还有一份,只需要同步到redis就行。

Redis主从同步原理

从服务器向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令将数据写入RDB文件中然后发送给从服务器,从服务器接到此文件后会将其存储到磁盘上,然后再将其读取到内存中。主服务器发送文件的这段时间,产生的缓存写指令再以redis协议的格式发送给从服务器。

Redis哨兵原理是什么?

redis哨兵是redis集群的监视工具,它可以检测主节点是否正常运行,并及时通知其他redis节点进行故障转移,保证数据的可靠性和高可用性。哨兵是一个独立的进程,每个节点都配置一个哨兵,通过发送ping命令,等待redis主节点响应,超过指定时间没有响应,该哨兵会认为主节点下线了,当认为主节点下线的哨兵数量达到设定的预期值,就会进行主从切换。

Redis集群模式有几种?以及区别

redis有三种集群模式:主从集群,哨兵集群模式、去中心化集群模式

主从模式:提供数据的冗余备份,主节点和从节点提供相同的数据,主节点宕机后,集群不可用

哨兵模式:哨兵模式是在主从集群基础上实现的,每个节点部署哨兵,当半数以上的哨兵认为master宕机后,然后从节点中会选取一个新的成为master,当坏掉的master恢复后,会自动成为从从节点。解决了主从集群的单点故障问题,但是所有节点提供相同的服务,资源有点浪费

去中心化集群模式:采用无中心化结构,每个节点保存数据和集群的状态,每个节点都能够进行内部通讯,存储数据采用分片式,集群内置了16384个哈希槽,当一个数据存储进来时,会根据CRC16算法来计算出存放在哪个节点的哈希槽中。去中心化一般也会做成主从模式,一个主节点对应一个或多个从节点,当主节点宕机后,从节点会成为新的主节点。当主节点没有从节点时,集群不可用,当主节点和从节点同时失效,集群也不可用。

gitlab和github面试相关问题

gitlab,gitee,github

做代码仓库,企业级配置16核32G、2T

Gitee 即码云,是 oschina 免费给企业用的,不用自己搭建环境,可以建立自己的私有仓库。

Github 是一个基于git实现在线代码托管的仓库,向互联网开放,共有仓库免费,建立私有仓库要收费

gitlab都是基于git仓库的web开发流程代码托管平台,可以免费搭建私有仓库,并且可以部署在自己的服务器上。

git与svn的区别

git是分布式版本控制系统,客户端可以把完整的代码仓库克隆下来存在本地,所以操作速度较快,断开网络影响也不大,缺点就是每个开发人员都拥有所有的代码,不利于核心代码的保密。

svn是集中式版本控制系统,所有版本都集中保存在一台中央服务器上,使用时需要远程连接到这台服务器上进行操作,安全性较小,数据存在丢失的风险,且网络一旦中断就无法进行远程操作

zabbix面试相关问题

zabbix本地邮箱端口 25 postfix

zabbix监控的流程

首先zabbix监控端要安装zabbix-server、和前端的一些依赖包、zabbix被监控端要安装zabbix-agent、如果采取的是主动模式的话、还需要在安装一个zabbix-sender、然后在配置文件中配置好被监控端节点的信息、然后就可以在zabbix监控端的web页面上添加监控的主机、然后选择一些监控的模板关联到被监控的主机上、然后还可以对一些监控项设置一些触发器和触发后的一些动作、可以是钉钉报警的方式也可以是电话报警的方式。

zabbix监控的模式有几种

分为主动模式和被动模式

基于server监控端

主动模式下server主动向agent请求获取相关监控项的数据,agent接收到请求后获取数据并发送给server端

被动模式下agent主动向server请求与自己相关的监控项配置,并获取相应的数据发送给server端、被动模式能很大程度的减轻server的资源与压力

zabbix遇到过什么问题

有一些监控没有触发报警、触发器停掉再启用就好了。

监控项的数据保留时间默认是90天、可以改成30天减少数据库的压力。

图形页面不够直观、结合grfana进行监控项的图形化展示。

zabbix监控过什么?

CPU负载、内存使用率、磁盘使用率、登陆用户数、进程状态、网卡状态

监控mysql:主从状态、增删改查,慢查询数量,mysql连接数

监控nginx:客户端请求数,处理的请求数,客户端连接数,当前活跃的连接数,每秒请求数,服务器错误率、吞吐量

监控Redis: 主从状态,集群状态,内存占用、客户端连接数,响应请求的时间、平均每秒处理请求总数、数据库中的key值总数。

zabbix优缺点

优点:zabbix是开源的,没有软件成本投入,而且server监控端对设备的性能要求低,自带监控模板,有自动发现功能,可以实现自动化监控,且监控端可以采用被动模式,被监控端主动传数据给监控端,减轻监控端的压力。

缺点:被监控端需要安装agent,且所有的数据都存在数据库里,会导致数据库压力过大、解决方案:监控的数据默认保留时长是90天,可以设置为30天、定时清理数据、减缓数据库的压力

系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐

图形化显示不太好,可以结合Grafana插件来对监控项进行图形化展示。

Zabbix监控nginx哪些指标,具体怎么监控

我们一般监控nginx访问的请求数,已经接受请求的数量,处理请求的数量等等

在nginx配置文件中创建一个location模块供我们自己访问nginx的状态

采用curl -s静默输出并结合awk的方式将我们需要监控的指标截取出来

将这些命令语句写入zabbix的脚本文件中,自定义好对应指标的键名

将这些指标创建到zabbix web页面的模板中,将需要被监控的主机与模板关联,实现nginx自动化监控

zabbix分布式监控有什么特点?怎么部署?

当agent过多时,server需要跟多个agent进行交互,server承受不住那么大的压力。所以为了缓解server监控端的压力、可以在server和agent之间增加proxy代理,proxy代替server搜集数据,然后将数据统一发送给server

在代理端安装mysql和zabbix-proxy、zabbix-get、zabbix-agent、zabbix-sender、创建库,创建用户并授权,将代理端zabbix初始化数据导入数据库、配置代理端的配置文件启动zabbix-proxy

zabbix自定义监控怎么做

对于一些监控模板里没有的监控项,我们可以自己创建自定义监控项来监控,就拿监控mysql的主从状态来说,操作的大致流程为:首先mysql肯定要做主从复制、然后被监控端安装zabbix-agent、因为采用的是主动模式,是被监控端主动将监控数据提交到server端、所以还要安装一个zabbix-sender、安装完成后、然后在被监控端上用mysql  -e   “start  satus slave\G” 非交互的方式、用这种非交互方式的话需要提前在mysql的配置文件里将mysql数据库的账号和密码写入进去、不然会有密码告警的回显。然后再通过管道符用  grep -E 过滤出mysql的sql线程和io线程的状态、过滤出两个yes、然后再对两个yes进行grep -c 的统计、得到的数字2就是我们要监控的监控项。然后就可以在zabbix被监控端的子配置目录下创建一个以.conf结尾的文件。在文件里写入自定义键值的格式、UserParameter=自定义的键名,和刚才的自定义监控项的命令。配置文件写完后、需要重新启动zabbix-agent端让配置文件生效、然后再在zabbix的监控端使用zabbix_get 的命令来测试一下能否获取到我们创建的自定义监控项、能获取到相应的值的话就可以去zabbix监控端的web页面里添加刚才我们创建的自定义监控项、然后还可以添加相应的触发器、和触发后的动作、触发的动作就是当监控值小于2时,MySQL主从失效、就触发钉钉报警和电话报警。

Zabbix钉钉自动监控报警

首先在钉钉群中添加一个自定义webhook机器人,记录机器人的webhook值,因为钉钉报警采用的是python脚本的方式、所以需要在监控端安装python3的依赖环境以及编译python3、

安装编译完后、在/usr/lib/zabbix/alertscripts文件下写一个发送信息的python脚本,这个脚本是我在网上搜的、只需要把python脚本里的webhook值换成自己创建的钉钉机器人的webhokk值即可。脚本写完后可以再安装pip模块和requests库,创建并授权脚本产生的日志文件,方便消息发送失败进行排错、然后就可以在zabbix的web页面中创建报警媒介类型,选择脚本的方式、写好脚本的名称,并配置消息模板、再将报警媒介和用户绑定、设置监控项以及触发器,配置触发后的执行动作为钉钉报警即可。

Zabbix电话报警怎么做?

电话报警的话我们公司采用的是睿象云的报警平台、首先要在睿象云的平台上选择zabbix监控工具、然后会生成一个appkey、然后在zabbix存放脚本的目录里下载睿象云的agent包、然后对其解压后会产生一个安装的脚本、执行这个安装的脚本加上刚才记录的appkey、输入zabbix管理地址、用户名和密码、就可以进行安装了、安装完成后、在zabbix监控端的web界面就会生成一个新的用户和报警媒介、然后去睿象云的平台上绑定好用户和电话通知的方式、就可以在zabbix监控端的web页面里将触发器触发后的动作改成睿象云的电话报警媒介、然后就可以实现电话报警的功能了。

zabbix的自动发现功能怎么做?

首先在zabbix的页面端创建一个发现规则,可以是扫描指定范围内的ip,自动发现检查的规则可以是检查有没有安装zabbix客服端、定义一个能获取到的任何键值即可、然后自动发现到主机后、可以创建发现主机后的动作,我们一般都有创建好的模板,模板关联某个主机群组(有监控项、触发器、动作),发现主机后,将它添加到主机群组,实现自动化监。

zabbix图形化怎么配置

因为zabbix自带的图形化显示不是很好、所以我们公司对zabbix的图形化监控采用的是grafana的插件,首先在监控端安装grafana软件包、然后在Grafana页面端的插件中心搜索Zabbix数据源,安装并配置Zabbix服务器的IP地址、用户名和密码等信息、然后测试是否能够连接成功。最后在Grafana中创建仪表板,选择Zabbix数据源,并添加相应的监控项就可以展示出我们想要的图形

Zabbix邮箱mailx自动报警部署

先关闭本机postfix邮箱服务,然后下载mailx、修改mailx配置文件(添加smtp服务器内容)

在/usr/lib/zabbix/alertscripts文件下写一个发送邮件的shell脚本并授权

在zabbix的web页面设置报警媒介类型,采用脚本的方式并编辑好消息模板

将用户和报警媒介绑定

⑤设置监控项以及触发器,配置触发器之后执行的动作为发送信息,采用自定义的报警媒介

ansible面试相关问题

Ansible的原理是什么?

ansible是一个基于Python开发的、分布式、不需要客户端、轻量级自动化的运维工具,能够

实现批量系统配置、程序部署、运行命令等功能,ansible本身没有批量部署的能力、是基于模块工作的。

Ansible都有哪些模块?有什么作用?

检查ansible节点的连通性ping模块、远程复制备份copy模块、软件包管理yum模块、文件file模块、shell万能模块、服务管理service模块

你都用Ansible做过什么?怎么写的

写过一些简单的LNMP(linux+nginx+mysql+php)架构部署,还有批量部署jdk+tomcat+jenkins

大致流程为:先将Jdk、Tomcat、Jenkins的安装包提前上传到ansbile控制节点的/usr/src下,然后在控制节点里配置好要批量部署的后端服务器主机ip、写一个playbook剧本,剧本里配置主机清单里的主机要执行的任务,任务的内容为将上传到控制节点的安装包复制到指定目录下并解压,解压完成后更改文件名并设置相应的环境变量。

lvs面试相关问题

介绍一下lvs

lvs是基于系统内核工作的四层负载均衡软件,稳定性强、工作在网络四层,成本低,配置简单,支持多种算法,支持多种工作模式。缺点是不支持正则表达式,不支持动静分离。不支持7层规则修改

LVS 四种工作模式原理、以及优缺点比较

DR模式  特点:处理效率更快

负载均衡器和RS后端服务器都使用同一个vip对外服务、当有客户端发来请求时、因为RS后端服务器提前设置好了屏蔽arp广播、所以只有负载均衡服务器会对这个请求响应、RS后端服务器不会做出响应、负载均衡器收到数据包后、会根据算法、将客服端访问目标地址的MAC地址改为RS后端服务器的MAC地址、并将请求分发给RS后端服务器、后端服务器收到数据包后、会对其进行处理、处理完成后、因为提前设置好了精准回包、所以会直接将数据返回给客服端。

NAT模式  特点:进出的流量都经过负载均衡器

负载均衡器把客户端发来数据包的目标地址改成RS后端服务器的地址、然后转发给后端服务器去处理、后端服务器处理完后再把数据交给负载均衡器、然后负载均衡器再把包的源地址改成自己的vip、将目标地址改为客户端的IP地址、并将包回给客服端。

区别:DR模式相比于NAT模式来说、并发量更高、吞吐量更大、处理效率也更快、因为数据返回时不需要再经过负载均衡器、直接将数据发给客服端。不足的地方就是要求负载均衡器的网卡必须与物理网卡在一个物理段上。

IP隧道模式

双向转换模式

haproxy面试相关问题

介绍一下haproxy

haproxy是支持虚拟主机的,可以工作在四层、七层(支持多网段)

haproxy能够补充nginx的一些缺点,比如会话保持、cookie的引导,同时支持通过获取指定的url检测后端服务器的状态

haproxy跟lvs类似,本身就是一款负载均衡软件,单纯从效率上讲haproxy比nginx有更出色的负载均衡速度,在并发处理上也优于nginx

haproxy支持tcp协议的负载均衡转发,可以对mysql读进行负载均衡

haproxy什么场景使用四层负载均衡,什么是时候使用七层

四七层负载均衡的区别?

网站使用四层负载均衡还是七层负载均衡

使用七层负载均衡,使用域名方便用户访问

nginx、haproxy、lvs的区别

lvs基于系统内核实现软负载均衡,而haproxy和nginx是基于第三方应用实现的软负载均衡。

lvs是基于四层的负载均衡,所以做不了基于url和目录的转发

haproxy是基于四层和七层的转发,是专业的负载均衡软件

nginx既是web服务器、缓存服务器、又是反向代理服务器,可以做七层和四层的转发

什么时候用haproxy什么时候用nginx什么时候用lvs

在并发量大得时候可以用lvs,中小型公司可用nginx或者haproxy,如果只是单纯的负载均衡可以用haproxy。

但如果是web服务器的话,建议使用nginx,这也是nginx用的多的原因。还用一种情况可以使用lvs和haproxy,比如RabbitMQ集群,有三台RabbitMQ,我们都知道RabbitMQ镜像模式使用还是比较多的,每个节点都提供服务,但我们总不能给开发提供三个RabbitMQ的节点吧,也不能只提供一个节点的ip,所以就可以使用lvs或者haproxy给三个RabbitMQ提供一个VIP,这样开发老铁可以用这个vip写进前端的配置中。不至于所有数据都往一个RabbitMQ上发送

keepalived面试相关问题

keepalived作用和工作原理?

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障

keepalived是通过vrrp虚拟路由冗余协议实现的,将n台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上有对外提供服务的vip,master会发组播,当backup接收不到vrrp包的时候,会认为master宕掉了,这时会根据优先级选举一个backup成为master,这样就保证了集群的高可用。

keepalived对什么做过高可用,怎么实现的

对nginx的负载均衡做过高可用,还有mysql双主双从做过。负载均衡集群通过keepalived提供对外服务的vip,keepalived可以解决心跳故障,但是无法解决nginx的故障,需要利用keepalived的script模块执行一个健康检测脚本,脚本的内容就是检测nginx负载均衡集群的健康状况,当负载均衡器其中一个节点宕掉了就停止该节点上的keepalived服务。

ELK面试相关问题

ELK的工作流程?

logstash安装在需要搜集日志的主机上,负责搜集日志,并发送给es集群(配置文件中input配置日志搜集的位置,filter过滤作用,output配置输出es集群的ip地址),es集群负责存储日志数据,kibana提供可视化日志分析界面

ES集群你们有几台?里面索引分片机制是什么?

es集群一般三台,端口9200(可做keepalived高可用,做shell脚本监测es状态)

kinbana:索引默认开启,开启5个(可更改);

每天日志量200M左右;服务器磁盘容量1T;

你们都收集什么日志?干嘛用的

数据没有搜集过,只搜集过日志信息,用来给开发优化代码。比如nginx的访问日志,其他服务的错误日志,主要搜集error和warn信息。通过filebeat的处理器进行过滤。

ES优化

1.优化磁盘,使用ssd使用RAID0条带卷。

2.合理设置分片数,控制每个分片占用的磁盘容量,不能超过ES的最大JVM堆空间,一般一个分片不超过32g。

3.优化写入速度

4.调整参数,提升索引的性能 :加大 Translog Flush ,目的是降低 Iops、Writeblock。"降低丢失写入块"增加 Index Refresh 间隔,目的是减少 Segment Merge 的次数。调整 Bulk 线程池和队列。

优化节点间的任务分布。优化 Lucene 层的索引建立,目的是降低 CPU 及 IO。

elasticsearch的特点,工作原理

Elasticsearch是基于lucene的开源分布式服务,只搜索和分析日志。

特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,多数据源。提供了一个分布式,多用户能力的全文搜索引擎。

工作原理:

1.数据同步,从上游接收的数据,数据存储是通过分片存储,默认5个分片,es7.0之后默认一个。包含主分片和副本分片,es会把所有的写请求都分发到主分片上,而读请求,会在所有分片上进行均衡负载,保证数据写入主分片后,能同步到所有副本分片。

2.master选举,bully算法实现,es让所有有资格成为master的节点互相ping,找到id数值最小,发起投票,收到半数以上就成为master并向所有节点进行信息广播。

3.主分片选举,es从5.x版本后引入了 Allocation ID概念用于主分片的选举,类似于kafka 主分片也需要在isr中。

4.es是基于lucene实现的,lucene将数据存储在一个个segment中,在查询时又引入了term和倒排索引概念,提高了读速度。另外,segments写入磁盘,是不会发生改变的,好处就是,不用添加锁,写性能也提高了,因为采用了多种缓存,page cache,query cache,request cache等,减少了磁盘IO。

kafka的工作原理是什么

kafka是一个分布式,支持分区的,多副本的,基于zookeeper协调的分布式消息系统,最大特性是可以实时处理大量数据。常用于低延迟的实时系统,web/niginx日志,访问日志,消息服务等。

特性:

1.高吞吐量,利用LogSegment(日志分段)+有序offset+稀疏索引+二分查找+顺序查找 可以快速查找指定的消息;

顺序追加+页缓存+零拷贝 提升写性能。

2.可扩展性,支持 热扩展

3.可靠性,消息被持久化到本地磁盘,并且支持数据备份,防止数据丢失。

4.容错性:允许集群中节点失败,如果副本数量为n,则允许n-1个节点失败。

5.高并发,基于分区存储的特性,可以支持数千个客户端同时读写。

工作原理:

1.broker选举:kafka是在基于zookeeper协调管理的基础上,集群中所有的broker都会像zookeeper注册新节点,最先成功的节点就成为控制器broker,其他就成为watcher,如果controller下线或者崩溃,broker可以瞬间感知,从而重新发起注册。

2.leader选举:优先副本策略,kafka在创建topic时候,会自动创建一个AR集合,另外会有一个isr集合,每次选举leader会依次从ar集合中拿出副本,判断是否在isr中,选举成功会将leader信息同步到zk中,广播到整个集群。信息传递都只通过leader传递。

3.数据同步:因为kafka对数据的读写都是在leader上执行的,客户端通过元信息传递方式,获取到所要存储分区的leader所在的broker地址,并传递数据进行存储,存储方式是写入本地日志文件,fllower在leader存储完数据后进行备份,直到所有的fllower都备份完成,leader会向集群提交已完成信号,信息同步完成,此时消费者才能读取到生产信息。

kafka的主要作用有什么?

(1)异步处理(2)流量控制(3)服务解耦

Elasticsearch分片

Shards主分片

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改,这里和索引分片的算法有关,因为是通过取模算法去判断分到哪,如果改变了 就无法正常查询之前的索引。

replicas分片副本

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

Recovery

代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

ES为什么要实现集群

ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。同时提高容错性和高可用性

分片存储规则

1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储(需要注意的是es7.0默认索引分片数调整为1了

)。每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards.

注意:索引的主分片primary shards定义好后,后面不能做修改。  

2、为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡.

注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,他们之间的关系可以是一对多,主分片对应的备分片不能存放同一台服务器上(单台ES没有备用分片的)。主分片primary shards可以和其他replics shards存放在同一个node节点上。

fkelk工作流程

filebeat在应用服务器上部署,根据input配置 进行日志采集,通过output 配置将数据以topic为区分 传送给中间件kafka,kafka作为中间件,创建topic,根据topic匹配来自filebeat的数据,并对数据削峰后,让其排队进行等待。logstash以topic为限定去kafka寻找指定数据并根据output配置将数据按 type类型发送给es,es根据索引对数据进行切片和副本的形式储存,kibana通过索引去es集群寻找对应数据 并显示到web界面。

iptables面试相关问题

介绍一下iptables

Iptables是linux自带的一款优秀且开源的,基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。主要针对网络访问。

四表五链

四表必须是小写

raw    ------------追踪数据包, ----此表用处较少,可以忽略不计。

mangle   ------------给数据包打标记,做标记。

nat   ------------网络地址转换即来源与目的的IP地址和port的转换。

filter   ------------做过滤的,防火墙里面用的最多的表。

五链:(必须是大写)链里面写的是规则。

PREROUTING  -----------------进路由之前数据包

INPUT   -----------------就是过滤进来的数据包(输入)

FORWARD  -----------------转发

OUTPUT   -----------------发出去的数据包

POSTROUTING -----------------路由之后数据包

linux的一些问题个人总结_第1张图片

iptables和Firewalld的区别

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效

2、firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制。

3、firewalld使用区域和服务而不是链式规则

4、firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

5、firewalld是iptables的一个封装,可以让你更容易地管理iptables规则。它并不是iptables的替代品,虽然iptables命令仍可用于firewalld,但建议firewalld时仅使用firewalld命令。

如何用防火墙设置允许某个ip来访问本机22号端口

iptables -t filter -I INPUT -p tcp -s IP地址 --dport 22 -j ACCEPT

Centos7的启动流程是什么

第一步、硬件启动阶段

第二步、GRUB2引导阶段

显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub2/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。

第三步、内核引导阶段

加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd

第四步、systemed初始化阶段(又叫系统初始化阶段)

cents7中的初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备操作系统。接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。

面试常问相关问题

CentOS 6和CentOS 7的区别

内核版本:CentOS 6使用的是2.6内核,而CentOS 7使用的是3.1内核,新内核带来了更好的性能和更多的功能。

系统架构:CentOS 6只支持32位和64位两种架构,而CentOS 7还支持ARM架构。

系统服务管理:CentOS 6使用的是service命令管理系统服务,而CentOS 7使用的是systemctl命令,更加方便和灵活。

文件系统:CentOS 6默认使用的是ext4文件系统,而CentOS 7默认使用的是XFS文件系统,XFS支持更大的文件和更快的速度。

centos和ubantu的区别

安装软件包命令格式不一样。centos使用yum的方式,而Ubuntu使用apt-get 方式

centos支持rpm包,但Ubuntu不支持

稳定性CentOS比ubnatu要好

在取消挂载的时候取消不掉,怎么查看

用lsof命令查看挂载目录是否被占用

linux中创建文件失败,但是磁盘空间也有,是什么原因

inode号是指操作系统中的一个标识符,它被用来唯一标识文件系统中的文件或目录

权限不够、或者是磁盘的ionde节点数用完了,可以使用df -i查看磁盘的inode数量

systemctl启动和绝对路径启动的区别

systemctl启动后是在后台运行,绝对路径启动后是在终端运行。

软链接和硬链接的区别

软链接可以跨文件系统,硬链接不可以,

软链接可以对目录进行连接,硬链接不可以;

删除源文件后,软链接失效,硬链接不影响

软链接的inode号不一样,硬链接的inode号一样

软链接的创建方式是ln -s  源文件  链接文件

硬链接的创建方式 ln   源文件   链接文件

查看系统资源的常见命令有哪些

查看磁盘空间和挂载情况  df -Th

查看内存使用情况   free -m  

查看系统的运行时间和平均负载    uptime 

动态查看系统资源  top

查看端口  netstat -tlanp

查看系统运行的进程  ps -ef  ps  aux

raid-磁盘阵列

RAID0 ---数据条带

最少需要两块磁盘,分别往每一块磁盘上写一部分数据;读写速度快,磁盘利用率高;但是无数据检验,不能保证数据的正确性,存在单点故障。

RAID1--镜像raid

一般需要两块磁盘,每块磁盘上都会存储一份完整数据。其数据安全性较高,但是磁盘空间利用率是比较低的。读速度快,写速度慢,无数据校验。磁盘利用率不高

RAID5

磁盘上同时存储数据和校验数据。当一个数据盘损坏时,系统可以根据其他数据块和对应的校验数据来重建损坏的数据。raid5最少需要3块磁盘。

优点:可以找回丢失的数据---通过校验计算得出、可以做冗余磁盘,当某一块磁盘坏掉后,冗余磁盘会自动替换上去、有校验机制、读写速度高、磁盘利用率高

缺点:磁盘越多安全性能越差

RAID6

RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式。

优点:容错高、允许两块磁盘同时坏掉。读写快、良好的随机读性能、有校验机制

缺点:写入速度差、成本高

RAID10

先做镜像再作条带--也叫混合raid

优点:有较高的IO性能、有数据冗余、无单点故障、安全性能高

缺点:成本稍高

cpu的平均负载和利用率有什么区别

cpu平均负载是指单位时间内cpu正在处理进程的数量。

cpu利用率是指cpu被使用的时间占总时间的百分比。

cpu平均负载反映cpu任务队列的长度,而cpu利用率反映cpu工作的忙碌程度。

python和shell有什么区别

单行注释两者都用#,多行注释shell中为<

shell中引用变量分为弱引和强引,单引''为强引,双引""为弱引,而python中不区分强引弱引

python有严格的语法要求,一步出现错误则后面的不再执行,直接退出终端,shell脚本中一步出现错误,后面的不受影响继续执行

shell中引用变量需要加$,python不需要

shell中有数组,python中没有,但是有列表,元组数据类型等

固态磁盘(ssd)与机械磁盘的区别

固态磁盘读取速度较快、防震耐摔、无噪音,功耗低质量轻

location匹配规则

/   通用匹配,优先级最低

=   精准匹配,优先级最高,

~   区分大小写正则匹配

~*  不区分大小写正则匹配

^~    优先级仅次于=, 匹配任何以 ^~后面的内容 开始的查询并且停止搜索,不再继续检查正则表达式。

高可用和负载均衡的区别

高可用就是尽量采取措施减少系统服务的中断时间,提高业务程序持续对外提供服务的能力。

负载均衡是将高并发的请求数据分发到不同的集群节点,尽量平衡系统所有资源的压力,从而提升整个集群处理请求的能力

linux系统优化

文件句柄数默认是1024、可以设置为最大65535、因为每打开一个文件都需要打开一个文件句柄数

优化交换分区的使用策略、内存不足才使用交换分区、但是影响不大、不过也能减轻一点内存的压力

 优化磁盘的读写压力、磁盘队列、通过配置文件改、可以改为200 或者500

安全方面、默认端口号要改、普通用户登录、防火墙配置、用用户名和密钥登录、不使用密码

定时自动更新服务器时间

定期清理目录垃圾文件,防止inodes节点被占满

进程和线程的区别

进程相当于线程的父进程、 比如nginx的master进程和woker线程

写过什么脚本

zabbix监控的脚本、mysql主从、nginx的各项指标监控的脚本、  mysql数据备份脚本、传送密钥的脚本、Jenkins自动化构建的脚本、

你可能感兴趣的:(linux,数据库,mysql)