高端营销型网站建设,秒玩大型游戏的网站,网站栏目策划,网址seo关键词以下是本人面试运维岗的一些面试经历#xff0c;在此做个记录分享 目录 TCP/IP三次握手
IPtables
IPtables四表五链都是什么#xff1f;
nat端口如何做#xff1f;
开放本机的80端口该如何做#xff1f;
如何在单用户模式下引导Centos#xff1f;
nginx轮询模式都有… 以下是本人面试运维岗的一些面试经历在此做个记录分享 目录 TCP/IP三次握手
IPtables
IPtables四表五链都是什么
nat端口如何做
开放本机的80端口该如何做
如何在单用户模式下引导Centos
nginx轮询模式都有哪些
Mysql主从同步原理
Redis的数据持久化机制是什么?
Shell脚本
单引号和双引号的区别是什么 $ $* $? 是干什么用的
计算123......100的值
批量创建20个用户并将密码设置为当前登录的用户名 /var/log/nginx/access.log 日志访问量最多的前十个IP
Python
打开文件有几种方式有啥区别
列表和元组有什么不同
pass语句有啥用
return和print有啥区别
安装模块用什么命令
Docker
简述docker和虚拟机的区别
docker run -itd 和 -e 参数是什么意思
如何将容器中的端口映射到宿主机
如何将镜像文件保存并导入
Dockerfile中暴漏端口的参数是什么
Dockerfile中 COPY和ADD的区别
K8s
K8s的核心组件都有什么
K8s创建一个Pod的流程
k8s的控制器都有哪些有什么区别
Pod状态都有哪些
Elasticsearch的分片和副本是什么
做过系统内核调优吗
如果需要做系统安全加固考虑从哪些方面着手
nginx服务器无法提供服务排查思路
讲讲对Prometheus的认识吧
为什么先定位原因再解决问题 TCP/IP三次握手 客户端想要连接服务端时向服务端发送 SYN message。Message 还包含 sequence number32位的随机数ACK 为0
服务端收到客户端 synchronization request 后回复客户端 SYN 和 ACK。ACK 数值是收到的 SYN 加一
收到服务端的 SYN 后客户端回复 ACKACK 值是 SYN 值加一建立连接 IPtables IPtables四表五链都是什么 四表(table)raw、mangle、nat、filter 五链(chain)PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING nat端口如何做 iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.1.1 -j DNAT --to-destination 172.23.100.100:8080 开放本机的80端口该如何做 iptables -A INPUT -p tcp --dport 80 -j ACCEPT 如何在单用户模式下引导Centos
重新启动按e编辑
进入 grub 提示符转到以 linux 开头的行尾输入 rd.break 并回车
用rw模式挂载root文件系统mount -o remount,rw /sysroot
然后执行 chroot /sysroot nginx轮询模式都有哪些
普通轮询、权重、ip_hash、第三方响应时间最少链接等 Mysql主从同步原理
主服务器把数据修改之后会放入到二进制日志中(binary log)中然后通过内部进程机制把日志传递到从服务器(从服务器在通过IO线程写入到中继日志)中并表示为中继日志(中继日志在通过sql线程传输给从服务器并执行)从而达到了主从一致 从服务器有俩个线程(I/O线程和SQL线程)I/O线程负责把主服务器上的日志拉取过来slq线程是负责把日志执行.
核心命令例如: show master status; change master to Redis的数据持久化机制是什么?
RDB快照方式 RDB方式是一种快照式的持久化方法将某一时刻的数据持久化到磁盘中。这种方式就是将内存中数据以快照的方式写入到二进制文件中 默认的文件名为dump.rdb。
AOF日志追加 AOF方式是将执行过的写指令记录下来在数据恢复时按照从前到后的顺序再将指令执行一遍。这种方式 redis 会将每一个收到的写命令都通过 write 函数追加到文件中(默认appendonly.aof)。 Shell脚本 单引号和双引号的区别是什么 单引号定义字符串所见即所得即将单引号内的内容原样输出 双引号引用的内容中有命令、变量等会先把变量、命令解析出结果然后在输出最终内容 $ $* $? 是干什么用的 $表示执行脚本传入参数的所有个数将命令行的所有参数区分成各个参数 $*表示执行脚本传入参数的列表将命令行的所有参数看作一个整体 $?表示脚本执行的状态0表示正常其他表示错误 计算123......100的值
#!/bin/bashsum0
for i in {1..100}
dosum$((sum i))
doneecho 1 加到 100 的和是: $sum批量创建20个用户并将密码设置为当前登录的用户名
#!/bin/bash# 获取当前登录用户的用户名
CURRENT_USER$(whoami)# 循环创建20个用户从 user1 到 user20
for i in $(seq 1 20); doUSERuser$i# 创建用户useradd $USER# 设置用户密码为当前用户的用户名echo $USER:$CURRENT_USER | chpasswd# 显示创建和设置密码信息echo User $USER created and password set to $CURRENT_USER.
done/var/log/nginx/access.log 日志访问量最多的前十个IP
awk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10Python
我不是干Python开发的所以问的都是基础和业务逻辑没有关系 打开文件有几种方式有啥区别 open函数需要使用close函数手动关闭文件 with open as file自动关闭文件 列表和元组有什么不同 列表是可变的 元组是不可变的 pass语句有啥用 没想好函数功能怎么写但为了保证语法检查的正确必须输入一些东西使用 pass 语句。 return和print有啥区别 return是返回计算值return 语句可以返回任何类型的数据包括字符串、数字、列表、字典、对象等。 print是打印数据到屏幕。 return返回的结果不能直接输出到控制台需要通过print才能打印出来。 安装模块用什么命令 pip install Docker 简述docker和虚拟机的区别 虚拟机是一种基于硬件虚拟化的解决方案通过在物理服务器上运行一个虚拟化层Hypervisor在同一物理硬件上运行多个独立的操作系统实例每个虚拟机都是一个完整的操作系统实例包含虚拟的 CPU、内存、存储等资源。虚拟机与其他虚拟机和主机操作系统完全隔离。 Docker 容器是一个轻量级、可移植的运行环境它包含应用程序及其依赖的所有文件。容器之间是基于内核的 cgroups 和 namespaces 实现资源隔离、限制和命名空间相互隔离的但共享主机的操作系统内核隔离容器是运行在共享操作系统上的独立环境容器内的应用与外界隔离 docker run -itd 和 -e 参数是什么意思 -i交互模式运行容器 -t --tty为容器分配个伪终端 -d后台模式运行并返回容器ID -e环境变量 如何将容器中的端口映射到宿主机 docker run -itd -p 8080:80 nginx /bin/bash 如何将镜像文件保存并导入 docker save -o nginx.tar nginx:latest docker load -i nginx.tar Dockerfile中暴漏端口的参数是什么 EXPOSE Dockerfile中 COPY和ADD的区别 COPY纯粹地将从构建上下文即执行 docker build 命令时指定的目录及其子目录中的文件或目录复制到镜像中指定的路径 ADD除了COPY的基本功能以外还支持 解压归档文件: ADD 指令如果遇到压缩文件如 .tar, .tar.gz, .zip 等会自动解压这些文件到目标路径从 URL 下载文件: ADD 还支持从URL来源复制文件这意味着可以直接从互联网上下载文件并将其添加到镜像中。 K8s K8s的核心组件都有什么 master上是kube-controller-manager、kube-apiserver、kube-scheduler、etcd worker上是kubelet、kube-proxy K8s创建一个Pod的流程 客户端提交Pod的配置信息到kube-apiserver。 Apiserver收到指令后通知给controller-manager创建一个资源对象。 Controller-manager通过api-server将pod的配置信息存储到etcd数据中心中。 Kube-scheduler检测到pod信息会开始调度预选适合运行pod的节点然后将pod的资源配置单发送到node节点上的kubelet Kubelet根据scheduler发来的资源配置单运行pod运行成功后将pod的运行信息返回给schedulerscheduler将返回的pod运行状况的信息存储到etcd数据中心。 k8s的控制器都有哪些有什么区别 Deployment、Statefulset、DaemonSet Deployment用于部署无状态服务例如 Web 服务器、API 服务、负载均衡器等这些服务可以水平扩展处理更多的请求流量 Statefulset用于部署有状态服务例如数据库系统如 MySQL、PostgreSQL、消息队列如 RabbitMQ、Kafka等这些服务需要持久性存储和网络标识的稳定性。 Damonset可以理解为是节点守护进程每个node都必须有并且只有一个。常见的比如日志采集、守护进程等. Pod状态都有哪些 Running运行中pod已经分配到节点上且pod内容器正常运行。 Pending挂载状态pod已经创建好了但是没被分配到节点上。出现此问题原因很多资源不足、网络原因、端口被占用等等 Failed失败容器内的返回码是非零状态退出进入失败状态。logs -f查看pod日志及desceibe pod查看pod详细情况也可以排查其错误原因。 Terminating终止pod正在删除中。 Unknow未知一般是集群出现问题api出现问题或者是api和调度器之间通信有问题证书过期 imagePullBackOff拉取镜像失败 CrashLoopBackOff:容器已经启动但是异常退出了查看日志或者pod详细情况查找问题。 errorpod启动过程中报错可日志查看原因 Podlniitializing初始化中pod中有初始化init容器 Evictpod被驱逐 Elasticsearch的分片和副本是什么
分片Shards
一个索引可以存储超出单个节点硬件限制的大量数据。比如一个具有 10 亿文档数据 的索引占据 1TB 的磁盘空间而任一节点都可能没有这样大的磁盘空间。 或者单个节点处理搜索请求响应太慢。为了解决这个问题Elasticsearch 提供了将索引划分成多份的能力每一份就称之为分片。当你创建一个索引的时候你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”这个“索引”可以被放置到集群中的任何节点上。 副本Replicas 在一个网络 / 云的环境里失败随时都可能发生在某个分片/节点不知怎么的就处于 离线状态或者由于任何原因消失了这种情况下有一个故障转移机制是非常有用并且是强烈推荐的。为此目的 Elasticsearch 允许你创建分片的一份或多份拷贝这些拷贝叫做复制分片(副本)。
默认情况下Elasticsearch 中的每个索引被分片 1 个主分片和 1 个复制这意味着如果你的集群中至少有两个节点你的索引将会有 1 个主分片和另外 1 个复制分片1 个完全拷贝 做过系统内核调优吗
配置文件 /etc/sysctl.conf#关ipv6
net.ipv6.conf.all.disable_ipv6 1
net.ipv6.conf.default.disable_ipv6 1#避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts 1#开启恶意的icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses 1#关闭路由转发
net.ipv4.ip_forward 0
net.ipv4.conf.all.send_redirects 0
net.ipv4.conf.default.send_redirects 0#开启反向路径过滤
net.ipv4.conf.all.rp_filter 1
net.ipv4.conf.default.rp_filter 1#处理无源路由的包
net.ipv4.conf.all.accept_source_route 0
net.ipv4.conf.default.accept_source_route 0#关sysrq功能
kernel.sysrq 0#core文件名添加pid作为扩展名
kernel.core_uses_pid 1#开SYN洪水攻击保护
net.ipv4.tcp_syncookies 1#修改消息队列长度
kernel.msgmnb 65536
kernel.msgmax 65536#设置最大内存共享段大小bytes
kernel.shmmax 68719476736
kernel.shmall 4294967296#timewait的数量默认为180000
net.ipv4.tcp_max_tw_buckets 6000
net.ipv4.tcp_sack 1
net.ipv4.tcp_window_scaling 1
net.ipv4.tcp_rmem 4096 87380 4194304
net.ipv4.tcp_wmem 4096 16384 4194304
net.core.wmem_default 8388608
net.core.rmem_default 8388608
net.core.rmem_max 16777216
net.core.wmem_max 16777216#每个网络接口接收数据包速率比内核处理这些包的速率快时允许送到队列数据包的最大数目
net.core.netdev_max_backlog 262144#限制仅仅是为防止简单的DoS攻击
net.ipv4.tcp_max_orphans 3276800#未收到客户端确认信息的连接请求最大值
net.ipv4.tcp_max_syn_backlog 262144
net.ipv4.tcp_timestamps 0#内核放弃建立连接之前发送SYNACK包数量
net.ipv4.tcp_synack_retries 1#内核放弃建立连接之前发送SYN包数量
net.ipv4.tcp_syn_retries 1#开timewait快速回收
net.ipv4.tcp_tw_recycle 1#允许将TIME-WAIT sockets重新用于新TCP连接
net.ipv4.tcp_tw_reuse 1
net.ipv4.tcp_mem 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout 1#当keepalive起用的时候TCP发送keepalive消息的频度缺省是2小时
net.ipv4.tcp_keepalive_time 30#允许系统打开端口范围
net.ipv4.ip_local_port_range 1024 65000#修改防火墙的表大小默认65536
#net.netfilter.nf_conntrack_max 655350
#net.netfilter.nf_conntrack_tcp_timeout_established 1200#确保无人能修改路由表
net.ipv4.conf.all.accept_redirects 0
net.ipv4.conf.default.accept_redirects 0
net.ipv4.conf.all.secure_redirects 0
net.ipv4.conf.default.secure_redirects 0如果需要做系统安全加固考虑从哪些方面着手
使用iptabls或firewalld关闭不必要的端口
用户方面设置复杂密码配置锁定策略
ssh远程不允许root登录
关键文件例如配置文件、密码文件等上锁
设置histpory记录时间戳
定期检查并应用系统和应用程序的安全更新补丁 nginx服务器无法提供服务排查思路
top、free、df命令分析资源使用率
ps看进程存活
netstat看端口监听
curl、telnet命令测试端口及页面返回内容
systemctl status 和 journarctl -u server.name 查看服务运行状态及服务相关日志
分析相关服务的log日志 讲讲对Prometheus的认识吧
Prometheus(由go语言开发)是一套开源的监控报警时间序列按照时间排序数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机服务容器支持多种exporter采集数据还支持pushgateway进行数据上报Prometheus性能足够支撑上万台规模的集群。
其主要特征包含:
多维度数据模型可以通过多个维度对数据建模也可以通过多个维度对数据进行查询
灵活的查询语言提供灵活的PromQL查询方式还提供了HTTP查询接口可以很方便地结合Grafana等组件展示数据
不依赖分布式存储支持单节点的本地存储。通过Prometheus自带的时序数据库可以完成每秒百万及的数据存储如果需要存储大量历史数据还可以对接第三方的时序数据库
以HTTP方式通过pull模型拉取时间序列数据并提供了开放的指标数据标准
也可以通过中间网关支持push模型 这种推拉监控其实就是主动和被动监控默认情况下是以pull(拉)的方式也就是监控主机去找被监控主机将数据要过来如果要实现push(推)的方式需要中间网关的支持这只是与zabbix的叫法不同而已
通过服务发现或者静态配置来发现目标服务对象
支持多种多样的图表和界面展示可以使用第三方的工具来展示内容如Grafana
基本上说说特点以及如何对接监控指标即可 为什么先定位原因再解决问题
主观上来说搞清楚问题故障的因果关系可以提高解决效率避免不必要的操作。
客观上来说定位原因一方面是确认故障的产生原因防止后续重复发生另一方面是可以通过不断积累改善优化系统。 暂时就记着这些,后续想起来了再补充