面试-2024年7月16号
- 自我介绍
- Mysql主从复制是做了一个什么样的集群?
- 在Mysql的使用过程中遇到过哪些问题?
- mysql迁移具体步骤
- mysql漏洞修复是怎么做的。
- mysql的容灾方案(灾备恢复机制)。
- redis多节点怎么部署的
- redis的备份与恢复、迁移原理
- 叙述下个人对k8s的理解
- etcd的巡检运维怎么做的?
- etcd迁移怎么做。
- etcd节点不同步或down了怎么处理
- etcd扩容步骤,
- kafka、zookeeper、hadoop等应用的基础使用。(运维工作内容、工作原理)
- 对prometheus和Grafana等监控应用的基本使用,对国产化监控(如n9e)的基本使用。
- elasticsearch的基础使用(虚机部署和容器化部署)、如何手动清理Elasticsearch所占用的磁盘空间。
- 在windows和Mac环境中,如何对运行在上面的应用进行排错操作(网络排错工具的使用)。
- 对Process Monitor、WinDBG等windows进程方面的工具的基础使用
- 对路由解析、防火墙规则、DNS解析的添加操作处理。
- 做过国家护网的事情操作吗
- 流水线的具体搭建过程、该过程中需要解决的难点(哪里最有难度:服务治理、cicd的持续升级)、运行流程--画两个图。遇到过哪些问题。
- 查询一个端口被哪个进程占用,该如何查询。
- 对一个文件做批量文本替换处理该如何操作。
- 查询一个进程的信息(如套接字、文件描述符等信息)
- 你接触过windows或Mac操作系统上底层驱动的相关知识吗
- 主从复制出现故障时,该如何处理
- mysql主从节点的切换流程
- 能够实现负载均衡的工具有哪些
- ipvs 与 nginx 的负载均衡的区别
- nginx支持哪些负载均衡的策略,都有什么特点
提示:以下答案均为我个人的一些粗浅拙见,非正确答案,如果有考虑不足之处,欢迎诸位补充。
自我介绍
Mysql主从复制是做了一个什么样的集群?
Mysql主从复制
答:Mysql主从复制集群通常由主Mysql和从Mysql构成,主节点负责数据写入,从节点负责数据读取,这种分工合作的方式大大提高了数据库的并发负载能力。
主从节点之间的数据同步功能是通过中继二进制日志实现的。通常是采用基于语句的复制。在主节点执行语句后,会同时将该语句写入二进制日志,然后从节点的IO进程读取该语句后,通过执行该语句实现数据同步。
操作步骤:配置my.cnf开启中继二进制功能 》数据库授权访问 》启动主从同步
但这个集群无法做到服务故障不中断。为了服务的高可用性,可以使用MMM、MHA、MGR、PXC、MySQL InnoDB Cluster等方案。
当数据库容量过大时,也需要进行分库分表操作。
在Mysql的使用过程中遇到过哪些问题?
- 参数配置类问题
- 遇到过一个连接数据库慢的问题:skip-name-resolve #Don’t resolve hostnames
- 开源项目导入数据库遇到过大小写敏感问题:关闭大小写敏感。
- 执行SQL limit 缓慢问题:limit应小于总条数。
- 字符集问题。
- 性能类问题
- 慢查询、最大连接数的问题、版本问题、缓存池。
- 服务器资源问题。
- 查询慢(服务器性能、缓存适合、语句本身。)
后面生产环境完全使用了华为云产品,基本是除了调调参数配置就没有其他问题了。
mysql迁移具体步骤
本质是:全量+增量的原理。
- 先做一次全量数据的同步
- 如果数据量在10个G以内的话,通过执行mysqldump命令,或者借助Navicat、HeidiSQL等工具可以直接导出全量数据。
- 如果数据量很大,需要使用xtrabackup。
- xtraBackup 与 mysqldump的区别:
- xtraBackup 是物理热备份工具,具有备份速度快、支持备份数据压缩、自动校验备份数据、备份过程几乎不影响业务的特点。支持完全备份、增量备份和差异备份。仅适用于InnoDB和XtraDB存储引擎。适用于快速备份且数据量较大的InnoDB数据库。
- mysqldump 是逻辑备份工具,适用于规模较小、业务不繁忙的场景。缺点是由于是单线程操作,备份过程可能会消耗大量内存和CPU。支持MyISAM存储引擎。
Mysql全量备份及增量备份
基于 mydumper 实现 MySQL 定期全量备份、恢复方案
MySQL—备份与维护(一)
MySQL物理备份(xtrabackup中级篇)
Percona XtraBackup全量备份恢复操作
维护数千规模MySQL实例,数据库灾备体系构建指南
如果数据量很少,用户访问有规律。可以晚上锁表直接搞一下,直接跳过增量同步的过程,把数据库迁移掉。
如果要求不停机的话
- 做一个主从同步功能
- 启动目标端应用(需提前验证业务是否正常),暂停写操作。
- 解开写操作,源端流量迁移至目标端,验证业务。
mysql漏洞修复是怎么做的。
- 做好备份。
- 根据 Bug 信息搜索官方 Bug 库,寻找官方修复。
- 寻找官方修复补丁: git 拉取补丁代码。
- 在自己本地代码库打上修复补丁
mysql的容灾方案(灾备恢复机制)。
- 容灾
- 跨AZ高可用集群(主从复制、组复制(MySQL Group Replication)、InnoDB Cluster、InnoDB ClusterSet、MHA(Master High Availability)、MMM(Multi-Master Replication Manager)、Galera Cluster)
- 备份
- 物理备份与恢复、逻辑备份与恢复。
redis多节点怎么部署的
数据库&&Redis&&集群搭建:https://blog.csdn.net/dfq737211338/article/details/106774860
答:redis集群可以使用主从复制模式、哨兵模式、Cluster模式等。
主从复制模式是通过RDB快照文件实现的,缺点是出现故障时需要手动切换主从。
哨兵模式通过发布订阅模式可以自动的实现主从切换。
Cluster 模式使用了Sharding 技术,实现了高可用、读写分离和真正的分布式存储。
redis的备份与恢复、迁移原理
数据库&&Redis&&迁移流程:https://blog.csdn.net/dfq737211338/article/details/140413511
叙述下个人对k8s的理解
- 弹性扩缩容、自动恢复、自动调度、滚动升级、服务发现。
- 资源池化。
- 插件化。
- 可移植性、消除了底层基础设施的差异(灵活性)。
- 更加快速的集成、部署,交付效率变高。
etcd的巡检运维怎么做的?
物理备份:etcd 备份,保存某一个时刻的快照,快捷方便。
ETCDCTL_API=3 /usr/local/bin/etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
snapshot save "${BACKUP_DIR}/etcd-snapshot-${DT}.db"
逻辑备份:velero 备份 ,允许用户自己选择备份的内容,比如单个 namespace、指定资源类型等。
etcd迁移怎么做。
Kubernetes&&存储&&etcd
etcd节点不同步或down了怎么处理
- 单个节点宕机恢复:如果etcd集群中只有一个节点宕机,通常不会影响集群的正常工作。可以通过查看集群状态并摘除异常节点,然后重新部署服务后,将节点重新加入集群。需要注意的是,如果节点的IP不变,通常不需要重新制作证书 。
- 超过半数节点宕机:如果宕机的节点超过一半,集群将无法正常工作,需要尽快恢复。可能需要使用etcd的备份数据或从etcd数据目录复制snap/db文件来恢复集群 。
- 处理数据不一致问题:如果发现集群中节点的数据不一致,可以备份正常节点的etcd数据,停止异常数据的etcd服务,删除异常member,清除数据目录下的数据,然后让异常节点重新加入集群并启动etcd服务
- etcd服务无法启动修复:如果某个节点的etcd服务无法启动,可能是因为节点数据不同步。可以删除该节点的数据目录,然后从其他正常节点获取集群状态,并将该节点重新加入集群 。
- 数据库空间超出报错:如果遇到"database space exceeded"的报错,可能是因为存储空间超出了etcd的默认限制。可以备份数据,获取当前的revision,使用etcdctl compact命令来删除旧的revision数据,然后使用etcdctl defrag命令来整理碎片,并删除报警 。
- 故障节点处理:如果某个节点健康状态显示为Unhealthy,可以尝试将该节点从集群中移除,然后清除该节点的数据目录,并更新集群配置文件,将节点重新加入集群并重启服务
etcd扩容步骤,
- 准备新节点:在新节点上安装etcd,配置hosts解析,并确保新节点的地址信息可以正常解析 。
- 更新证书:重新申请或更新证书,确保新节点的IP地址被包含在证书中 。
- 配置新节点:在新节点上配置etcd的启动参数,包括数据目录、名称、集群信息等 。
- 逐个添加节点:使用etcdctl工具在现有集群中逐个添加新节点。添加节点时,需要先在现有集群的任一节点上使用etcdctl member add命令来添加新节点 。
- 启动新节点服务:在新节点上启动etcd服务,并检查其状态以确保成功加入集群 。
- 修改集群配置:在所有节点上更新etcd的配置文件,如果需要的话,修改启动参数如集群成员列表,并重启服务以应用更改 。
- 更新Kubernetes配置(如果使用etcd作为Kubernetes集群的后端):修改kube-apiserver服务连接的etcd地址,并重启kube-apiserver服务 。
- 验证集群状态:在扩容完成后,检查集群状态和成员列表,确保新节点正常工作并参与集群数据的同步 。
- 安全加固:扩容过程中,确保使用安全通信,涉及到证书和密钥的更新和配置 。
- 监控集群:扩容后,持续监控集群状态和性能,确保集群稳定运行。
kafka、zookeeper、hadoop等应用的基础使用。(运维工作内容、工作原理)
大数据&&Hadoop&&入门教程:https://blog.csdn.net/dfq737211338/article/details/140584658
应用协调服务&&ZooKeeper&&基础使用:https://blog.csdn.net/dfq737211338/article/details/140510954
消息队列&&Kafka&&基础使用:https://blog.csdn.net/dfq737211338/article/details/140449872
对prometheus和Grafana等监控应用的基本使用,对国产化监控(如n9e)的基本使用。
centos 7.9+mysql 5.7+nightingale v6.0+redis安装:https://blog.csdn.net/dfq737211338/article/details/130514891
基于Prometheus和K8s构建监控系统:https://blog.csdn.net/dfq737211338/article/details/130142138
elasticsearch的基础使用(虚机部署和容器化部署)、如何手动清理Elasticsearch所占用的磁盘空间。
EFK日志收集系统+Rancher安装:https://blog.csdn.net/dfq737211338/article/details/130909587
# 首先,确定要优化的索引
curl -XGET 'http://localhost:9200/_cat/indices?v'
# 然后,对特定索引执行优化操作
curl -XPOST 'http://localhost:9200/<index_name>/_forcemerge?max_num_segments=1'
替换 <index_name> 为你想要优化的索引名称。_forcemerge 操作将尝试合并索引中的段,清理未使用的空间。max_num_segments 参数设置为 1 意味着每个分片最终将只有一个段,这样做可以减少磁盘空间的占用,并提高搜索性能,但代价是需要更多的磁盘I/O。
请注意,执行优化操作可能会占用较多的系统资源,并且在数据量大的情况下可能需要一些时间来完成。在执行优化操作之前,确保Elasticsearch集群的健康状态良好,并对可能对集群性能产生的影响有所了解。
#!/bin/bash
# Elasticsearch 服务器地址
ES_SERVER="http://localhost:9200"
# 索引前缀
INDEX_PREFIX="your_index_prefix"
# 保留天数
RETENTION_DAYS=30
# 日志文件路径
LOG_FILE="/var/log/es-index-clean.log"
# 获取当前日期
CURRENT_DATE=$(date +%Y%m%d)
# 获取需要删除的索引日期
CUTOFF_DATE=$(date -d "-${RETENTION_DAYS} days" +%Y%m%d)
# 拼接索引名称
CUTOFF_INDEX="${INDEX_PREFIX}${CUTOFF_DATE}"
# 删除索引
echo "Deleting indices older than ${RETENTION_DAYS} days..." >> ${LOG_FILE}
echo "Cutoff date: ${CUTOFF_DATE}" >> ${LOG_FILE}
curl -XDELETE "${ES_SERVER}/${CUTOFF_INDEX}" -s >> ${LOG_FILE}
echo "Index deletion completed on ${CURRENT_DATE}" >> ${LOG_FILE}
当Elasticsearch的磁盘空间满了,可以尝试以下几种方法来进行清理:
- 删除旧的索引数据:通过删除旧的索引数据来释放磁盘空间。可以使用Elasticsearch的API或者Kibana控制台来删除不再需要的索引。
- 压缩索引:可以尝试对索引进行压缩,以减少磁盘空间的占用。可以使用Elasticsearch的force merge API来执行索引的压缩操作。
- 调整数据保留策略:检查数据保留策略是否合理,可以调整数据的保留期限或者减少数据的保存量,以节省磁盘空间。
- 清理日志文件和临时文件:定期清理Elasticsearch的日志文件和临时文件,释放磁盘空间。
- 扩容磁盘空间:如果以上方法无法释放足够的磁盘空间,可以考虑扩容磁盘空间来解决问题。
Elasticsearch自动清理的集中方式
- 索引生命周期管理(ILM):Elasticsearch 提供了索引生命周期管理功能,允许用户创建策略来自动管理索引的生命周期,包括创建、过期和删除索引。例如,可以创建一个策略自动清理30天之前的索引 。
- 索引模板与ILM策略结合:通过创建索引模板,在模板中定义索引的设置和映射,并指定ILM策略,这样新建的索引就会自动应用该策略进行管理 。
- 定期执行脚本:可以使用Shell脚本定期执行,删除满足特定条件的索引。例如,脚本可以查询索引列表,然后删除超过一定天数的索引 。
- 使用Logstash的ILM功能:如果日志数据是通过Logstash传输到Elasticsearch,可以在Logstash配置中启用ILM,并指定策略,这样由Logstash创建的索引会自动应用ILM策略 。
- 索引按日期拆分:对于按日期生成的索引,如日志数据,可以设置策略按日期自动拆分索引并清理旧索引 。
- 自动化定期清理:可以写定时任务调用清理索引的请求,定期执行。例如,使用crontab配置脚本定时执行索引删除操作 。
- 使用Opendistro Index State Management:ElasticSearch支持Opendistro Index State Management插件,它提供了额外的索引管理功能,包括自动化清理 。
在windows和Mac环境中,如何对运行在上面的应用进行排错操作(网络排错工具的使用)。
对Process Monitor、WinDBG等windows进程方面的工具的基础使用
Process Monitor能找出进程所属的软件、进程读取的所有文件、监视某个特定进程等。
Process Monitor下载安装使用教程(图文教程)超详细
windbg使用教程(调试异常及死锁等)
WinDbg使用
对路由解析、防火墙规则、DNS解析的添加操作处理。
- 路由配置
- ip route add default via
- vi /etc/iproute2/rt_tables
- route add 0.0.0.0 mask 0.0.0.0 metric 1 if
- 控制面板
- 防火墙配置
- iptables -A INPUT -s -j ACCEPT
- netsh advfirewall firewall add rule name=“Allow HTTP” dir=in action=allow protocol=TCP localport=80
- 控制面板
- DNS解析配置
- vim /etc/resolv.conf
- 编辑C:\Windows\System32\drivers\etc\hosts
- 指定dns server
做过国家护网的事情操作吗
流水线的具体搭建过程、该过程中需要解决的难点(哪里最有难度:服务治理、cicd的持续升级)、运行流程–画两个图。遇到过哪些问题。
- 资源评估
- 服务类型划分:内存密集型、cpu密集型、IO密集型等、;有状态服务号、无状态服务、守护服务。
- 服务资源规划:确认待容器化服务所需的cpu、内存、硬盘资源。
- 服务器规格选型,根据具体业务确认cpu与内存的比例等
- 资源规划:根据业务资源损耗+可靠性+其他依赖组件=最终集群资源总量。
- 组件选型:如k8s管理(racnher和kubesphere)组件、日志(efk和loki)组件、流量治理(skywalking、jaeger、kiali)组件
- 网络规划、名称空间规划、日志采集、监控方案。pod亲和性、资源限额。
- 架构设计
- 前端服务:客户端如何访问后端服务、前端服务暴露方式、前端服务路由规则变更、前端服务的高可用性。
- 后端服务:副本数大于2、扩缩容、
- 部署各环境k8s集群,对接nfs、镜像仓库、提供config文件
- 服务容器化改造
- 服务发现方式改为k8s的svc方式。
- 服务支持健康检测接口。
- 服务支持服务治理功能。
- 初始化yml文件(标签设计、多副本)
- 镜像仓库改造:dockerfile文件和yaml文件
- 初始化流水线,
- (后端和前端)发布流水线、回滚流水线、灰度流水线
- 对接第三方服务(git仓库、镜像仓库、漏洞扫描工具、代码扫描工具、接口测试平台)、
- 高可靠(备份恢复)
- etcd
- velero
- 二次开发(难点)
- k8s部署环境、镜像包管理、配置文件版本、测试开发运维人员和服务及镜像关联关系等纳管
- 历史记录管理。如镜像扫描结果、构建镜像信息、自动化测试结果、镜像测试结果标注。
- 基于镜像包流转机制开发的CICD平台,支持将包快速流转至转测、众测、生产环境。
查询一个端口被哪个进程占用,该如何查询。
- netstat -lntp | grep 端口号; ps -ef | grep PID号
- sudo lsof -i :9999
- sudo ss -ltp | grep 9999
对一个文件做批量文本替换处理该如何操作。
# 对指定目录下的文件中的字符串 aString 替换为字符串 bString
sed -i 's/aString/bString/g' `grep -irl "aString" /opt/* `
# 先用 find 命令找到文件,然后用 xargs 执行 sed 命令
find /path/to/directory -type f -name '*.txt' -print0 | xargs -0 sed -i 's/oldtext/newtext/g'
查询一个进程的信息(如套接字、文件描述符等信息)
- ps -p PID -o pid,comm,lstart,user,%mem,%cpu,nice,vsize,rss,stat,etime,wchan,cmd
- cat /proc/PID/limits
- top -p PID
- lsof -p PID
你接触过windows或Mac操作系统上底层驱动的相关知识吗
主从复制出现故障时,该如何处理
- 先向上通知 》确认对现网的影响,如果主节点正常(对现网无影响),则转为排查主从不同步的原因;如果主节点异常(对现网有影响),则优先恢复现网,启动容灾方案/切换至从节点/重启同步复制状态或主从节点mysql服务。
- 登录mysql服务,确认主从同步复制状态是否正常。 show slave status \G;
- 若异常,确认主从节点的网络状态是否良好》确认主从节点服务器状态是否良好。
- 检查日志 》确认mysql-bin和relay-bin文件是否损坏 》确认是否存在无法同步sql命令的情况(大事务操作)
- 确认mysql配置参数合理一致(如一致的max_allowed_packet、字符集、自增索引)、mysql版本一致、系统时间一致、sql mode、binlog格式、从库误写入等等
mysql主从节点的切换流程
- 切断应用对主库的流量,停止主数据库的写入操作
- 主库、备库设置只读
set global read_only=ON;
set global super_read_only=ON; - 查看备库复制进程状态,等待从数据库与主数据库同步
show slave status\G # 确认Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0 - 比对主备两边的GTID是否一致,获取主备两边的executed_gtid集合,进行比对
select @@global.gtid_executed;
SELECT GTID_SUBSET(master_gtid_executed, slave_gtid_executed); #通过GTID_SUBSET函数进行比对 。若在master_gtid_executed中的GTID,也存在slave_gtid_executed中,则返回true(1),否则返回false(0)。返回1,代表主库GTID已经在从库完成执行过,两边是一致的。 - 从库停掉复制进程并清空主从信息
stop slave;
reset slave all; - 库关闭只读开启读写,转为新主库
set global read_only=off;
set global super_read_only=off; - 主库设置执行新主库的复制链路,转为新备库,完成主从切换
CHANGE MASTER TO MASTER_HOST=‘192.168.1.111’,MASTER_USER=‘xxx’,MASTER_PORT=3306,MASTER_PASSWORD=‘xxx’,master_auto_position=1 ;
start slave;
show slave status\G - 应用流量切向新主库。(1.触发keepalive vip漂移动作。2.nacos更改。3.域名劫持。4.直接改服务配置文件)
MySQL 主从切换步骤
能够实现负载均衡的工具有哪些
- 硬件方式
- dns
- nginx upstream
- ipvs
- iptables
- 第三方工具、(elb\nacos)
- 客户端负载均衡实现机制
ipvs 与 nginx 的负载均衡的区别
- ipvs
- 四层转发,如TCP协议等,基于 IP+Port 的负载均衡。
- nginx
- 七层转发,如HTTP协议等。额外支持对域名、路由规则进行转发。
nginx支持哪些负载均衡的策略,都有什么特点
轮询、加权轮询、IP哈希、最少连接