面试总结

前言
以下基本都是有问到的问题还有一些自己准备的知识点(比较少也比较基础),有些问题因为没有录音,忘了,就没有写出来,其实常用的web中间件、非关系/关系型数据数据库,以及一些消息队列等基础的原理和用法问的还是比较少的,技术官可能听一点就不想听了,更多的是问jenkins、zabbix、docker、k8s,以及一些系统跟服务的优化等问的比较多,问的也比较深。
zabbix这块对于一些服务的监控可以在网上多找一些模板,看看都监控啥,只说监控cpu、磁盘、内存、服务的存活状态太没有说服力。就搜一些监控nginx就监控什么、监控mysql监控什么、监控redis就监控什么等等...
尽量不要不懂装懂,也不要答非所问。对于docker和k8s除非你真的有经验,直接说没人教全部都是自己摸索的就行,不然稍微问点生产环境中的问题答不上来容易露馅,不如说自己自学的,也能展现你的学习能力。
还有就是kafka这个东西也要慎重,能不说就不说吧,问起来了就说了解一点,一是你之前的公司如果比较小可能就没有kafka,有kafka的话只用来搜集日志显得太鸡肋,而且多大的日志量才能用上kafka呢。要是问elk+kafka怎么搜集数据不是更懵逼了。
jenkins这块一定要好好学,真的很重要,具体咋重要我也说不上来。jenkins最简单的工作流程你得说上来吧。在深入一点可能会问pipeline流水线了解吗,流水线的声明式和脚本式会写吗?学的好的就多说点,学的一般就说能看懂,能自己找模板修改参数实现结果就行。
shell这块问的问题都是让你说一下思路,把一些关键的语句或者函数说出来就行。除非让你现场写脚本...
还有就是上家公司的业务、你参与的项目、项目架构、服务器怎么分配的,一定要提前准备好,不要随便写个公司名放那了,有的面试官会问你做了什么项目、项目的架构以及所用的web中间件啦数据库啦这些怎么连接起来的,也一定要打好草稿。你答不上来很尴尬,糊弄过去就算了,糊弄不过去就很尴尬,情商稍微高点的面试官就转移话题了,比较轴的面试官可能一直问你,整的很尴尬,更有的会直接问你是不是培训的(一定咬死了不是)
请勿妄自菲薄、请勿骄傲自大。兄弟们共勉,祝前程似锦。
mysql
1、数据库的类型
非关系型数据库:存储格式灵活,可以是key-value的形式,也可以是文本文档图片等形式。读写速度快,可以使用磁盘或随机存储器作为载体,具有高扩展性,但是不支持sql语句,无事务处理。
关系型数据库:支持事务、使用表结构,可用复杂查询,但是读写性能差,固定表结构,数据存储不够灵活,对于高并发的读写请求,磁盘io是很大的瓶颈
2、主从复制原理
主库开启binlog日志,授权用户密码
从库指定master_host、master_user、master_password、master_log_file、master_pos,执行start slave后会开启两个线程io线程和sql线程,主库开启dump线程。当主库binlog日志内容更新后,dump线程会告诉io线程,io线程读取binlog日志,并将内容记录到从库的中继日志,sql线程读取中继日志,并执行,达到数据一致的目的
3、主从方式有几种
两种:binlog日志,gtid
4、mysql的数据备份有几种
逻辑备份:mysqldump,备份sql语句,速度慢,恢复也慢,需要一条一条执行sql语句
物理备份:xtrabackup备份
完全备份:备份当前的所有数据
增量备份:备份上一次备份到当前时间点的更新的所有数据(上一次备份可以是全备也可以是增量备份),数据占用磁盘空间小,但恢复过程较复杂
差异备份:备份上一次完全备份到当前时间点的所有数据,占用磁盘空间比较大,恢复过程简单
策略:周日做全备,周一到周六每天增量备份,结合计划任务定期处理7天前的备份数据(迁移到其他安全的地方)
5、事务的四个特性
原子性:一个事务的执行要么全部执行,要不全不执行,不会结束到中间某个环节,也就是说如果在某个环节失败了,会回滚到事务开始前的状态,就像什么都没有发生一样
隔离性:数据库允许多个事务同时对数据库的数据进行读写和修改的能力,隔离性为了防止多个事务并发执行由于交叉执行导致的数据不一致。隔离级别分为读未提交、读提交、可重复读、串行化。隔离等级越高,数据越安全,但是消耗的资源就越多。
一致性:事务开始前和结束后,数据库的完整性没有被破坏,即写入的数据必须符合预设的规则
持久性:事务结束后,对数据的修改是永久写入到磁盘的,即使系统故障也不会丢失
6、脏读、不可重复读、幻读是什么
脏读:a开启了一个事务并更新了数据,但是未提交,b读取了a更新的数据,但是a此时进行了事务回滚,b读到的就是脏数据
不可重复读:事务a多次读取同一数据,事务b在a多次读取过程中对数据做了更新并提交,导致a在多次读取数据时结果不一致。
幻读:管理员a将学生成绩从具体分数改为abcde等级,但是管理员b在这个时候插入了一条具体分数的记录,当管理员a修改结束后,发现还有一条数据没改过来,就像发生了幻觉一样。
不可重复读和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除,解决不可重复读只需锁住满足条件的行,解决幻读需要进行锁表
7、数据库引擎
innodb:支持事务,支持行锁定
myisam:有较高的查询速度,但是不支持事务
memory:需要很快的读写速度但是对安全性要求不高的话可以使用,但是对表的大小有要求。支持锁表不支持行锁定。
8、mysql的数据类型
整数型、浮点型、文本字符串类型、日期时间类型、枚举型、集合型
9、mysql的约束添加
主键:用于唯一的标识表行的数据,当定义主键约束后,此列不能重复
不能为空:定义not null后,此列的值不能为空
default:默认约束,即使插入数据没有值,都会有默认值
unique:唯一约束,该列不允许重复
自增键
10、mysql主从数据不一致的原因
网络延迟,主从复制是基于binlog的异步复制,通过网络传送binlog文件,网络延迟是大多数引起数据不一致的原因
主从机器的负载不一致:mysql主从复制是主库开启dump线程,从库开启io和sql线程。当任何一台服务器负载过高,导致其中一个线程资源不足,会出现主从不一致的情况
版本不一致
max_allowed_packet设置不一致:主库设置的max_allowed_packet设置的比从库大,一条大的sql语句在主库能执行完毕,但在从库上无法执行,导致主从不一致。
解决方法:1、stop slave set global sql_slave_skip_counter=1 跳过这一步错误;2、重新做主从:先锁表,导入数据数据+同步,重新做主从
11、怎么彻底删除数据库一个表
drop table table_name from 库名;
12、读写分离的好处
分摊服务器的压力,提高系统的处理效率。分担主服务器的读取压力,间接提高了主库的写入压力。因为读请求全部发给了从库。
13、mysql的优化
安全方面:修改默认端口号,禁止root用户远程登录,对用户降权,以普通用户运行mysql
性能方面:升级硬件,内存、磁盘、优化sql语句(开启慢查询)、设置索引
参数优化:innodb的buffer参数调大,连接数调大、缓存的参数优化
架构方面:读写分离,一主多从,高可用
nginx
1、nginx的最新版本
nginx的最新版本是1.22.0
2、介绍一下nginx
nginx是一款轻量级、高性能、稳定性高、并发性好的http和反向代理服务器(支持https),同时也是一款负载均衡软件,可以做7层和四层负载均衡。可以做动静分离,nginx解析静态页面的效率非常高,但是动态请求很鸡肋。nginx功能非常强大,常用的比如地址重写,防盗链,会话保持,访问控制流量控制等
3、nginx、haproxy、lvs的区别
lvs基于系统内核实现软负载均衡,而haproxy和nginx是基于第三方应用实现的软负载均衡。
haproxy是基于四层和七层的转发,是专业的负载均衡软件
nginx既是web服务器、缓存服务器、又是反向代理服务器,可以做七层和四层的转发
lvs是基于四层的负载均衡,所以做不了基于url和目录的转发
4、什么时候用haproxy什么时候用nginx什么时候用lvs
在并发量大得时候可以用lvs,中小型公司可用nginx或者haproxy,如果只是单纯的负载均衡可以用haproxy,但如果是web服务器的话,建议使用nginx,这也是nginx用的多的原因。还用一种情况可以使用lvs和haproxy,比如RabbitMQ集群,有三台RabbitMQ,我们都知道RabbitMQ镜像模式使用还是比较多的,每个节点都提供服务,但我们总不能给开发提供三个RabbitMQ的节点吧,也不能只提供一个节点的ip,所以就可以使用lvs或者haproxy给三个RabbitMQ提供一个VIP,这样开发老铁可以用这个vip写进前端的配置中。不至于所有数据都往一个RabbitMQ上发送。
5、apache和nginx的区别,为什么不用apache
nginx比apache 占用更少的内存及资源,抗并发能力更强,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
apache的rewrite重写功能比nginx强大,模块也更多,两者相比nginx的bug要稍多一点。
一般情况下对性能要求高的话可以使用nginx,如果只要求稳定不要求性能的话可以使用apache
6、动静分离的目的
将网站静态资源与后台应用分开部署,提高用户访问静态网页的速度,降低对后台应用的访问。动静分离的做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则将静态请求全部请求到nginx服务器,动态资源请求全部请求到tomcat,达到动静分离的目的。
7、四层七层负载均衡的区别
四层负载均衡是基于ip+端口进行转发的,复杂度低,传输效率高,因为不需要解析具体的消息内容,但是安全性比较低,七层负载均衡是基于url或者主机ip进行转发的,复杂度高,传输效率相比四层比较低,但是安全性高,功能也比较丰富,比如会话保持、图片压缩等。对比来看两者最大的区别就是效率和功能的区别。四层负载均衡架构设计比较简单,无需解析具体消息内容,在网络吞吐量和处理能力上相对比较高,而七层负载均衡的优势则体现在功能多控制灵活强大
8、nginx的性能调优
系统层面:增大文件句柄打开数。临时修改 ulimit –SHn 永久生效vim /etc/security/limits.conf
服务层面:每个进程的最大文件打开数设置的高一点。worker_rlimit_nofile
cpu的亲和设置,把nginx的进程绑定到不同的cpu,减少进程频繁切换cpu带来的资源损耗。worker_processes 8 最多开启8个,8个以上性能不在提升,稳定性也会变差。1.9版本之后可以设置为auto
选择epoll模型,io多路复用,将worker_connections 10240
设置keepalive_timeout会话保持时间
开启GZIP压缩
设置proxy超时时间
配置日志。方便排错
访问控制,流量控制
开启高效传输 sendfile on tcp_nopush on tcp_nodelay on
内核参数优化
9、nginx的跨域(这个问题答案也是网上搜的,也不知道对不对,观众自行甄别)
server {
listen 8080;
server_name localhost;
root html;
location / {
#index index.html index.htm;
#解决vue去掉#号问题,将vue打包的dist文件下文件放到html目录
try_files $uri $uri/ /index.html;
}
#请求http://localhost:8080/api,将该请求转发到百度api,则保证请求在同一个域,解决跨域问题
location /api {
proxy_pass http://api.baidu.com/api;
}
}
server {
listen 8080;
server_name localhost;
root html;
location / {
#vue运行dev在8088端口
proxy_pass http://localhost:8088;
}
#请求http://localhost:8080/api,将该请求转发到百度api,则保证请求在同一个域,解决跨域问题
location /api {
proxy_pass http://api.baidu.com/api;
}
}
10、nginx的会话保持
使用第三方模块nginx-sticky-module-ng,使用ip_hash、url_hash
11、nginx怎么做反向代理
upstream、proxy_pass,这个就不多说了
12、nginx怎么做七层负载均衡
upstream、server、location、proxy_pass
13、nginx如何获取客户端的地址
在nginx的配置文件中添加,proxy_set_hearder X-Forwarded-For $remode_addr
14、nginx如何隐藏版本信息
在配置文件http模块中添加server_tokens off;
15、nginx防盗链怎么做
需要使用一个模块ngx_http_referer_module,并在server块中添加Vaild_referers none
16、nginx的缺点
处理不了动态请求,单进程多线程模式,进程死掉会影响很多用户
17、nginx做四层负载使哪个模块
使用stream模块,默认没有这个模块,需要下载这个模块,或者编译进去。ngx_stream_core_module stream模块与http同级,需要写在http模块之外。四层负载的server模块要写在stream模块下。
tomcat
1、tomcat怎么优化
性能方面的优化:
内存优化:-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,表示不限制建立客户连接的时间
安全方面的优化:
降权启动,防止不法分子通过tomcat获得root权限
修改端口号:修改tomcat配置文件server.xml中的http连接器端口号,防止黑客攻击
更改tomcat的关闭指令:
隐藏服务类型:在server.xml文件中,为connector元素添加server=” ”,注意不是空字符串,是空格组成的长度为1的字符串,或者输入其他的服务类型,在response header中不显示server的信息
lvs
1、了解lvs吗
lvs是基于系统内核工作的四层负载均衡软件,稳定性强工作在网络四层,成本低,配置简单,支持多种算法,支持多种工作模式。不足:只能做四层负载均衡,不适合小规模使用
2、lvs的工作模式:
nat模式:
原理:把客户端发来的数据包的ip头的目的地址,在负载均衡器上换成其中一台的rs的ip地址,并发至次rs进行处理,处理完之后,将数据包交给负载均衡器,负载均衡器将源ip改为自己的vip,把目的ip改为客户端的ip。期间不论进来的流量和出去的流量都经过负载均衡器。
优点:集群中的物理服务器可以使用任何支持tcp/ip操作系统,仅负载均衡器需要一个合法ip
缺点:扩展性有限,当服务器节点增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都要经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变得很慢
tun模式(隧道模式)
原理:首先要知道,互联网上的请求包一般都很小,而应答包却很大。那么隧道模式就是把客户端发来的数据包,封装一个新的ip头标记(仅目的ip)发送给rs,rs收到后先把数据包的头解开,还原数据包,处理后直接返回给客户端,不需要再经过负载均衡器,注意,由于rs需要对数据包进行还原,所以必须支持Iptunnel协议,所以在rs的内核中,必须编译支持Iptunnel这个选项
优点:负载均衡器只负责分发请求包,而rs直接返回给客户,减少了负载均衡器的大量数据流量,负载均衡器就能处理很大量的请求,这种方式一台负载均衡器能够为很多rs进行分发,而且跑在公网上就能对不同地域进行分发。
缺点:隧道模式的rs节点都需要合法ip,这种方式需要所有服务器支持IP tunneling协议,服务器可能只局限在部分linux系统上。
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:调度器自动问询服务器的负载情况,动态调整权值
haproxy
1、介绍一下haproxy
haproxy是支持虚拟主机的,可以工作在四层、七层(支持多网段)
haproxy能够补充nginx的一些缺点,比如会话保持、cookie的引导,同时支持通过获取指定的url检测后端服务器的状态
haproxy跟lvs类似,本身就是一款负载均衡软件,单纯从效率上讲haproxy比nginx有更出色的负载均衡速度,在并发处理上也优于nginx
haproxy支持tcp协议的负载均衡转发,可以对mysql读进行负载均衡
2、haproxy什么场景使用四层负载均衡,什么是时候使用七层

3、网站使用四层负载均衡还是七层负载均衡
使用七层负载均衡,使用域名方便用户访问
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服务。
zabbix
1、zabbix有什么优点
开源、无软件成本、server对设备性能要求低、支持的设备多,自带多种监控模板、支持分布式集中管理、有自动发现功能实现自动化监控、开放式接口,扩展性强
2、zabbix的监控模式
被动模式:server端向agent端请求获取监控项配置的相关数据,agent端响应,并将数据发送给server端
主动模式:agent端主动向server请求与自己相关监控配置,主动将server配置的监控项的相关数据发送给server端
3、zabbix自定义监控怎么做
先创建监控脚本,测试一下能否获取到我们想获取的值,然后在zabbix_agentd.conf.d目录下创建以.conf结尾的文件,在文件中写入UserParameter=,,key就是自定义监控项的名字,command是要执行的命令或者你创建的脚本的执行路径
4、zabbix的自动发现功能
创建发现规则,扫描一个规则范围内的ip,然后创建发现主机后的action动作,我们一般都有创建好的模板,模板关联某个主机群组(有监控项、触发器、动作),发现主机后,将它添加到主机群组,实现自动化监控
5、zabbix监控过什么
zabbix监控redis集群的状态,监控mysql主从的状态,mysql查询吞吐量(show global status like “questions”;)、连接情况( show status like '%connect%';)、缓冲池情况(show variables like ‘innodb_buffer_pool%’)
nginx的状态,cpu利用率,cpu负载、磁盘使用情况
6、zabbix分布式监控有什么特点
主要缓解server监控端的压力,当agent过多时,server需要跟多个agent进行交互,数据过多时,server承受不住那么大的压力。所以可以在server和agent之间增加proxy,proxy代替server搜集数据,然后将数据统一发送给server
7、zabbix遇到过什么问题
报警Zabbix agent on Zabbix server is unreachable for 5 minutes,这个时候只要明白agent配置文件,则很容易解决。
8、zabbix的缺点
数据库是个瓶颈,图形单调
9、zabbixagent端能够执行脚本,但是zabbix server端zabbix get获取不到数据,响应超时,为什么
可能是防火墙没有开放,可以看一下日志,如果没有报错的话说明请求根本就没有发送过去,可以看一下agent端的配置文件有没有问题,如果有错误日志可以看一下是拒绝访问还是那些问题。
10、zabbix怎么监控网站的状态
这个需要一个组件,输入url可以直接检测,有观众看到了问飞哥,缠着他好好讲一下
jenkins
1、jenkins的工作流程
从git仓库拉取代码(需要git插件,jenkins服务器下载git,并将jenkins的公钥配置到仓库的ssh密钥,jenkinsweb界面配置自己的私钥),通过maven编译打包(可以达成war包或jar包,需要jdk和maven的环境和插件),将打包好的包发送到web服务器的网站发布目录(需要将jenkins的公钥发送到web服务器对应的用户家目录)
2、jenkins功能强大到哪里
jenkins可以进行参数化构建,版本回退(可以基于修订号以及标签、分支进行版本回退或构建)。也可以实现自动发布,定时发布,需要在jenkins和gitlab仓库配置gitlab webhook插件。
3、Jenkins怎么用的

4、maven是来干嘛的,编译打包的时候可以加什么参数
编译打包的,clean、package
pom.xml
redis
1、redis有几种集群模式
redis有三种集群模式:主从集群,哨兵集群模式、去中心化集群模式
主从模式:提供数据的多冗余,主节点和从节点提供相同的数据,主节点宕机后,集群不可用
哨兵模式:哨兵模式是官方推荐的高可用方案,但不是真正的高可用。哨兵模式是在主从集群基础上实现的,每个节点部署哨兵,涉及到主观下线和客观下线,当半数以上的哨兵认为master宕机后,会根据优先级从从节点中选取一个成为新的master,当坏掉的master恢复后,会自动成为从slave。解决了主从集群的单点故障问题,但是所有节点提供相同的服务,资源有点浪费
去中心化集群模式:采用无中心化结构,每个节点保存数据和整个集群的状态,每个节点中间能够进行内部通讯,redis-cluster的数据使用分片的方式实现,redis-cluster集群内置了16384个哈希槽,0-16383,当要存储一个key-value时,redis会对key进行crc16运算出一个结果,用这个结果对16384进行取余,然后将这个key分配到对应的节点哈希槽中。当连接任何一个节点获取这个数据时,也会有这样的算法,然后内部跳转到存放key的这个节点上。去中心化一般也会做成主从模式,一个主节点对应一个或多个从节点,当主节点宕机后,从节点会成为新的主节点。当主节点没有从节点时,集群不可用,当主节点和从节点同时失效,集群不可用。
2、redis持久化方式有几种
2种,RDB、AOF
RDB相当于把数据拍了个快照,但是可能因为在拍快照的时候,有新的数据生成,导致数据不够完整。AOF的完整性会高一点,因为AOF记录的数据的的写指令,再重启之后,只需要将这些指令从新执行一遍,就能够恢复数据。我们一般使用的是RDB方式,AOF视情况开启,一般只会选择一种,因为开启两种的话,可能会对redis造成一定的压力。只用RDB的话虽然数据完整性不高,但是影响也不大,因为数据库中还有一份,只需要同步到redis就行。
3、redis和mysql的区别
mysql支持事务,redis不支持。mysql支持通用sql语句,redis不支持。mysql使用固定表结构,可用复杂查询。mysql的数据存储方式单一,redis数据存储比较灵活。mysql数据存储于磁盘,对于高并发的读写请求,磁盘io是很大的瓶颈。redis的数据存储于磁盘或者内存中,读写效率更高。
4、redis针对内存过高,有其他操作吗
设置key的过期时间,对于不经常使用的key过期时间可以设置的小一点。redis会将所有设置了过期时间的key放入一个字典中,然后每隔一段时间从字典中随机取一些key检查过期时间,并删除已过期的key。
5、reids上存储什么数据
热点数据:一般会存一些经常查询且变动不是很频繁的数据
比如:新闻网站实时热点、微博热搜等,需要频繁更新。总数据量大得时候直接从数据库中查询会影响性能。
电商网站信息:大型电商平台初始化页面数据的缓存。比如去哪网购买机票的时候首页的价格和你点进去的价格会有差异
6、mysql和redis为什么结合使用
当网站的处理和访问量非常大的时候,我们数据库的压力就变大了,数据库同时处理数据的能力就会大打折扣。使用redis,将表中经常访问的数据记录到Redis中,用户查询时先去查询redis中的数据,没有的话再查询mysql,由于数据是存储在内存中的,处理速度会非常快。
7、redis怎么做数据备份
RDB、AOF
8、redis哨兵原理
哨兵是一个独立的进程,原理就是哨兵通过发送命令,等待redis主节点响应,超过指定时间没有响应,哨兵会认为主节点下线了,选举从节点成为主节点。其中涉及到一个主观下线和客观下线。指定时间内哨兵没收收到目标节点的响应会认为该节点主观下线,当半数以上的哨兵认为该节点下线后则认为客观下线,然后会发起选举,选举从节点成为主节点。
9、redis缓存预热?

rabbitmq
1、RabbitMQ普通模式和镜像模式的区别
普通模式:以两个节点(a、b)来说明,对于Queue(消息队列载体)来说明。对于Queue来说,消息实体只存在于其中一个节点a(或者b),a和b两个节点仅有相同的元数据,即队列的结构,当消息进入a节点的Queue后,consumer从b节点消费时,RabbitMQ会临时在a、b间进行传输,把a中的消息实体取出,并经过b发送给consumer。所以consumer应尽量连接每一个节点从中取消息,即对于同一个逻辑队列,要建立多个节点建立物理Queue。否则无论consumer连a或b,出口总在a,会产生瓶颈。
镜像模式:将需要消费的队列变成镜像队列,存在于多个节点中,这样就可以实现RabbitMQ高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取,缺点就是,集群内部的同步通讯会占用大量的网络宽带。
镜像模式适用于对可靠性要求比较高的场合中使用。
2、RabbitMQ和kafka的区别
kafka是基于pull的模式来处理消息消费,追求高吞吐量,目的是用于日志的搜集和传输,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据搜集业务
RabbitMQ是基于AMQP协议实现的,这个协议主要特征是面向消息队列、路由(包括点对点和发布订阅)、可靠性、安全。用于在企业系统内对数据一致性,稳定性和可靠性要求很高的场景,对性能和吞吐量的要求在其次。
3、RabbitMQ集群是做七层负载均衡还是四层
是可以使用lvs或者haproxy做四层负载均衡
ansible
1、ansible的常用模块
远程复制模块:copy -m copy –a ‘src=/ dest=/’ owner指定属主、group指定属组 mode指定权限 backup在覆盖之前将源文件备份
yum模块:-m yum –a “name= state= ” state状态(absent卸载、latest最新的、removed卸载)
服务管理模块:service –m service –a “name= state= ” (restart重启、start启动、enable开机自启yes|no)
文件模块:file –m file –a “path= mode= state=” (owner属主、group属组、mode权限、path路径、recurse递归设置文件属性,只对目录有效yes表示使用递归设置、touch创建一个新的文件、directory创建一个目录,当目录存在不会进行修改)
ansible命令参数:ansible
-i (主机文件) -m (指定模块) -a(模块参数) -v(详细显示)
2、ansible剧本格式
- hosts: (控制节点)
user: (指定用户)
tasks: (任务元素,一个剧本只能有一个tasks)
- name: (定义tasks的名称,可以有多个name)
file: (使用的模块)
tags:
notify:
handlers: (用于当前关注的资源发生变化时采取的指定的操作)
- name: (名称要跟notify定义的对应)
tags: (给指定任务定义一个调用标识)
3、写过什么剧本
简单的有lnmp架构的部署,还有批量部署jdk+tomcat+jenkins
4、ansible剧本的目录结构
我觉得问的应该是剧本中的file和vars等模块指定的文件路径和存放变量的文件路劲
5、ansible的默认线程数
默认五个,可以在配置文件中找到forks,调为100-200,具体作用没有深入研究
elk+kafka+filebeat
1、elk了解吗
logstash安装在需要搜集日志的主机上,负责搜集日志,并发送给es集群(配置文件中input配置日志搜集的位置,filter过滤作用,output配置输出es集群的ip地址),es集群负责存储日志数据,kibana提供可视化日志分析界面
elasticsearch提供搜集、分析、存储数据三大功能。他的特点有:分布式、零配置、自动发现、索引自动切片,索引副本机制
2、logstash有哪些组件
input、filter、output
logstash主要是用来进行日志的搜集、过滤、分析的工具,支持大量的数据获取方式,一般工作方式为C/S。client端安装在需要搜集日志的主机上,server端负责将受到的各节点日志进行过滤,修改并发送到elasticsearch上。
3、logstash的过滤功能用过吗,过滤的是什么
logstash过滤功能用过,实用filter模块过滤日志或者数据,但是我们用的是filebeat实现过滤功能的,直接在采集的时候过滤不需要的内容,incloud_lines指定记录包含某些内容的行。exclude_lines指定过滤包含某些内容的行。TIPS:与multiline联合使用的时候,会针对合并后的记录再过滤。
4、es集群是怎么保证数据的高可用的

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

6、filebeat怎么实现过滤功能
filebeat中使用处理器prospectors,有两个是比较基础的可以实现过滤功能。思路:定义搜集数据的类型、路径、exclude_lines过滤掉某行、定义输出位置。
包含某行的话使用input_lines。
image.png

firewalld&iptables
1、四表五链说一下
四表:
row:(追踪)
mangle:(重新封装)
filter:(过滤用的)
nat:(网络地址转换)
五链:
PREROUTING:(进路由前的包)
INPUT:(过滤后的包)
FARWARD:(转发)
OUTPUT:(转发后的包)
POSTOUTING:(出路由后的包)
2、iptables和firewalld的区别
firewalld默认是拒绝的,需要设置后才能放行。而iptables默认允许,需要拒绝的采取限制
firewalld使用区域和服务而不是链式规则
firewalld可以动态修改单条规则,动态管理规则集,运行更新规则而不破坏现有会话和连接,而iptables在修改了规则之后需要刷新才能生效
iptables的配置文件在/etc/sysconfig/iptables中,而firewalld的配置文件在/usr/lib/firewalld和/etc/firewalld中的各种xml文件中
iptables没有守护进程,并不能算是真正意义上的服务,而firewalld有守护进程
iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口
docker
1、docker的优点
提高服务器资源利用率、快速搭建新技术环境,不用学习复杂的部署环境、完美构建微服务部署环境、一次构建多次部署、快速部署、迁移、回滚、不依赖底层环境
相对于传统虚拟机,占用资源更少、启动更快、可移植性强,一次交付多次使用
2、docker的缺点
单纯用docker的话,网络是个问题,容器之间不能通信,排查问题比较麻烦
3、docker的网络模式
host:主机网络。docker容器和主机共用一个ip地址。
none:无指定网络。启动容器时,可以通过--network=none,docker容器不会分配局域网ip
container:指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。
bridge:网络桥接。默认情况下启动、创建容器都是用该模式,所以每次docker容器重启时会按照顺序获取对应ip地址。
4、dockerfile
FROM 指定基础镜像
LABEL 为镜像指定标签
RUN 运行命令
ENV 设定环境变量
ADD 添加文件到容器:压缩包 自动帮你解压
COPY 文件拷贝
WORKDIR 指定工作目录
EXPOSE 暴露端口
CMD 指定要运行的命令
通过dockerfile构建镜像的时候尽量把命令写到一行,因为dockerfile创建镜像是一层一层创建的,如果命令行太多,会导致镜像比较大,写在一行的话,能够减小镜像的大小
5、docker三大核心组件
docker registeries docker仓库
docker images docker镜像
docker containers docker容器
6、docker三大组成要素:
命名空间:命名空间保证了容器之间彼此互不影响。容器隔离,pid、net、mnt、user、hostname
资源限制:cgroups 资源(内存、cpu)
文件系统:overlay2
7、docker中的cmd和entrypoint的区别
CMD:如果在dockerfile中的CMD中有了[“/bin/bash”,”-c”],那么就不用再执行的时候在添加了,如果添加了参数的话就相当于要执行你添加的参数,默认的CMD中的参数就无效了。
ENTRYPOINT:dockerfile中有ENTRYPOINT[“tail”,”-f”,”/var/log/nginx/access.log”],那么启动的时候镜像就执行了这里面的内容,如果你像上面带参数的话就相当于在这个执行的内容后面再加入参数。
8、查看容器的cpu和内存情况
docker stats
9、查看容器的详细信息(包括镜像、、、)
docker inspect
docker-compose
1、了解docker-compose吗
docker-compose也是一种编排工具,说一下比较常用的服务配置
services:定义一个容器
build:构建定义的容器,可以指定包含构建上下文的路径,或者作为一个对象,带对象具有上下文路径和指定的Dockerfile文件
image:指定启动容器的镜像,可以是镜像仓库/标签或者镜像id。如果镜像不存在compose将尝试从官方镜像仓库将其pull下来,如果同时指定了build,这种情况下,他将使用指定的build选项构建他,并使用image指定的名字来对其进行标记
container_name:定义容器的名字
volumes:卷挂载路径,可以在宿主机上挂载相对路径或者绝对路径,相对路径应始终以.或者..开始。通过顶级volumes定义一个挂载卷,并在每一个服务的卷列表引用他,会替换早期的compose中的volumes_from
command:定义了容器运行之后执行的命令
links:连接到另一个服务中的容器,需要指定服务名称和链接别名。或只指定服务名称。external_links:链接到docker-compose.yaml外部的容器
expose:暴露端口,但不映射到宿主机,只被连接的服务访问
ports:暴露端口信息,映射到宿主机
restart:容器的重启策略,默认为no(容器是否随着docker服务的启动而自启,aways总是,on-failure,出现错误重启容器)
environment:添加环境变量。注意:只给定名称的变量会自动获取他在compose主机上的值
k8s
1、k8s的组件了解吗
组件:
master节点上的组件
apiserver:k8s系统的入口,封装了核心对象的增删改查功能。
scheduler:负责pod的节点选择,负责集群的资源调度,组件抽离
controller:执行各种控制器,目前提供了很多种调度器保证k8s集群的正常运行
node节点上的组件
kubelet:负责管控容器,kubelet会从k8sapiserver接受pod的创建请求,启动和停止容器,监控容器的状态并汇报给k8sapiserver
k8s-proxy:负责为pod创建代理服务。k8s-proxy会从apiserver获取所有的service信息,并根据service的信息创建代理服务,实现service到pod的请求路由和转发,从而实现k8s层级的虚拟转发网络
docker engine:docker引擎,负责本机的容器创建和管理工作以及镜像的拉取
flannel网络插件
etcd可以部署在master也可以单独部署,分布式键值存储系统,用于保存集群状态数据,比如pod、service、等对象信息
2、k8s的控制器用过哪几种
deployment:负责管理pod副本,保证pod的实际运行数量与指定的数量一致,比RC更完
replication controller:负责管理副本的数量,是实现弹性伸缩、动态扩容和滚动升级的核心
daemonset:DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时,会为他们新增一个 Pod。
statefulset:StatefulSet 中的 Pod 拥有一个具有黏性的、独一无二的身份标识。这个标识基于StatefulSet 控制器分配给每个 Pod 的唯一顺序索引。唯一标识格式:podname.servicename.namespace名称.svc.cluster.local,有序的创建删除pod
3、k8s的资源对象
资源对象:
Projected Volume:为了给容器提供预先定义好的数据
secret:主要用来保存小片敏感数据,例如密码、用户名、token等,创建secret后,pod引用这个secret才能使用
configmap:保存的是不需要加密的一些配置信息。
downwardapi:用于在容器中获取pod的基本信息
serviceaccount:用以给pod提权,需要定义角色、定义绑定规则,将定义的角色通过绑定规则与clusterrole绑定,然后serviceaccount关联clusterrole,pod引用这个serviceaccount实现提权
service:service是pod的一个逻辑分组,是pod服务的对外入口抽象。service同样也通过pod的标签来选择pod,与控制器一致。
ClusterIP:默认类型,自动分配一个仅可在内部访问的虚拟IP。应用方式:内部服务访问
NodePort:在ClusterIP的基础之上,为集群内的每台物理机绑定一个端口,外网通过任意节点的物理机IP:端口来访问服务。应用方式:外服访问服务
LoadBalance:在NodePort基础之上,提供外部负载均衡器与外网统一IP,此IP可以将请求转发到对应服务上。这个是各个云厂商提供的服务。应用方式:外服访问服务
ExternalName:引入集群外部的服务,可以在集群内部通过别名方式访问(通过 serviceName.namespaceName.svc.cluster.local访问)
支持持久化存储
storageclass:定义了如何创建pv
PV:描述的是持久化存储卷,主要定义的是一个持久化存储在宿主机上的目录,比如一个nfs的挂载目录
PVC:描述的是pod所希望使用的持久化存储的属性,比如。volume存储的大小、可读写权限等等
静态存储:集群管理员手工创建pv,在定义pv时需要将后端存储的特性进行设置
动态存储供给:管理员无需创建pv,而是通过storageclass的设置对后端存储进行描述,标记为某种类型。此时要求pvc对存储的类型进行声明,系统将自动完成pv的创建以及与pvc的绑定
3、k8s遇到过什么问题

4、docker-compose和k8s的区别
两个都是容器编排工具,但是个人认为k8s更方便高效一些
5、mysql的pod的数据是怎么处理的
pod的数据时持久化到宿主机上的,结合计划任务定时备份,定时清理
6、k8s对pod的内存和cpu的限制
requests:容器运行需求,最低保障
limits:限制,硬限制(资源上限)

http、tcp、icmp协议
(网络这块真的是死穴.....)

osi七层模型
应用层、会话层、表示层、传输层、网络层、数据链路层、物理层
系统优化
不使用root用户登陆,添加普通用户,通过sudo授权管理
更改ssh端口号,禁止用户名密码登录,采用密钥认证登录
防火墙有必要的时候开启,服务的端口要放行,至于是点对点放行还是对所有人放行,视情况而定
定时自动更新服务器时间
调整文件描述符的数量。进程及文件的打开都会消耗文件描述符
定期清理/var/spool/clientquene目录垃圾文件,防止inodes节点被占满
文件句柄数设置高一点/etc/security/limits.conf
交换分区的使用策略,当内存不够用的时候将不经常访问的数据放到交换分区中,设置使用策略,当内存使用达到某个阈值的时候开始使用交换分区。
概念问题
1、cpu利用率和cpu负载
cpu利用率:显示的是程序运行期间实际占用的cpu百分比
cpu负载:显示的是一段时间内正在使用和等待使用cpu的平均任务数。cpu利用率高并不意味着cpu的负载就大,比如有一个程序需要一直使用cpu的运算功能,那么此时的cpu利用率从可能达到100%,但是cpu负载则是趋近1,因为仅负责一个工作。如果同时执行这样的程序两个呢,cpu的使用率还是100%,但是cpu负载变成了2,也就是说,cpu的负载越高,说明cpu必须在不同的公作之间进行频繁的工作切换
2、公有云和私有云的区别:私有云和公有云的显著区别在于对数据的掌控。采用公有云的企业必须将数据托管与云服务商的数据中心,企业对数据的掌控力度自然减弱,一旦数据中心因为自然灾害人为因素或者法律规范等问题导致数据丢失,将对企业造成致命伤害。私有云在数据安全、数据备份等方面有更多的选择空间,公有云当然也具备数据安全服务和数据备份的能力,但企业对数据的控制力度差,不能处于主导地位。
3、软链接和硬链接的区别
硬链接链接文件跟原文件的inode号相同,软链接文件跟原文件的inode号不同。删除原文件对硬链接文件没有影响,而软链接文件会失效。软链接可以跨文件系统,硬链接不行,目录支持软链接不支持硬链接。ln默认硬链接 ln –s软链接
4、什么是位置变量,什么是预定义变量
再执行脚本时同时输入参数,这些参数对应的变量就是位置变量。预定义变量就是系统自己定义好的变量,直接可以使用
5、高可用和负载均衡的区别
这是两个概念:
高可用顾名思义就是尽量采取措施减少系统服务的中断时间,提高业务程序持续对外提供服务的能力。
负载均衡是将高并发的请求数据分发到不同的集群节点,尽量平衡系统所有资源的压力,从而提升整个集群处理请求的能力
6、scp用的什么协议:ssh协议
7、ansible什么协议:ssh协议
8、ssh协议在哪一层:建立在应用层的安全协议
9、ssh默认端口号:22,一般会改为其他的比如30022,可以在/etc/sshd/ssh_config中修改
10、ssh一般修改什么配置
修改默认端口
11、查看mac地址
cat /sys/class/net/ens33/address
ifconfig 查询结果的ether字段就是对应网卡的mac地址
12、ssh和telnet
ssh跟telnet
telnet是明码传输,ssh是加密传输。telnet通过TCP/IP协议来访问远程计算机来控制你的设备,其传输的数据和口令是明文形式的。这样攻击者就很容易得到你的口令和数据。其方式也很简单,他以中间人的身份冒充你的设备截取你的数据,然后再把假数据再传给你的远程设备,从而达到攻击的目的。SSH是替代Telnet和其他远程控制台管理应用程序的行业标准。SSH命令是加密的并以几种方式进行保密。
13、udp跟tcp
TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢
UDP 是一种面向无连接的传输层协议,不会对自己提供的连接实施控制。适用于实时应用,例如:IP电话、视频会议、直播等。以报文的方式传输,效率高
14、https验证流程
客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明:
1、首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
2、浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
3、如果找不到,浏览器就会报错,说明服务器发来的证书时不可信任的
4、如果找到,那么浏览器就会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书中的得签名进行解密
5、浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
6、对比结果一致,证明服务器发来的证书合法,没有被冒充
7、此时浏览器就可以读取证书中的公钥,用于后续加密
8、client与web协商对称加密算法,client生成对称加密密钥,并使用web公钥加密,发送给web服务器,web服务器使用web私钥解密
9、使用对称加密密钥传输数据,并校验数据的完整性
所以通过发送SSL证书的形式,即解决了公钥获取问题,又解决了黑客冒充问题。HTTPS加密过程也就此形成
15、新生代、老年代、持久代
新生代:类在这里产生和应用,最后被垃圾回收,所有的类在伊甸区被新生出来,当伊甸区满了之后,GC会对该区不用的对象进行销毁,剩余有用的转到幸存区
老年代:用于存放生命周期比较长的对象
永久代:存放JDK自带的class、interface
16、dns解析过程
dns查询的结果通常会在本地域名服务器进行缓存,如果本地域名服务器中有缓存,会跳过dns查询步骤。
如果没有缓存。会进行递归查询或迭代查询
浏览器输入www.baidu.com,先查询本地dns,如果本地dns没有结果,则由本地域名服务器开始进行递归查询
本地域名服务器采用迭代查询的方法,向根域名服务器进行查询。
根域名服务器告诉本地域名服务器,下一步应该查询顶级域名服务器.com TLD的ip地址
本地域名服务器向顶级域名服务器TLD进行查询
顶级域名服务器告诉本地域名服务器,下一步查询baidu.com权威域名服务器的ip地址
本地域名服务器向baidu.com权威域名服务器发送查询
权威域名服务器告诉本地域名服务器下一步查询www.baidu.com子域名服务器的ip地址
www.baidu.com子域名服务器告诉本地域名服务器所查询的主机ip地址
本地域名服务器最后把查询的ip地址响应给浏览器
一旦返回了ip地址,浏览器就能对网页发出请求,浏览器向ip地址发送http请求
17、raid磁盘阵列
RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。

RAID1把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。

RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。
RAID 5 磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷,通过奇偶校验信息来尝试重建损坏的数据。

RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”。RAID 10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损坏 50%的硬盘设备而不丢失数据。
18、进程和线程的区别
进程是资源分配的最小单位,线程是cpu调度的最小单位,一个进程可以包含多个线程、进程是系统正在运行的程序,进程的稳定性高,独占内存。线程来源于进程,一个进程可以有多个线程,进程共享进程的内存,稳定性低,不支持php
19、什么是CDN服务
内容分发网络:提高用户访问的响应速度和成功率;加快网站访问,为了实现跨运营商,跨地域的全网覆盖,为了保障网络安全。(阿里云腾旭云都有CDN加速服务)
20、kill –HUP pid
更改配置而不需停止并重新启动服务,请使用该命令。
故障排查
1、服务器比较卡怎么办
先看一下内存是的使用情况,是不是内存不够用了,如果是内存不够了可以根据服务器运行的服务决定是否要释放一下内存。然后看一下磁盘使用情况,是否空间不足,清理过期文件或者增大磁盘空间
接着查看cpu负载,是否有io等待占用cpu,使用iostat确认是哪个磁盘存在io异常,接着使用iotop或者ps确定是哪个进程导致io异常,找到进程后在/proc/进程号/io查看进程读写磁盘的字节数,然后把它杀死
遇到过什么问题
企业问题:
版本不一致导致主从同步异常
zabbix对数据库主从状态进行监控,某天突然报警,主从不同步了,登录从数据库后发现sql线程错误
解决方案,根据下面的报错信息,说是一条sql语句有问题,查看了一下是grant all privileges on wordpress. to ‘wordpress’@’%’ identified by ‘fafafaf@123’;这条sql语句有问题,然后在主库重新执行一下发现没问题,当时也没发现是版本不一致导致的,因为mysql8.0不能直接使用grant这个命令生成用户并授权,只能先创建用户在授权,然后把这个语句在从库上执行了一下,发现不能执行,想了好一会想到会不会是版本不一致导致的,就看一了下版本,发现是8.0版本。
解决方案:
1、stop slave
2、set global sql_slave_skip_counter=1 跳过这个事务
3、start slave
4、show slave status \G 查看异常是否解决,发现解决了,但是用户授权未成功,所以需要手动执行一下
5、因为从库设置了只读,需要先关闭一下set global read_only=0
6、create user 'query_data_analysis'@'%' identified by 'Han2rZY7uEn9m!Asana';
7、GRANT all privileges on data_analysis.
to query_data_analysis@'%';
8、把从库重新设为只读set global read_only=1

企业问题
某天突然收到报警信息,cpu使用率和cpu负载一直很高,我就用top命令看了一下,发现是mysql占用cpu的使用率很高,就对数据库的状态进行排查,先看了一下mysql的连接数,发现并不高,然后就show processlist查看了一下mysql哪些线程在运行,发现有几条sql语句一直在执行,陷入了循环,我就把这几条sql语句截图发到开发工作群,问一下这个sql语句是干啥的,能不能停掉,不然cpu负载一直这么高要是宕机了就麻烦了,开发说可以先停掉,我就kill id号,将这几个线程杀死。解决问题,数据库内存2核8g

企业问题
某天收到报警信息内存和cpu占用都很高,服务器变得很卡,就用top查看了一下,发现是一个lthpc用户起来的程序,发现占用cpu500%,对这个用户一点印象都没有,所以就kill杀死了,但是过了一会这个程序就起来了,就想着应该是有木马,就crontab –l查看了一下任务计划,因为使用root用户查看的,所以没有看到,就去了/var/spool/cron中看了一下,发现了lthpc这个用户创建的定时任务,打开看了一下,发现他每个一段时间就会执行一个脚本,我就根据里面的路径找到了这个脚本,还是隐藏文件,因为当时也比较急,没有看脚本内容就直接删除了,总结,删除无关用户,修改用户密码,增强密码强度,开启防火墙。

50、你们有多少服务器,服务器配置,用过哪种服务器,去过机房吗,机房都有什么
我知道的有1000台服务器,戴尔R730有的在idc机房,有的是云服务器,还有我们自己的机房,64G16核的,没去过机房,有机房运维负责

keepalived脑裂问题
master运行正常的时候vip正常,当关闭master节点的keepalived的时候发现主从节点都有vip
解决方法:将keepalived中的killmode=process注释掉(这一行的意思大概是当keepalived的服务的主进程被杀死后不会杀死它的子进程)

tomcat服务器假死
有一次做活动的时候,tomcat服务器假死,导致用户打不开页面(问题分析,有可能是做活动,服务器的访问量上来了,导致数据库扛不住,但是zabbix监控现实mysql的状态正常,可能跟tomcat本身有关,查看tomcat的监听端口发现,有大量的tcp连接等待关闭,手动关闭就行了)
解决方法:修改linux的tcp超时时间/etc/sysctl.conf,重启network生效

keepalived(vip不漂移)
测试环境中:keepalived高可用的时候,发现vip不漂移。仔细检查发现从节点的keepalived配置文件中优先级设置的不合理,没有设置不抢占资源,修改之后发现可以实现漂移,但是在杀死mysql进程的时候还是不漂移,仔细检查后发现健康检测脚本中,root用户不支持远程登录,换成普通用户即可。