2023年11月27日发(作者:)
负载均衡(107个问题)
负载均衡⽅⾯
1. LVS 与nginx 的区别
LVS: 是基于四层的转发 只能做端⼝的转发
1. 抗负载能⼒强,⼯作⽅式的逻辑简单,⼯作在七层模型第四层,只做请求分发⽤,没有流量产⽣,所以效率⾼,保住了均衡器的IO性
能不会受到⼤流量的影响
2. ⼯作稳定,也就是稳定性⾼,有完整的双机热备⽅案:LVS+keepalive
3. LVS基本上能⽀持所有应⽤,可以对⼏乎所有应⽤作负载均衡,⽐如http、数据库等。
Nginx: Nginx不仅仅是⼀款优秀的负载均衡器/反向代理软件,它同时也是功能强⼤的Web应⽤服务器,可以做七层的转发 URL和⽬录的转
发都可以做。
1. nginx⼯作在⽹络的第7层,所以它可以针对http应⽤本⾝来做分流策略,⽐如针对域名、⽬录结构等
2. nginx对⽹络的依赖较⼩,理论上只要ping得通,⽹页访问正常,nginx就能连得通
3. nginx安装和配置⽐较简单,测试起来也很⽅便
4. nginx可以检测到服务器内部的故障,⽐如根据服务器处理⽹页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另⼀个
节点。
2. LVS的算法
1. 轮询调度(简称'RR')算法就是按依次循环的⽅式将请求调度到不同的服务器上,该算法最⼤的特点就是实现简单。轮询算法假设所
有的服务器处理请求的能⼒都⼀样的,调度器会将所有的请求平均分配给每个真实服务器。
2. 加权轮询调度(简称'WRR')算法主要是对轮询算法的⼀种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加⼀个权
值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越⾼的服务器,处理的
请求越多。
3. 最⼩连接调度(简称'LC')算法是把新的连接请求分配到当前连接数最⼩的服务器。最⼩连接调度是⼀种动态的调度算法,它通过服务
器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建⽴连接的数⽬,当⼀个请求被调度到某台服务器,其连接
数加1;当连接中断或者超时,其连接数减1。(集群系统的真实服务器具有相近的系统性能,采⽤最⼩连接调度算法可以⽐较好地均
衡负载。)
4. 加权最⼩连接调度(简称'WLC')算法是最⼩连接调度的超集,各个服务器相应的权值表⽰其处理性能。服务器的缺省权值为1,系统
管理员可以动态地设置服务器的权值。加权最⼩连接调度在调度新连接时尽可能使服务器的已建⽴连接数和其权值成⽐例。调度器可
以⾃动问询真实服务器的负载情况,并动态地调整其权值。
除此之外我还知道⼀些:基于局部的最少连接、⽬标地址散列调度、源地址散列调度、最少队列调度 等等这些。
3. Nginx负载的算法
nginx常见的负载均衡算法有五种
1. 轮询
轮询是默认的⽅式,轮询的⽅法是通过按照时间顺序将请求往不同的后端服务器发送,来缓解服务器的压⼒。如果后台服务器上某⼀台宕机
了,它可以⾃动剔除。
缺点:可靠性低和负载分配不均衡。适⽤于图⽚服务器和静态页⾯服务器集群。
2. 加权轮询(wight)
指定轮询的⼏率,wight和访问⽐率成正⽐,⽤于后台服务器性能不均匀的情况。
3. ip_hash
根据每个请求的ip的hash结果分配,因此每个固定ip能访问到同⼀个后端服务器,可以解决session问题。
4. fair(第三⽅)
按照后端服务器的相应时间来分配请求,时间短的优先分配。
_hash(第三⽅)
按照访问url的hash结果来分配请求,每个固定的url访问同⼀个后端服务器。如果后端服务器是缓存时效率⾼。
4. lvs⽤过哪些模式
我们公司使⽤的是DR模式 Nat和TUN我也了解
5. 你们常⽤的DR模式他的原理是啥
DR模式是通过改写请求报⽂的⽬标MAC地址,将请求发送给真实的服务器的,⽽真实的服务器将响应后的处理结果直接返回给客户端⽤户
6. nginx 有什么使⽤场景
我们公司使⽤nginx做负载均衡,反向代理,也做web服务器来使⽤;⽐如负载均衡,主要是⽤upstream模块,nginx的代理功能是使⽤http
proxy模块做的。
7. LVS脑裂问题是如何产⽣的
⼼跳链路故障,导致⽆法通信
开启防⽕墙阻挡⼼跳信息传输
⼼跳⽹卡地址配置不正确
其他: ⼼跳⽅式不同,⼼跳⼴播冲突,软件bug等防⽌
8. LVS 裂脑问题有什么解决⽅案
采⽤串⾏或以太⽹电缆连接,同时⽤两条⼼跳线路
做好裂脑的监控报警,在问题发⽣时⼈为第⼀时间介⼊仲裁
启⽤磁盘锁,即正在服务的⼀⽅只在发现⼼跳线全部断开时,才开启磁盘锁
fence设备(智能电源管理设备)
增加仲裁盘
加冗余线路
9. nginx ⽤过哪些模块
核⼼模块:core module
标准模块:
HTTP modules:
Standard HTTP modules 标准HTTP模块
Optional HTTP modules 可选HTTP模块
Mail modules 邮件模块
Stream modules 流模块
第三⽅模块
10. Nginx 与Apache的区别
Nginx配置简单、占⽤内存⼩,是轻量级Web服务器,抗并发⽐Apache好
Nginx处理请求的⽅式是异步⾮阻塞的 ⽽Apache是阻塞型的
Nginx处理静态⽂件好,静态处理性能⽐Apache⾼三倍以上
Apache处理动态请求有优势,⼀般动态请求要Apache去做,Nginx适合静态和反向。
Apache更为成熟,少bug,Nginx的bug相对较多
Apache的rewrite⽐nginx强⼤,在rewrite频繁的情况下,⽤Apache
Apache是同步多进程,⼀个连接对应⼀个进程,⼀个进程死掉时不会影响其他⽤户
Nginx是异步的,多个连接对应⼀个进程,⼀个进程死掉会影响多个⽤户,稳定性差
⼀般来说,需要性能的web服务,⽤Nginx。如果不需要性能只求稳定,更考虑Apache,Apache的各种功能模块实现⽐Nginx好,例如SSL
的模块就⽐Nginx好,可配置项多
11. nginx的优化怎么做的
隐藏版本号和服务器类型
设置nginx运⾏⽤户
修改运⾏进程个数
设置CUP运⾏亲和⼒
限制最⼤打开⽂件数
开启⾼效传输
设置链接超时时间
限制上传⽂件⼤⼩
12. nginx 500 304 是什么问题导致的
500:
脚本错误,如php语法错误,lua语法错误等。
2.访问量⼤的时候,由于系统资源限制,⽽不能打开过多的⽂件
硬盘空间满了:
使⽤ df -k 查看硬盘空间是否满了。清理硬盘空间就可以解决500错误。Nginx 如果开启了access log,在不需要的情况下,最好关闭access
log。access log 会占⽤⼤量硬盘空间。
分析思路:
查看nginx error log ,查看php error log
如果是脚本的问题,则需要修复脚本错误,并优化代码
各种优化都做好,还是出现too many open files,那就要考虑做负载均衡, 把 流量分散到不同服务器上去了。
304:
304:未修改(表⽰客户机缓存的版本是最新的,客户机应该继续使⽤它。)
13. nginx 有哪⼏种虚拟主机
基于IP 基于端⼝ 基于域名
基于IP的虚拟主机:每个⽹站都需要⼀个IP。缺点是:需要多个IP,如果是公⽹IP每个IP都需要收费
基于端⼝的虚拟主机:只需要⼀个IP。缺点:端⼝号没有办法告诉公⽹⽤户,⽆法适⽤于公⽹⽤户,适合内部⽤户使⽤。
基于域名的虚拟主机:最常⽤的就是基于域名的虚拟主机
14. 动静分离如何做的
我们公司使⽤的是tomcat+nginx实现动静分离 tomcat处理动态数据 nginx处理静态数据
15. 什么样的数据是动态,什么是静态
静态数据和动态数据都是指系统运⾏过程中的数据,其区别在于⼆者⼀个可变化⼀个不可变化。
静态数据是指在运⾏过程中主要作为控制或参考⽤的数据,它们在很长的⼀段时间内不会变化,⼀般不随运⾏⽽变。
动态数据包括所有在运⾏中发⽣变化的数据以及在运⾏中需要输⼊、输出的数据及在连机操作中要改变的数据。
16. tomcat的根⽬录是哪个
webapps/ROOT
17. 如何重启nginx
/usr/local/nginx//nginx -s reload
18. 如何检查nginx的配置⽂件的准确性
/usr/local/nginx//nginx -t
19. nginx⽇志分析怎么做的
我们公司使⽤ELK做nginx的⽇志分析 主要分析nginx的⽇志
20. tomcat调优做过哪些
内存优化
Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 中设置 java_OPTS 参数。
并发优化
调整连接器connector的并发处理能⼒;在Tomcat 配置⽂件 中
缓存压缩优化
打开tomcat的压缩功能;tomcat的压缩优化就是将返回的html页⾯等内容经过压缩,压缩成gzip格式之后,发送给浏览器,浏览器在本地解
压缩的过程。
安全优化
降权启动
以普通⽤户启动tomcat,降权启动,防⽌不法分⼦通过tomcat获得root权限。
#修改端⼝号
修改tomcat配置⽂件中的全球⼈都知道的http连接器端⼝号,防⽌⿊客攻击。
21. nginx如何设置防ddos攻击
限制每秒请求数
限制IP连接数
⽩名单设置
ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,⼀旦单位时间内请求数超过限制,就会返回503错误。
22. nginx⽇志分析你是分析的哪个⽇志
access_log 和
23. nginx⽇志分析的时候你们关注什么参数。
$remote_addr #与$http_x_forwarded_for 客户端的ip地址
$remote_user #客户端⽤户名称,⼀般默认为空
$time_local #访问时间
$status #请求状态
$http_user_agent #客户端浏览器相关信息
$request_body #POST数据
$request_length #客户端请求的长度
$upstream_status #upstream状态,成功是200
$upstream_response_time #请求过程中,upstream响应时间
数据库⽅⾯
24. mysql⽤的哪个版本
5. 7版本
25. mysql的存储引擎你知道哪⼏个,有啥区别
(1) MyISAM⽤⼀个变量保存了整个表的⾏数,InnoDB不保存表的具体⾏数,执⾏select count(*) from table时需要全表扫描。MylSAM执⾏上
述语句时只需要读出该变量即可,速度很快。
(2) MyISAM⽀持全⽂索引,Innodb不⽀持全⽂索引,查询效率上MyISAM要⾼。
(3) innodb⽀持事务,MyISAM不⽀持事务,
(4) 如果表中绝⼤多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使⽤InnoDB。系统奔溃后,MyISAM恢复起来更困
难。
26. mysql主从原理是啥
(1) 从库⽣成两个线程,⼀个I/O线程,⼀个SQL线程, i/o线程去请求主库 的binlog,并将得到的binlog⽇志写到relay log(中继⽇志) ⽂件
中;
(2) 主库会⽣成⼀个 log dump 线程,⽤来给从库 i/o线程传binlog;
(3) SQL 线程,会读取relay log⽂件中的⽇志,并解析成具体操作,来实现主从的操作⼀致,⽽最终数据⼀致;
27. mysql主从延迟是如何产⽣的
master可以并发,Slave_SQL_Running线程却不可以。
当主库的TPS并发较⾼时,产⽣的DDL数量超过slave⼀个sql线程所能承受的范围,那么延时就产⽣了,当然还有就是可能与slave的⼤型
query语句产⽣了锁等待。
TPS : 是⼀台数据库服务器每秒处理的事务的个数。
DDL:数据库定义语句,⽤来创建数据库中的表、索引、视图、存储过程、触发器等,常⽤的语句关键字
有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。
因素:
1. 从库的配置往往没有主库的配置⾼
2. 主库⽀持并发写⼊,⽽5.7之前的版本上从库只有单线程SQL来完成任务。
3. MySQL主从之间的同步,并不是完全的实时同步,⽽是主库提交事务之后,从库才再来执⾏⼀遍
4. 主库上的表的某个列没有索引,然后对这个列进⾏delete或update操作
5. ⽹络问题,往返时延RTT较⼤。
28. mysql主从延迟如何解决
(1) 最简单的解决⽅案就是在架构上做优化,尽量让主的DDL快速执⾏。
(2) 或者直接关闭slave的binlog,因为slave不需要很⾼的数据安全性
(3) 另外就是使⽤⽐主库更好的硬件设备作为slave
29. mysql读写分离⽤的什么⼯具
Mycat
mycat的三⼤功能:分表、读写分离、主从切换
Mycat 是⼀个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,⽽ Mycat 并没有存储引擎,所以并不是完全意义的分布式数
据库系统。可以将它理解为是⼀个数据库中间件,也可以理解为是数据库代理。在架构体系中是位于数据库和应⽤层之间的⼀个组件。
30. 你们⽤的⼏主⼏从
双主四从
31. mysql主从同步中主服务器宕机了如何处理,从服务器宕机如何处理
主库宕机:
(1) 确保所有的relay log全部更新完毕,在每个从库上执⾏show processlist
(2) 更新完毕后,登录所有从库查看⽂件,对⽐选择pos最⼤的作为新的主库,
(3) 然后登录这个新的主库,执⾏stop slave;进⼊主⽬录,删除和配置⽂件开启log-bin⽂件
(4) 创建⽤于同步的⽤户并授权slave
(5) 登录另外⼀台从库,执⾏stop slave停⽌同步
(6) 执⾏start slave
(7) 修改新的master数据,测试slave是否同步更新
从库宕机:
(1) 查看从库上mysql的错误⽇志,⾥⾯有记录主从挂掉时的binlog信息。
(2) 有了binlog和postion信息后,只需要重新在从库上进⾏change master to配置即可。配置后开启slave状态,没有报错
(3) 查看slave状态,发现slave已经正常了,开始进⾏延时数据恢复。
32. mysql有哪些⽇志⽂件
重做⽇志(redo log)
回滚⽇志(undo log)
⼆进制⽇志(binlog)
错误⽇志(errorlog)
慢查询⽇志(slow query log)
⼀般查询⽇志(general log)
中继⽇志(relay log)
Mysql⾃带的 服务⽇志
33. 慢查询⽇志如何设置
配置慢查询功能的⽅式有两种,⼀种是使⽤mysql的配置⽂件配置,另外⼀种是使⽤mysql命令配置。
配置⽂件配置:
// 找到[mysqld],在其下⾯添加如下代码即可.
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/var/
long_query_time=0 log-queries-not-using-indexes = 1
// 配置好后,重启mysql服务
使⽤命令配置:
// 这⾥就简单些⼀个配置项就⾏了,其他的配置项均按照此⽅法配置
mysql> set slow_query_log=ON;
34. mysql授权命令是啥
grant
35. mysql⽇常的数据 如何备份
我们公司有两种备份⽅式 ⼀种是全量备份 ⼀种是增量备份
全量备份我们公司使⽤Mysqldump备份 每周备份⼀次
增量备份我们公司使⽤binlog+xtrabackup备份 脚本运⾏每天备份
36. 每天的数据量有多⼤
我们公司的数据量每天在10-20G左右
37. mysql调优如何做的
内核优化:根据硬件配置来进⾏优化 ⽐如内存使⽤、TCP处理这⽅⾯的优化
配置参数的优化:我做过IO处理的常⽤参数、最⼤连接数设置、缓存使⽤参数的设置、慢⽇志的参数的设置
38. delete 和truncate的区别
1. delete是数据操作语⾔(DML)命令;⽽truncate是数据定义语⾔(DDL)命令。
2. delete命令采⽤⾏级锁定,表中的每⼀⾏都被锁定以进⾏删除;truncate命令采⽤表级锁定,锁定了整个表以删除所有记录。
3. delete命令不会影响表结构,⽽truncate命令会从数据库中删除表结构
4. 由于delete命令维护⽇志,因此速度很慢。但是,由于truncate命令在事务⽇志中维护最少的⽇志记录,因此执⾏速度更快。
39. 如何监控mysql,以及监控mysql的哪些参数
我们公司使⽤zabbix监控mysql数据库
监控数据库开启状态、缓存空间使⽤率、内存使⽤率、IO读写、⽹络流量、DB端⼝流量、数据库客户端的连接数、还有数据库的主从状态
40. mysql⾼可⽤有哪些⽅案
Mysql数据库的话 可以使⽤keepalive或者heartbeat做⾼可⽤架构 我们公司使⽤的是keepalive做的mysql双主⽅案
1. 主从或主主半同步复制
2. 半同步复制优化
3. ⾼可⽤架构优化
4. 共享存储
5. 分布式协议
41. 数据库连接不上,可能是哪些原因导致的
1. 可能是⽹络的问题,⽹速不佳
2. Mysql访问权限是否开启
3. 防⽕墙是否允许⽤户访问
4. 端⼝被占⽤
42. Redis的架构是什么样⼦的
我们公司使⽤的是redis的哨兵模式
Sentinel(哨兵)是Redis的⾼可⽤性解决⽅案:由⼀个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及这些主服务
器下的所有从服务器,并在被监视的主服务器进⼊下线状态时,⾃动将下线主服务器属下的某个从服务器升级为新的主服务器。
43. Redis持久化怎么做的
我们公司使⽤的是redis的默认持久化⽅式RDB
RDB有以下优点:1.性能很好,2.在数据量⼤的情况下恢复速度⽐AOF快
但是RDB也有缺点:就是⽐较容易造成数据的丢失,这也恰恰是AFO的优点
AOF的优点就是1.可以保持很⾼的数据完整性,2.⽇志不完整⽀持redis-check-aof来进⾏⽇志修复,3.可读性也⽐较强
AOF的缺点就是恢复速度慢
44. Redis你们⽤来存储什么样的数据
String(字符串类型)
hash(哈希 散列类型)
list(列表类型)
set(集合类型)
sorted set(有序集合类型)
主要是缓存⼀些 电商的页⾯ 客户信息 ⽂章信息之类的
45. Redis和memcache的区别
(1) Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可⽤于缓存其他东西,例如图⽚、视频等等。
(2) redis在数据⽀持上要⽐memecache多的多。
(3) memecache 把数据全部存在内存之中,redis有部份存在硬盘上,这样能保证数据的持久性,⽀持数据的持久化⽐如RDB和AOF两种持
久化存储⽅式
(4) redis⽬前官⽅只⽀持LINUX 上去运⾏
(5) Redis⽀持数据的备份,即master-slave模式的数据备份
个⼈总结⼀下,有持久化需求或者对数据结构和处理有⾼级要求的应⽤,选择redis,其他简单的key/value存储,选择memcache
监控⽅⾯
46. Zabbix都监控服务器的哪些参数
磁盘空间
磁盘IO
CPU负载
内存使⽤
开机时间
Web服务
数据库状态
47. Zabbix监控nginx的哪些指标
开启状态
客户端请求数
客户连接数
丢弃的连接数
单位时间内访问总数
⽹络流量
48. 你们微信报警怎么做
申请⼀个企业公众号
在微信企业号上新建应⽤
接⼝调⽤测试
配置脚本
Web页⾯新增报警媒介类型
配置⽤户的报警媒介信息
最后测试是否成功
49. 报警风暴如何避免
什么是告警风暴:
在⼤规模⽹络发⽣异常的时候,报警量激增,运维伙伴⼿机在1个多⼩时中不断的接受报警通知,这样有可能会造成“狼来了”等⼀系列的问
题,不但对运维⼈员造成了困扰,给排查问题带了不⼩的难度
如何避免:
我们可以做告警收敛,可以收敛架构图
①所有产⽣告警均由zabbix调⽤脚本推⼊缓存redis当中
②分析系统将在规定时间(1分钟)内去redis中拉取数据,根据定义好的⼀系列规则 进⾏,合并、分析或直接丢弃,并存⼊分析平台数据
库,以便供历史查询。
③根据预先定义好的规则将报警通过定义好的⽅式发送给相关⼈员。
对zabbix 进⾏设置
对Actions进⾏特殊设置,Default subject极为重要,是识别收敛的标⽰。
50. Zabbix有哪些监控⽅式,你们⽤的主动还是被动
Agent监控⽅式 Trapper监控⽅式
SNMP监控⽅式 JMX监控⽅式 IPMI监控⽅式
客户端分数据给服务端分为主被动两种模式,主动模式是zabbix客户端主动向服务端发送数据,被动模式是被动等待客户端来取数据。
主动模式的流程:
客户端每隔⼀段时间主动向服务端发起连接请求–>服务端收到请求,查询客户端需要取的item信息,发送给客户端–>客户端收集数据发送服务
端–>结束。
被动模式的流程:
客户端开⼀个端⼝默认10050,等待服务端来取数据,然后客户端收集数据发送到服务端,然后结束。
51. Zabbix⾃动发现怎么做
⽹络发现(Discovery)
⼀、Zabbix 创建发现规则创建发现规则Configuration ---- discovery ---- Create discovery rule
⼆、主机⾃动加⼊主机组并关联模板
(⼀)为discovery(发现)创建action(动作)
(1) 输⼊ Action 名字
(2) 添加触发Action的条件 这⾥添加了三个条件 分别是 "ip地址范围"、"服务类型" 和 "Discovery 状态"
(⼆)创建操作 2.2.1、"Add host "添加主机
52. 你还了解过哪些监控软件
Nagios Cacti
Cacti:
cacti是⼀款使⽤PHP语⾔开发的性能与流量检测软件,检测对象可以是Linux、Windows服务器,也可以是路由交换机等⽹络设备,主要基
于SNMP(simple、Network、Management、Protocol,简单⽹络管理协议)来搜集CPU占⽤、内存使⽤、运⾏进程、⽹卡流量等数据
Nagios:
Nagios是⼀款开源的计算机系统和⽹络监视⼯具,能有效地监控Windows,Linux和UNIX的主机服务状态,在系统服务发⽣异常时会发出电
⼦邮件和短信通知报警第⼀时间通知⽹站维护⼈员
53. ⽤过哪些zabbix的模板
nginx监控模板
ping监控模板
mysql监控模板
php-fpm监控模板
Clone:克隆模板
full clone:完全克隆
delete:删除模板
delete and clear:删除模板
54. Zabbix的版本号
3.2的版本
55. ⼀些不常见的模板,你们是下载别⼈写好的,还是⾃⼰写的
这些模板是公司前辈留下的 我也不清楚
56. Ansible⽤过哪些模块
Yum模块
Service模块
copy模块
ping模块
shell模块
command模块
user/group模块
57. Ansible你们在公司都⽤来做啥
⽤来做批量管理 批量部署 批量运⾏命令 代码上线 管理服务 ⽐如多台服务器修改配置⽂件就可以使⽤ansible来做 节省时间和精⼒很⽅便
58. Ansible与salt的区别
Saltstack的优点
1.SaltStack的响应速度要⽐Ansible快很多。
2.在⼤规模并发的情况下saltstack是占优势的,不过对于⼏⼗台-200台左右的服务器规模来说,ansible也是可以的
Ansible的优点
3.SaltStack使⽤ZeroMQ进⾏数据传输,ZeroMQ本⾝数据传输不⽀持加密Ansible使⽤标准SSH连接传输数据,不需要在远程主机上启动
守护进程,并且标准SSH数据传输本⾝就是加密传输,这样远程主机不容易被攻击
4.从⼯具本⾝的运维⾓度来说,Ansible要⽐SaltStack简单很多
5.Ansible的Playbook语法要⽐SaltStack的State语法具有更好的可读性
59. 你们公司有多少服务器
我们公司有150台服务器
60. Playbook都写过什么
批量部署redis集群 源码安装mysql这些应⽤ LNMP+电商
61. Redis有哪些数据类型
String(字符串类型)
hash(哈希 散列类型)
list(列表类型)
set(集合类型)
sorted set(有序集合类型)
62. DNS原理
DNS主要是⽤来做将主机名和域名转换为IP地址的⼯作
第⼀步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器.
第⼆步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回.
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器
⼀个所查询域(根的⼦域)的主域名服务器的地址.
第四步:本地服务器再向上⼀步返回的域名服务器发送请求,然后接受请求的服务器查询⾃⼰的缓存,如果没有该纪录,则返回相关的下级
的域名服务器的地址.
第五步:重复第四步,直到找到正确的纪录.
第六步:本地域名服务器把返回的结果保存到缓存,以备下⼀次使⽤,同时还将结果返回给客户机.
63. 你遇到过哪些棘⼿的问题,怎么解决的
Mysql从库宕机:
查看从库上mysql的错误⽇志,⾥⾯有记录主从挂掉时的binlog信息。
有了binlog和postion信息后,只需要重新在从库上进⾏change master to配置即可。配置后开启slave状态,没有报错
查看slave状态,发现slave已经正常了,开始进⾏延时数据恢复。
64. 访问⽹站的流程
⾸先访问本地缓存,缓存⾥有就直接返回,没有的话就直接访问DNS服务器 找相应的IP地址,找到后进⼊服务器主机⾥⾯找配置⽂件在配
置⽂件⾥⾯有相关的⽬录之类,找到相关的⽬录后根据⽬录访问到web页⾯,将结果展⽰给⽤户,并缓存⼀份供下次访问
65. Shell脚本写过哪些
⽇志切割脚本 监控mysql主从脚本 检测IP存活脚本
66. 说⼀下shell脚本监控mysql主从的思路
设置参数:数据库的⽤户和密码
使⽤截取命令截取SQL和IO线程的状态
判断状态是否是双yes
67. 说⼀下shell脚本监控公司⽹段IP是否存活的思路
设置for循环 将所有IP纳⼊for循环
使⽤ping命令测试IP
$?判断上条命令是否为0
为0则通
68. CDN有哪些⼚家,你们公司⽤的哪家
⽬前国内的cdn⼚商品牌⾮常多,总体分为⼏⼤类。
1.“云”⼚商
以阿⾥云、腾讯云、UPYUN(⼜拍云)为代表的云cdn提供商,多为新兴服务,基于⼤数据趋势有资本投⼊到细分市场领域,可以为客户提
供整体的CDN服务。
2.创新型⼚商
以云帆为代表的创新型cdn提供商,通过众包带宽和P2P技术的模式来拓展节点,实现⽆限节点的CDN服务模式。
3.传统⼚商
传统的专业cdn提供商主要包括蓝汛通讯、⽹宿科技和帝联科技等,通过企业⾃⾝建设的,提供专业的CDN服务。不过近年来,传统⼚商因
为技术和价格等因素,受到了来⾃新型⼚商的重创。
4.其他⼚商
这⾥包括以 UCloud、七⽜为代表的代理CDN⼚商,和⼀些为互联⽹企业⾃建的CDN平台等。
69. 你最熟悉的⼀个项⽬是哪个,在⾥⾯主要负责什么
我最熟悉的是我们公司的云端⽇志分析系统的项⽬ 是⼀个EFK⽇志分析项⽬
我在这⾥⾯主要负责配置filebeat做数据收集
70. Hadoop有三种运⾏⽅式,是哪三种
是⼀个由Apache基⾦会所开发的基础架构。
1.独⽴(本地)运⾏模式:⽆需任何守护进程,所有的程序都运⾏在同⼀个JVM上执⾏。在独⽴模式下调试MR程序⾮常⾼效⽅便。所以⼀
般该模式主要是在学习或者开发阶段调试使⽤ 。
2.伪分布式模式: Hadoop守护进程运⾏在本地机器上,模拟⼀个⼩规模的集群,换句话说,可以配置⼀台机器的Hadoop集群,伪分布式是
完全分布式的⼀个特例。
3.完全分布式模式:Hadoop守护进程运⾏在⼀个集群上。
71. 登录docker容器的⽅式有哪些
使⽤docker attach
使⽤SSH
使⽤nsenter
使⽤exec
72. Mysql和你nosql的区别
mysql是关系型数据库,主要⽤于存放持久化数据,将数据存储在硬盘中,结构稳定、便于查询,可以保证数据的⼀致性,但缺乏灵活
性,读取速度较慢。
NOSQL,即⾮关系型数据库,⽐如redis它是缓存数据库,是将数据存储在内存中,缓存的读取速度快,能够很⼤的提⾼运⾏效率,不⽤局
限于固定的结构,减少了时间和空间上的开销,但是很难保证数据⼀致性
73. 你们公司上线的流程是什么
使⽤jenkins+gitlab实现⾃动上线
74. 你们公司上线周期是多长
⼀周⼀次 周四上线
75. 你们要备份的数据有哪些
⽤户信息 ⽤户访问数据
76. 怎么查看域名过期时间
看域名过期时间,有多种⽅式,如果是⾃⼰的域名,可以直接在域名管理中,查看域名过期时间,如果是他⼈域名,则可以通过等⼯具来检
测。
1、查询⾃⼰的域名过期时间
⾸先进⼊商会员中⼼,在会员中⼼,点击域名管理。在域名管理界⾯,可以看到名下的域名列表,其中到期⽇期,可以计算出域名过期时
间。
2、查询所有域名过期时间
如果想查询任意⼀个域名过期时间,则可以采⽤whois⼯具来实现。
在whois页⾯,输⼊需要查询的域名。点击查询后,可以得到whois信息,其中有⼀项是域名到期⽇期。不过到的信息,仅供参考,⽆法作为
明确信息使⽤。
77. 如何防范ddos攻击
ddos deflate
1.过滤不必要的服务和端⼝
可以使⽤Inexpress、Express、Forwarding等⼯具来过滤不必要的服务和端⼝,即在路由器上过滤假IP。
2.异常流量的清洗过滤
通过DDoS硬件防⽕墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判
断外来访问流量是否正常,进⼀步将异常流量禁⽌过滤。
点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护⾓度去影响企业的安全执⾏决策。
4.⾼防智能DNS解析
⾼智能DNS解析系统与DDoS防御系统的完美结合,为企业提供对抗新兴安全威胁的超级检测功能。同时还有宕机检测功能,随时可将瘫痪
的服务器IP智能更换成正常服务器IP,为企业的⽹络保持⼀个永不宕机的服务状态。
78. 你们公司⽤过哪些阿⾥云服务器
云服务器ECS、云数据库RDS、负载均衡SLB和对象存储OSS。还有CDN
79. ELK⽇志分析主要分析哪些参数
系统⽇志和服务⽇志 ⽐如nginx的⽇志和⽇志
分析⽐如502、503这些错误
80. ELK⽤过哪些插件
input插件:file,http,kafka,rabbitmq等
filter插件:
grok(号称将⾮标准化的⽇志数据转换成标准化并且可搜索数据最好的⽅式,常⽤于处理Niginx,sysLog等⽇志)
drop(跳过某些⽇志,不进⼊output)
geoip(获取地理信息)
81. Jenkins⽤过哪些插件
Ssh Build
Git:
⽀持使⽤Github、GitLab、Gerrit等系统管理代码仓库
配置Gitlab的相关认证,同时也⽀持GitLab的Webhook触发。
这个插件⽀持在Jenkins的构建过程中执⾏Python脚本。
HR
82. 做⼀下⾃我介绍
⾯试官您好,我叫陈振霄,来⾃河北,今天来我们公司是应聘⾃动化运维⼯程师的职位,2016年毕业于武昌理⼯学院,本科学历,所学专业
是计算机科学与技术,⽬前有三年的⼯作经验,毕业后就职于北京联华信科技有限公司,⼯作⾄今,我在公司做的⼯作主要是服务器应⽤的
维护调优等,监控服务器应⽤的状态,协助开发⼈员做代码的上下线,分析系统⽇志和应⽤⽇志等等这些⼯作,我还参与过公司DevOps体
系建设,提出并主导公司⾃动化运维的设计,参与公司系统应⽤架构的体系建设与维护,以及持续集成与部署的架构设计,我本⼈性格沉稳
内敛,遇事冷静,对待⼯作认真负责,私下也喜欢学习新知识;近段时间对我们公司做了⼀些了解,我们公司属于发展中企业,在IT⾏业⾥
是很具有发展前途的,我们公司所做的产品是⽬前市场上⽐较先进的,所以我来贵公司⾯试⾃动化运维⼯程师的职位,希望可以跟着公司⼀
起发展,尽我的微薄之⼒为公司创造利益,在为公司做贡献的同时,也可以提升⾃⼰的能⼒,希望贵公司可以给我这样⼀个机会。我的讲述
完毕,您有什么想问的吗?
83. 你对加班怎么看
加班很正常,我在上家公司也经常加班,我认为加班不⼀定就是⼀件苦事,加班也是⼀种提升⾃⼰、锻炼⾃⼰的过程,我现在也是⼀个⼈,
下班也没什么事,加加班也没什么
84. 你对出差怎么看
出差可以增长⾃⼰的见识,接触形形⾊⾊的⼈,锻炼⾃⼰的沟通和随机应变的能⼒,我也出差过,感觉每次都很有收获
85. 你的上家公司有⼏个运维
我们上家公司有四个运维
86. 你的汇报对象是谁
运维经理
87. 你平时有什么业余爱好
看看书学习些新知识 爬⼭ 看电影
88. 你的职业规划是啥
我要在⼀年内彻底融⼊公司 了解公司的流程 尽⾃⼰的努⼒为公司创造更多的利益,两年后向运维开发发展,了解运维开发,⾃学⼀门语
⾔,争取可以在三年内可以成为运维开发
89. 如果让你⼊职了你打算怎么开展你的⼯作
我会先了解公司架构 熟悉我的上级和同事,然后通过他们再熟悉公司的⽇常⼯作,从领导那⾥了解⾃⼰该做的⼯作,对⾃⼰的⼯作制定⼀个
计划,开展⼯作。
90. 你还有什么想问我的
咱公司有多少台服务器 运维有⼏个⼈ 咱公司的上线流程是怎么样的 周期是多长
91. 你上家公司的薪资是多少
11K
92. 你的薪资构成是咋样的
岗位⼯资+绩效 岗位⼯资8k 绩效3k
93. 你们公司在哪,平时怎么上班
海淀区中关村东路18号1号楼c-302室
94. 你现在住在哪⾥
海淀区马连洼
95. 如果你跟领导意见不⼀样的时候,你怎么处理
先表明态度服从领导安排 然后私下找领导商议,提出⾃⼰的⽅案 讲出领导⽅案的⽋缺,说出⾃⼰⽅案的优点 希望领导采纳。不管领导采不
采纳,不管是⽤哪个⽅案,⾃⼰都会尽最⼤的努⼒好好去做。
96. 你最近再看或者学习什么新技术
我最近在看devops开发运维训练营 分布式服务架构这⼏本书 学习OpenStack和K8S这些技术
97. 你离职的原因是什么
上家公司想派我去南⽅出差⾄少半年,相当于长期发展,我觉得很不⽅便离家太远 就离职了
98. 你在上家公司有什么让你感到⾃豪的事情
公司有个新⼈将数据删除了 公司其他⼈不敢上⼿去做 我主动请⽰去解决这件事
我了解⼀个叫做extundelete的⼯具,所以我是使⽤这个⼯具将数据恢复的
99. ⽤三个词表达⾃⼰
沉稳 内敛 认真
100. 你最⼤的优点是什么
敢想敢做 勇于尝试 喜欢钻研
101. 你觉得你的缺点是什么
肚⼦⾥墨⽔不多 还有很多需要学习的地⽅ 性格不是很外向
补充
102. 常⽤协议的端⼝号
POP3 TCP 110
IMAP 143
SMTP 25 简单邮件传输协议
SSH 22 (LINUX远程管理)
Telnet 23 远程登录
HTTP 80 超⽂本传输协议
HTTPS 443 安全⽂本传输协议 应⽤了安全套接字层可以加密压缩
FTP(控制) 21 ⽂件传输协议
FTP(数据) 20
NTP UDP 123
DHCP 67
DNS 53
SNMP 161 简单⽹络管理协议
TFTP 69 简单⽂件传输协议
103. 常⽤服务的端⼝
Apache 80
Nginx 80
SQLServer:1433
Oracle:1521
MySQL:3306
Tomcat:8080
104. 常见http代码含义
200 - 成功返回⽹页
404 - 请求的⽹页不存在
503 - 服务不可⽤
301 (永久移动) 请求的⽹页已永久移动到新位置。
302 (临时移动) 服务器⽬前从不同位置的⽹页响应请求,但请求者应继续使⽤原有位置来进⾏以后的请求。
304 (未修改) ⾃从上次请求后,请求的⽹页未修改过。
400 (错误请求) 服务器不理解请求的语法。
401 (未授权) 请求要求⾝份验证。 对于需要登录的⽹页,服务器可能返回此响应。
403 (禁⽌) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的⽹页
408 (请求超时) 服务器等候请求时发⽣超时。
409 (冲突) 服务器在完成请求时发⽣冲突。服务器必须在响应中包含有关冲突的信息。
410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
413 (请求实体过⼤) 服务器⽆法处理请求,因为请求实体过⼤,超出服务器的处理能⼒。
414 (请求的 URI 过长) 请求的 URI(通常为⽹址)过长,服务器⽆法处理。
500 (服务器内部错误) 服务器遇到错误,⽆法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。例如,服务器⽆法识别请求⽅法时可能会返回此代码。
502 (错误⽹关) 服务器作为⽹关或代理,从上游服务器收到⽆效响应。
503 (服务不可⽤) 服务器⽬前⽆法使⽤(由于超载或停机维护)。通常,这只是暂时状态。
504 (⽹关超时) 服务器作为⽹关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受⽀持) 服务器不⽀持请求中所⽤的 HTTP 协议版本。
105. 关于数据库的操作
进⼊mysql 命令⾏: mysql -uroot –p
查看所有数据库: show databases;
创建数据库: create database wg charset utf8;
删除数据库: drop database wg;
选择数据库: use databases;
查看所有表: show tables;
查看创建数据库的语句:show create database databasename;
查看创建表的语句:show create table tablename;
查看表结构:desc tablename;
Create databases 库名;
Create table 表名(ID int(10) null,name varchar(10));
Insert into 表名 values(1,’名字’);
Delete from 表名 where ID=1;
update 表名 set age=18 where name=‘wg’;只修改名字是⽹⼯的
select name from 表名 where age=18;
106. Nginx的五种调度算法
1 rr轮询算法:
依次将⽤户的访问请求,平均的分配到后端的web集群中每个节点,此种算法不会考虑每个节点的性能,所以⽐较适⽤于所有节点的性能⼀致的
情况
2 wrr权重算法:
根据设定的权重值,权重值越⼤,被配到的请求次数也就越多,有效的解决了rr算法的缺点
3 ip_hash算法:
根据⽤户访问的真实ip⽣成⼀个hash表,此后,同⼀个ip地址的访问请求都将会分配到这个节点上,可以解决session会话共享的问题
4 url_hash:
根据⽤户访问的url的hash结果,使每个url定向到同⼀个后端服务器上
5 fair:
fair是更加智能的负载均衡算法,此种算法可以根据页⾯⼤⼩的和加载时间长短智能的进⾏负载均衡,也就是根据后端节点的响应时间来分配请
求,响应时间短的则优先分配,Nginx本⾝不⽀持fair,如果需要则必须下载nginx的upstream_fair模块
107. LVS的10种调度算法
1 静态算法:
1 rr(round robin):轮询调度算法:
轮询调度算法的原理就是依次将⽤户的访问请求,平均的分配到每⼀台web服务节点上,从1开始,到最后⼀台服务器节点结束,然后在开始新⼀
轮的循环,这种算法简单,但是没有考虑到每台节点服务器的具体性能
2 wrr(weight):权重调度算法
由于每台服务器的性能会⾼低不同,wrr将会根据管理员设定的权重值来分配访问请求,权重值越⼤的,被分到的请求数也就越多,此种算法有效
的解决了rr轮询算法的缺点
3 sh(source hashing)源地址散列:
主要实现会话绑定,解决session会话共享问题,源地址散列会根据请求的源ip地址,作为关键字,在静态分配的hash表中找出对应的服务器,若该
服务器没有超过负荷,就将请求分配到该服务器
4 dh(destination hashing)⽬标地址散列,把同⼀个ip地址的请求,发送给同⼀个server
⽬标地址散列调度算法是针对⽬标ip地址的负载均衡,是⼀种静态映射算法,把⽬标ip地址作为关键字,在静态分配的hash表中找到对应的服务
器,若该服务器可⽤并没有超过负荷,则将请求发送到该服务器
2 动态调度算法:
1 LC(least connection)最少连接:
当有⽤户发起访问请求时,lc算法将会把请求分配到集群中连接数最少的服务器上
2 wlc(weight least connection scheduling)加权最少连接:
加权最少连接算法是最少连接的升级版,各个服务器⽤想应的权重值表⽰其处理连接的性能,默认权重值为1,加权最少连接调度在调度访问请
求时,会尽量使服务器的已建⽴连接和权重值成⽐例
也就是活动的连接数除以权重,谁⼩,挑谁
3 sed(shortest expected)最短延迟调度:
在wlc基础上进⾏改进,不在考虑⾮活动状态,把当前处于活动状态的数⽬+1,数⽬最⼩的,则接受下次访问请求,+1的⽬的是为了考虑加权的时候,
⾮活动链接过多,当权限过⼤,会导致⾮空闲的节点⼀直处于⽆连接状态
4 nq(nerver queue)永不排队,改进的sed
⽆需队列,如果有rs节点的连接数为0,那么直接将访问请求分配过去,不需要进⾏sed运算
5 LBLC(locality based leastconnection)基于局部性的最少连接
此算法是根据请求报⽂的⽬标ip地址的负载均衡调度,⽬前主要⽤于cache集群系统,因为cache集群中的客户请求报⽂的⽬标ip地址是变化的,
这⾥假设任何后端服务器都可以处理任何请求,算法的设计⽬标在服务器的负载剧本平衡的请求下,将相同的⽬标ip地址的请求调度到同⼀个
服务器,来提⾼整个web服务的访问局部性和主存cache的命中率,从⽽调整整个集群系统的处理能⼒
基于局部性的最少连接调度算法根据请求的⽬标ip地址找出该⽬标地址最近使⽤的rs,若该rs可⽤,将发送请求,若该服务器不可⽤,则⽤最少连
接的原则选出⼀台可⽤服务器来进⾏匹配
6 LBLCR(Locality-Based Least Connections withReplication)带复制的基于局部性最少连接
此种算法是针对⽬标ip地址的负载均衡,该算法根据请求的⽬标地址ip找出该地址对应的服务组,按最少连接的原则从服务组中选出⼀台服务
器,若服务器没有超载,则发送请求到该服务器,若该服务器超载或者不可⽤,则按照最⼩连接的原则从这个集群中选出⼀台服务器,将该服务器添
加到服务组中,在将请求发送到该服务器,同时当该服务器组中有⼀段时间没有被修改,将最忙的服务器从组中剔除,以降低复制的程度


发布评论