面试题记录
以前面试重来不做笔记,每次都在网上搜题,毕竟不是自己总结的,记录下遇到面试遇到与以及感觉可能会问到的问题
一, mysql
1 备份
1.1 mysql 5.5
不支持事务 id
备份磁盘,binlog server,XtraBackup 备份,8.0 之前 mysql 默认库所表都是 MyISAM 引擎的表之前版尽量不使用,因为会出现锁表
问题: 主从切换后 binlog server 无法继续使用,因为每个节点的 binlog 位置不一样,还原数据需要新建个实例对比新切换的 master 节点数据进行还原
1.2 mysql 5.6
支持事务 id,通过事务 id 同步备份: 备份磁盘,binlog server,XtraBackup 备份,8.0 之前 mysql user 表是 MyISAM 引擎的表,能会出现锁表问题: 主从切换后 binlog server 可以继续使用,因为事务 id 是一样的,可以写脚本实现自动切换 master 节点,这里我们借鉴 Orchestrator 自己研发的 mysql 管理工具
1.3 mysql 5.7
支持事务 id,组提交
备份磁盘,binlog server,XtraBackup 备份,8.0 之前 mysql user 表是 MyISAM 引擎的表,可能会出现锁表问题: 主从切换后 binlog server 可以继续使用,因为事务 id 是一样的,可以写脚本实现自动切换 master 节点,这里我们借鉴 Orchestrator 自己研发的 mysql 管理工具
2 主从
2.1 mysql 5.5
通过 binlog 位置同步,单线程,延迟较大,备份 master 增加读负担,备份 slave 数据不全,所以选择备份 master 磁盘
2.2 mysql 5.6
事务 id 同步,库级别线程,延迟比较大,
2.3 mysql 5.7
事务 id 同步,支持组提交,表或者行级别线程,延迟较低
3 XtraBackup 锁表解决方案:
3.1 设置超时时间
中断正常长查询
3.2 kill 其他阻塞线程
这种方式对堵塞 SQL 影响很大,会强制 kill 掉,对业务会有一定的影响
3.3 暂停复制进程来防止阻塞
加大主从的延迟,关闭从库 binlog 的顺序提交,生产环境
二, redis
1 使用场景
哨兵模式: 遇到读瓶颈,增加 slave 节点分担读请求
集群模式, 遇到写瓶颈,单节点无法除了大并发写请求
2 读 timeout
先看监控,key 数量是不是太多,或者查询并发量比较大,再或者是不是中间网络问题.
然后手动用命令行查下,如果慢,资源使用也正常,网络也没问题,可能 redis 配置有问题,比如惰性释放,多线程之类的配置
三, Kubernetes
1 PVC 挂载
- create 阶段,主要是创建存储;
- attach 阶段,就是将那块存储挂载到 node 上面(通常为将存储 load 到 node 的/dev 下面);
- 第三个 mount 阶段,将对应的存储进一步挂载到 pod 可以使用的路径。
2 容器生命周期
第一种是通过 bind 的方式,直接将宿主机的目录直接挂载到容器内;这种方式比较简单,但是会带来运维成本,因为其依赖于宿主机的目录,需要对于所有的宿主机进行统一管理。
第二种是将目录管理交给运行引擎。
moby 是目前最流行的容器管理引擎,moby daemon 会对上提供有关于容器、镜像、网络以及 Volume 的管理。moby daemon 所依赖的最重要的组件就是 containerd
3 Pod 服务质量 (QoS) 配置
根据 CPU 对容器内存资源的需求,我们对 pod 的服务质量进行一个分类,有三种
Guaranteed :pod 里面每个容器都必须有内存和 CPU 的 request 以及 limit 的一个声明,且 request 和 limit 必须是一样的,这就是 Guaranteed;
Burstable:Burstable 至少有一个容器存在内存和 CPU 的一个 request;
BestEffort:只要不是 Guaranteed 和 Burstable,那就是 BestEffort。
节点上 memory 配额资源不足,kubelet 会把一些低优先级的,或者说服务质量要求不高的(如:BestEffort、Burstable)pod 驱逐掉。它们是按照先去除 BestEffort,再去除 Burstable 的一个顺序来驱逐 pod 的。
4 探针类型
启动探针: 有的 pod 启动时间过长,防止其他两种探针误测使用
就绪探针: 是否能对外提供服务
存活探针: 定时检测服务是否正常
5 监控
5.1 资源监控
CPU、内存、网络这种资源类的一个指标,通常这些指标会以数值、百分比的单位进行统计。
5.2 性能监控
性能监控指的就是 APM 监控,也就是说常见的一些应用性能类的监控指标的检查。像 jvm 里面的 GC 的次数。
5.3 安全监控
安全监控主要是对安全进行的一系列的监控策略,类似像越权管理、安全漏洞扫描等等。(这个我们用的不多)
5.4 事件监控
最典型的就是监控 pod 重启
6 etcd
6.1 查询原理
第一个 tree,维护着 revision 到 value 的映射关系。也就是说当指定 revision 查询数据的时候,就可以通过该 tree 直接返回数据。
第二个 tree。它管理着 key 到 revision 的映射关系。当需要查询 Key 对应数据的时候,会通过刚才说的 tree,将 key 翻译成 revision。再通过 revision 获取到对应的 value。至此就能满足客户端不同的查询场景了。
类似 mysql 水平分表,单表的数据量得以减少,提高性能
7 pod 生命周期
Pending:API Server 已经创建该 Pod,且 Pod 内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程。
Running:Pod 内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态。
Succeeded:Pod 内所有容器均成功执行退出,且不会重启。
Failed:Pod 内所有容器均已退出,但至少有一个容器退出为失败状态。
Unknown:由于某种原因无法获取该 Pod 状态,可能由于网络通信不畅导致。
四, 其他
1 服务时不时报 400
正常情况服务要么一直 400,要么不报,可能多节点,其中一个节点故障
2 磁盘 io 过高排查
这个我回答偷懒了
看监控,影响磁盘 io 方面太多,通过命令排查太慢,监控可以看看是不是网络流量比较大导致的 io 过高,或者开启了交换分区,内存满了