首页 > 其他分享 >面试-2024年7月16号

面试-2024年7月16号

时间:2024-10-10 22:48:11浏览次数:9  
标签:服务 索引 备份 16 2024 面试 集群 etcd 节点

面试-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哈希、最少连接

标签:服务,索引,备份,16,2024,面试,集群,etcd,节点
From: https://blog.csdn.net/dfq737211338/article/details/142834129

相关文章

  • 20241010
    一、 必看十大类型网站1、数据聚合:大数据导航2、公众号、微博抖音等:清博大数据、微榜、新榜3、浏览数据报告:百度指数、百度搜索、微博指数、360指数、搜狗指数4、研究机构:艾瑞数据、企鹅智库、腾讯研究院、数独、数据局等5、影视综艺分析平台:骨朵数据、猫眼数据分析6、淘......
  • SQL第16课——更新和删除数据
    介绍如何利用update和delete语句进一步操作表数据。16.1更新数据使用update语句。两种使用方式:1.更新表中的特定行;2.更新表中的所有行。!!!(使用update时不要省略where子句,因为容易更新表中的所有行)基本update语句由三部分组成=要更新的表+列名和它们的新值+确定要......
  • 20222403 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容本周学习内容1.熟悉基本的汇编语言指令及其功能。2.掌握了栈与堆的概念及其在进程内存管理中的应用以及用户态与内核态的区别。3.熟练运用了Linux系统下的基本操作命令。2.实验过程任务一直接修改程序机器指令,改变程序执行流程下载并解压目标文件pwn1,然后拖入虚......
  • 天涯神贴2024最新整理核心300+篇
    天涯神贴天涯社区创办于1999年,逐步成为了无数网民的精神家园。在2007年,天涯的注册用户突破了2000万,社区开始自称为“全球最大的中文互联网社区”,并喊出了“全球华人的网上家园”这一口号。天涯社区不仅是一个论坛,更是许多网民在互联网世界中的第一份归属感。在这个平台上,诞......
  • 2024.10 做题记录
    10.1gym104922I模拟赛T4。wqs二分,维护dp值和取到dp值的\(k\)的区间。倒序记录方案,要满足能落到合法区间中。10.2模拟赛T3建子序列自动机,DAG上dp并按字典序出边贪心记录方案。DAG链剖分。\(u\)向\(2f_v\gef_u\)的\(v\)连边,形成内向树。重边倍增,轻边跳一次......
  • 20222428 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1.1.1安全漏洞简介定义:系统的缺陷或不足。作用:网络攻击和防御的关键点。网络攻击:利用系统漏洞进行攻击。防御:提前发现漏洞并修复。exploit:完整的代码攻击。shellcode:不完整的代码攻击。PoC:验证是否存在漏洞。1.1.2缓冲区溢出的定义和原因......
  • java级开发面试八股文
    1、java基础知识Q1、equals和==的区别==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同。==是对内存地址进行比较,而equals比较的是两个字符串的值是否相等。==指引用是否相同,而equals是比较值是否相同。Q2:集合的父......
  • 2024年完整版Java面试八股文!
    1、String能被继承吗为什么用final修饰   难度系数:⭐不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。String 类是最常用的类之一,为了效率,禁止被继承和重写。为了安全。String类中有native关键字修饰的调用系统级别的本地方法,调用了操作系统的API......
  • 300道金典Java面试题,常见面试题及答案汇总
    Q1:Java中变量可以既是局部变量又是静态变量吗?答案:不能,将局部变量定义为静态变量会导致编译错误。Q2:Interface中可以有静态方法吗?答案:Interface中的静态方法是没有意义的,静态方法在类中不能被覆盖,而Interface中的方法默认都是抽象的,所以只能在实现Interface的类中实现。Q3:在......
  • 20222304 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1)反汇编反汇编是指将计算机程序的机器代码转换回其相应的汇编代码的过程。在计算机编程和逆向工程领域中,反汇编是一种常见的技术,用于理解和分析二进制程序的功能和内部结构。通常情况下,程序员编写的源代码会被编译器转换成机器码,这是计算机可以直接......