Linux系统运维面试题目整理(1)

 

1、Swap比例比较高,如何解决?(也适用于什么时候开始使用swap分区)
答:(1)减小swapiness(表示使用硬盘上swap分区总大小的比例)的值,CentOS 7系统默认是30%的比例,其中的含义是剩余内存占总内存比例小于30%的时候,才开始使用交换分区。centos6是内存低于60%开始使用swap
[root@bogon proc]# cat /proc/sys/vm/swappiness
30
(2)说明物理内存严重不够,需要硬盘上开辟一片空间,防止暂时不使用的内存页。(并不是内存不足才使用交换分区的),通过swapoff -a临时关闭swap分区,通过在/etc/fstab注释挂载交换分区的目录,永久停止使用swap分区

2、mysql主从复制的工作原理?(没办法,数据库必须得复习,太重要了)

答:(1)master端有一个IO线程,slave端有一个IO线程,也有一个SQL线程
(2)master端在提交事务的时候,会把事件写入二进制日志即binlog中,那么当slave端的IO线程发起同步binlog的请求的时候,master端会检查用户名和密码以及相应的授权与否,如果通过后,master端会有一个拷贝binlog的IO线程,通过网络发送给slave机器
(3)slave机器接收此binlog的event后,会把事件拷贝到中继日志(relay-log)中,而后SQL线程检测到中继日志添加事件后,会执行与master端相同的SQL语句操作。
(4)最后把数据写入到磁盘中,保证与主库的数据一致性和数据完整性。

 

3、请问8块18G的磁盘阵列与4块36G的磁盘阵列,不同点在哪里?介绍你理解的条带
答:(1)如果是RAID 10的话,容量相同,但是8块18G的读写性能更好,因为条带宽带(RAID中的物理硬盘数量)相对比较大一些
(2)条带化的原因:当多个进程同时访问一个磁盘时,可能会出现磁盘冲突。大多数磁盘系统都对访问次数(每秒的 I/O 操作,IOPS)和数据传输率(每秒传输的数据量,TPS)有限制。当达到这些限制时,后面需要访问磁盘的进程就需要等待,这时就是所谓的磁盘冲突。
(3)条带化的含义:条带化技术就是一种自动的将 I/O 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。
参考文档:http://blog.sina.com.cn/s/blog_704836f40100sbsl.html

4、有4块硬盘,容量相同,其中2块硬盘做了RAID 1,现在如何判断在服务器上槽位拔出没有做RAID的2块硬盘?
答:[root@bogon dev]# udevadm info -q path -n /dev/sda
/devices/pci0000:00/0000:00:10.0/host0/target0:0:0/0:0:0:0/block/sda
[root@bogon dev]# udevadm info -q path -n /dev/sdb
/devices/pci0000:00/0000:00:10.0/host0/target0:0:1/0:0:1:0/block/sdb
如何在线移除sdb磁盘:[root@bogon dev]# echo 1>/sys/block/sdb/device/delete ##最好先关机,然后再拔掉磁盘。

5、如何知道物理硬盘盘符和OSD的对应关系呢?
答:lsblk一般能看到,但是如果要看物理槽位的话,必须借助IPMI接口才好实现

6、如何查看容器所占的宿主机物理内存和CPU是使用率?如何查看容器内部运行了哪些进程?以及容器的自身性能使用率?
答:(1)[root@k8s-master ~]# docker container stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
PIDS
449cb42d782d 0.01% 488 KiB / 1.461 GiB 0.03% 0 B / 0 B 0 B / 0 B
0
dcb86dacee63 0.30% 33.15 MiB / 1.461 GiB 2.22% 0 B / 0 B 60.4 MB / 0 B
0
2683ec3f8f95 0.16% 24.67 MiB / 1.461 GiB 1.65% 0 B / 0 B 56.1 MB / 0 B
0
6bb5729245a3 0.23% 30.93 MiB / 170 MiB 18.19% 0 B / 0 B 74.6 MB / 0 B
(2)[root@k8s-master ~]# docker container top 449cb42d782d
UID PID PPID C STIME TTY TIME CMD
root 4858 4842 0 08:46 ? 00:00:00 /pause
参考文档:https://mp.weixin.qq.com/s/Zf-wFrAYuFdX8fn_49TjUQ

7、linux磁盘空间占满了,如何排除?
答:[root@kvm ~]# find / -size +200M 2>/dev/null |xargs du -s |grep -v "^0"|head|awk '{print $1/1024"M",$2}'
[root@kvm ~]# du -h --max-depth=1 /

8、pod创建失败可能有哪几种原因?
答:(1)正在下载镜像
(2)没有可用的node节点进行调度
(3)开启了资源配额管理并且当前pod的目标节点恰好没有可用的资源

9、用什么监控docker和K8s集群呢?
答:Weave Scope是Docker和 Kubernetes 可视化监控工具。Scope 提供了至上而下的集群基础设施和应用的完整视图,用户可以轻松对分布式的容器化应用进行实时监控和问题诊断。
[root@kvm ~]# kubectl apply --namespace kube-system -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')"
参考文档:https://steemit.com/kubernetes/@cloudman6/weave-scope-kubernetes-62

10、grep -c和-C参数有什么区别?
答:-c是统计关键字出现的次数;-C后面是打印关键字当前行的以及接下来的指定几行内容‘

11、TCP四次挥手中,close_wait发生在什么状态下?
答:(1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
(2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
(3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
(4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
(5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态
(6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端晚一些。
参考文档:https://blog.csdn.net/qzcsu/article/details/72861891

12、如何理解最左前缀匹配原则?
答:(1)创建多列索引时,通常把第一列用在最频繁查询的字段上,这样执行效率会比较高
(2)最左前缀:顾名思义,就是最左优先,使用SQL语句(alter table table_name add index index_name(lname,fname,age) )创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。
参考文档:https://www.cnblogs.com/jamesbd/p/4333901.html


13、redis数据类型有哪些?
答:Redis支持五种数据类型:Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
值可以是string(字符串,就是Key-Value类型的),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
参考文档:http://www.runoob.com/redis/redis-data-types.html

14、说说iptables如何自定义链的,并且说说prerouting和forward链的区别?
[root@k8s-minion ~]# iptables -t filter -N IN_WEB
[root@k8s-minion ~]# iptables -t filter -I IN_WEB -s 192.168.1.1 -j ACCEPT
[root@k8s-minion ~]# iptables -L ##目前是没有引用
Chain IN_WEB (0 references)
target prot opt source destination
ACCEPT all -- 192.168.1.1 anywhere
[root@k8s-minion ~]# iptables -I INPUT -p tcp -j IN_WEB ##与默认链关联,才能生效
[root@k8s-minion ~]# iptables -L ##引用为1
Chain IN_WEB (1 references)
target prot opt source destination
ACCEPT all -- 192.168.1.1 anywhere
[root@k8s-minion ~]# iptables -E IN_WEB WEB ## 更改链的名称
注:使用"-X"选项可以删除一个引用计数为0的、空的自定义链
参考文档:https://blog.csdn.net/lbyyy/article/details/78898931
(2)prerouting链可以存在于raw表,mangle表,nat表;而forward链存在于mangle表和filter表;
(3)prerouting链是数据包进行内核以前就进行匹配的,而forward链是在做路由转发后的进行匹配的;
参考文档:http://www.zsythink.net/archives/1199

15、docker的网络模型有几种?
答:
(1)bridge:docker默认的网络模式,为容器创建独立的网络命名空间,容器具有独立的网卡等所有单独的网络栈,是最常用的使用方式。
(2)host:直接使用容器宿主机的网络命名空间。
(3)none:为容器创建独立网络命名空间,但不为它做任何网络配置,容器中只有lo,用户可以在此基础上,对容器网络做任意定制。
参考文档:https://blog.csdn.net/yarntime/article/details/51258824

16、linux修改内核参数有哪些?
答:(1)ip_conntrack_max:系统支持的最大ipv4连接数,默认65536
(2)ip_local_port_range:开启端口范围
(3)ulimit -n:最大文件打开数
(4)调整Kernel PID个数
(5)调整TCP参数:time_wait套接字回收,net.ipv4.tcp_tw_recycle = 1;开启syn_cookies,net.ipv4.tcp_syncookies = 1;sysctl -p优化内核参数比如TCP连接超时net.ipv4.tcp_fin_timeout=30
参考文档:https://www.cnblogs.com/bodhitree/p/5756719.html

17、新部署一个linux服务,如何保证安全性?
答:(1)首先是从系统层面:第一,系统层面chmod进行合理的文件权限控制;第二,iptables/TCP_Wrappers进行远程安全防护;第三启用selinux对进程进行设定安全策略,第四是密码策略,密码过期时间,以及使用PAM模块来管理Linux主机中的安全策略
(2)其次是服务软件层面;第一,比如数据库可以授权进行哪些操作,比如读或写,或者远程登录数据库的权限;
参考文档:http://www.freebuf.com/articles/system/121540.html

 

18、docker file如何加速执行docker bulid的速度?即docker file如何进行优化?

答:•编写.dockerignore文件
•容器只运行单个应用
•将多个RUN指令合并为一个
•基础镜像的标签不要用latest
•每个RUN指令后删除多余文件
•选择合适的基础镜像(alpine版本最好)
•设置WORKDIR和CMD
•使用ENTRYPOINT (可选)
•在entrypoint脚本中使用exec
•COPY与ADD优先使用前者
•合理调整COPY与RUN的顺序
•设置默认的环境变量,映射端口和数据卷
•使用LABEL设置镜像元数据
•添加HEALTHCHECK
参考文档:https://www.jb51.net/article/115327.htm

19、Redis主从复制的工作原理?
答:Redis主从同步策略:主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。
(1)从服务器读取配置文件来连接主服务器,发送SYNC命令;
(2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用内存缓冲区记录此后执行的所有写命令;
(3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
(4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
(5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
(6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
参考文档:https://www.cnblogs.com/kevingrace/p/5685332.html

 

20、rabbitmq如何实高可用?
答:如果某个节点挂掉,整个集群还是可以正常工作的,但是挂掉的那个节点的消息就清空了。这种情况在生产环境中是不可接受的,所以需要用到镜像功能,也就是主从配置。同时加上keepalived实现高可用,HAProxy实现负载均衡。
在集群中的任意一台主机上执行:
$ sudo rabbitmqctl set_policy -p /test ha-allqueue "^" '{"ha-mode":"all"}'
1
这行命令在vhost名称为/test创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。配置镜像队列后,其中1台节点失败,队列内容是不会丢失,如果整个集群重启,会恢复在disc中的持久化消息。
参考文档:https://blog.csdn.net/qq_34039315/article/details/77619736

此篇文章,还有20道题目,在我的面经中,详情看下面。

我会持续更新面试题目,包括linux,前端(vue,jquery,css)、python、mysql和redis的面经题目,后期加入golang。可以加我qq 2093905919或者微信 18828004657,跟我聊聊。(注:可以分享一部分面试题目,觉得可以的话,剩下的全部面试题目(多年经验,非常多而广的题目,适合突击面试复习,适合运维工程师,python工程师,运维开发,甚至前端开发(vue,asp,jquery)等等),需要打赏200元,绝对物超所值)

 

 

 

posted @ 2020-06-01 02:31  兮瓜公籽  阅读(345)  评论(1编辑  收藏  举报