面试-2024年7月16号

面试-2024年7月16号


提示:以下答案均为我个人的一些粗浅拙见,非正确答案,如果有考虑不足之处,欢迎诸位补充。

自我介绍


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应小于总条数。
    • 字符集问题。
  • 性能类问题
    • 慢查询、最大连接数的问题、版本问题、缓存池。
    • 服务器资源问题。
    • 查询慢(服务器性能、缓存适合、语句本身。)

后面生产环境完全使用了华为云产品,基本是除了调调参数配置就没有其他问题了。
平台数据量在10G、计量计费的在100G+,马上就分库分表了。


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漏洞修复是怎么做的。

  1. 做好备份。
  2. 根据 Bug 信息搜索官方 Bug 库,寻找官方修复。
  3. 寻找官方修复补丁: git 拉取补丁代码。
  4. 在自己本地代码库打上修复补丁

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了怎么处理

  1. 单个节点宕机恢复:如果etcd集群中只有一个节点宕机,通常不会影响集群的正常工作。可以通过查看集群状态并摘除异常节点,然后重新部署服务后,将节点重新加入集群。需要注意的是,如果节点的IP不变,通常不需要重新制作证书 。
  2. 超过半数节点宕机:如果宕机的节点超过一半,集群将无法正常工作,需要尽快恢复。可能需要使用etcd的备份数据或从etcd数据目录复制snap/db文件来恢复集群 。
  3. 处理数据不一致问题:如果发现集群中节点的数据不一致,可以备份正常节点的etcd数据,停止异常数据的etcd服务,删除异常member,清除数据目录下的数据,然后让异常节点重新加入集群并启动etcd服务
  4. etcd服务无法启动修复:如果某个节点的etcd服务无法启动,可能是因为节点数据不同步。可以删除该节点的数据目录,然后从其他正常节点获取集群状态,并将该节点重新加入集群 。
  5. 数据库空间超出报错:如果遇到"database space exceeded"的报错,可能是因为存储空间超出了etcd的默认限制。可以备份数据,获取当前的revision,使用etcdctl compact命令来删除旧的revision数据,然后使用etcdctl defrag命令来整理碎片,并删除报警 。
  6. 故障节点处理:如果某个节点健康状态显示为Unhealthy,可以尝试将该节点从集群中移除,然后清除该节点的数据目录,并更新集群配置文件,将节点重新加入集群并重启服务

etcd扩容步骤,

  1. 准备新节点:在新节点上安装etcd,配置hosts解析,并确保新节点的地址信息可以正常解析 。
  2. 更新证书:重新申请或更新证书,确保新节点的IP地址被包含在证书中 。
  3. 配置新节点:在新节点上配置etcd的启动参数,包括数据目录、名称、集群信息等 。
  4. 逐个添加节点:使用etcdctl工具在现有集群中逐个添加新节点。添加节点时,需要先在现有集群的任一节点上使用etcdctl member add命令来添加新节点 。
  5. 启动新节点服务:在新节点上启动etcd服务,并检查其状态以确保成功加入集群 。
  6. 修改集群配置:在所有节点上更新etcd的配置文件,如果需要的话,修改启动参数如集群成员列表,并重启服务以应用更改 。
  7. 更新Kubernetes配置(如果使用etcd作为Kubernetes集群的后端):修改kube-apiserver服务连接的etcd地址,并重启kube-apiserver服务 。
  8. 验证集群状态:在扩容完成后,检查集群状态和成员列表,确保新节点正常工作并参与集群数据的同步 。
  9. 安全加固:扩容过程中,确保使用安全通信,涉及到证书和密钥的更新和配置 。
  10. 监控集群:扩容后,持续监控集群状态和性能,确保集群稳定运行。

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的磁盘空间满了,可以尝试以下几种方法来进行清理:

  1. 删除旧的索引数据:通过删除旧的索引数据来释放磁盘空间。可以使用Elasticsearch的API或者Kibana控制台来删除不再需要的索引。
  2. 压缩索引:可以尝试对索引进行压缩,以减少磁盘空间的占用。可以使用Elasticsearch的force merge API来执行索引的压缩操作。
  3. 调整数据保留策略:检查数据保留策略是否合理,可以调整数据的保留期限或者减少数据的保存量,以节省磁盘空间。
  4. 清理日志文件和临时文件:定期清理Elasticsearch的日志文件和临时文件,释放磁盘空间。
  5. 扩容磁盘空间:如果以上方法无法释放足够的磁盘空间,可以考虑扩容磁盘空间来解决问题。

Elasticsearch自动清理的集中方式

  1. 索引生命周期管理(ILM):Elasticsearch 提供了索引生命周期管理功能,允许用户创建策略来自动管理索引的生命周期,包括创建、过期和删除索引。例如,可以创建一个策略自动清理30天之前的索引 。
  2. 索引模板与ILM策略结合:通过创建索引模板,在模板中定义索引的设置和映射,并指定ILM策略,这样新建的索引就会自动应用该策略进行管理 。
  3. 定期执行脚本:可以使用Shell脚本定期执行,删除满足特定条件的索引。例如,脚本可以查询索引列表,然后删除超过一定天数的索引 。
  4. 使用Logstash的ILM功能:如果日志数据是通过Logstash传输到Elasticsearch,可以在Logstash配置中启用ILM,并指定策略,这样由Logstash创建的索引会自动应用ILM策略 。
  5. 索引按日期拆分:对于按日期生成的索引,如日志数据,可以设置策略按日期自动拆分索引并清理旧索引 。
  6. 自动化定期清理:可以写定时任务调用清理索引的请求,定期执行。例如,使用crontab配置脚本定时执行索引删除操作 。
  7. 使用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操作系统上底层驱动的相关知识吗


主从复制出现故障时,该如何处理

  1. 先向上通知 》确认对现网的影响,如果主节点正常(对现网无影响),则转为排查主从不同步的原因;如果主节点异常(对现网有影响),则优先恢复现网,启动容灾方案/切换至从节点/重启同步复制状态或主从节点mysql服务。
  2. 登录mysql服务,确认主从同步复制状态是否正常。 show slave status \G;
  • 若异常,确认主从节点的网络状态是否良好》确认主从节点服务器状态是否良好。
  1. 检查日志 》确认mysql-bin和relay-bin文件是否损坏 》确认是否存在无法同步sql命令的情况(大事务操作)
  2. 确认mysql配置参数合理一致(如一致的max_allowed_packet、字符集、自增索引)、mysql版本一致、系统时间一致、sql mode、binlog格式、从库误写入等等

mysql主从节点的切换流程

  1. 切断应用对主库的流量,停止主数据库的写入操作
  2. 主库、备库设置只读
    set global read_only=ON;
    set global super_read_only=ON;
  3. 查看备库复制进程状态,等待从数据库与主数据库同步
    show slave status\G # 确认Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0
  4. 比对主备两边的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已经在从库完成执行过,两边是一致的。
  5. 从库停掉复制进程并清空主从信息
    stop slave;
    reset slave all;
  6. 库关闭只读开启读写,转为新主库
    set global read_only=off;
    set global super_read_only=off;
  7. 主库设置执行新主库的复制链路,转为新备库,完成主从切换
    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
  8. 应用流量切向新主库。(1.触发keepalive vip漂移动作。2.nacos更改。3.域名劫持。4.直接改服务配置文件)
    MySQL 主从切换步骤

能够实现负载均衡的工具有哪些

  1. 硬件方式
  2. dns
  3. nginx upstream
  4. ipvs
  5. iptables
  6. 第三方工具、(elb\nacos)
  7. 客户端负载均衡实现机制

ipvs 与 nginx 的负载均衡的区别

  • ipvs
    • 四层转发,如TCP协议等,基于 IP+Port 的负载均衡。
  • nginx
    • 七层转发,如HTTP协议等。额外支持对域名、路由规则进行转发。

nginx支持哪些负载均衡的策略,都有什么特点

轮询、加权轮询、IP哈希、最少连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值