目录
Q2:定时任务,每天晚上11点,打包站点目录/var/www/html 备份到/data 目录下(要求每次备份按时间生成不同的备份包),如何用shell script实现?
Q3:执行命令获取出 linux 中 eth0 的 IP 地址的方式有哪些?
Q5:日志按天记录在服务器本地目录/app/logs 下,现在要求只能保留最近 7 天的访问日志!请问如何解决?或处理命令
Q6:写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些?能ping通则认为在线
Q15:如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1
Q16:统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip
Q19:MySQL 的 innodb 如何定位锁问题,MySQL 如何减少主从复制延迟?
Q21:Tomcat和Resin有什么区别,工作中你怎么选择?
Q22:讲述一下Tomcat8005、8009、8080三个端口的含义?
Q26:Squid、Varinsh 和 Nginx 有什么区别,工作中你怎么选择?
Q27:简述 raid0 raid1 raid5 三种工作模式的工作原理及特点?
Q1:如何给Linux目录上锁?
A1:在 Linux 上给目录上锁的需求可以有多种解释,比如防止目录被修改、限制访问等
方法一:使用
chattr
+i 命令
chattr
命令可以改变文件或目录的属性,使其不可更改。例如,可以设置一个目录为不可修改(只读)。
sudo chattr +i /path/to/directory
+i
:设置不可变属性,使得目录及其内容无法被删除或修改。要移除锁定,可以使用:sudo chattr -i /path/to/directory
方法二:使用
chmod
修改权限通过改变目录的权限,限制用户的访问和修改权限。
# 将目录设置为只读 sudo chmod 555 /path/to/directory
555
:表示所有者、所属组和其他用户都具有读取和执行权限,但没有写权限。
Q2:定时任务,每天晚上11点,打包站点目录/var/www/html 备份到/data 目录下(要求每次备份按时间生成不同的备份包),如何用shell script实现?
思路:1.当前工作目录切换到 /var/www/
2.如果目录切换成功,则创建以时间命名的.tar.gz
压缩文件,包含 html
目录的内容
3.生成的 tar 归档文件保存在 /data/
目录下
4.定时执行执行脚本(脚本名称backupHTML.sh,脚本的内容是下面的代码)
#! /bin/bash
cd /var/www/ && /bin/tar zcf /data/html-`date +%m-%d%h`.tar.gz html
crontab –e
00 23 * * * /bin/sh /root/backupHTML.sh
crontab的五个占位符代表的意思(即00 23 * * *)
#分钟 (0 - 59)、小时 (0 - 23)、一个月中的第几天 (1 - 31)、月份 (1 - 12) 、星期中星期几 (0 - 6) (星期天 为0)
Q3:执行命令获取出 linux 中 eth0 的 IP 地址的方式有哪些?
1.使用cut命令
ifconfig eth0 | sed -n '2p' | cut -d ":" -f2 | cut -d " " -f1
ifconfig eth0:获取eth0网卡的信息
sed -n '2p':指定打印第二行(包含 IP 地址、广播地址和子网掩码)
cut -d ":" -f2:指定:作为分隔符,获取第二个字段(即包含 IP 地址的部分)
cut -d " " -f1:指定空格作为分隔符,获取第一个字段(提取第一个字段(即 IP 地址)
2.使用awk命令awk
是一个功能强大且灵活的文本处理工具,适用于各种模式匹配和文本处理任务。通过使用模式匹配(正则)、字段操作、条件处理、变量和内置函数等功能,可以高效地处理和分析结构化文本数据
awk
的基本语法如下:
awk 'pattern { action }' file
pattern
:匹配的模式(可以是正则表达式)。action
:对匹配行执行的操作。常见参数选项
-F
:指定字段分隔符。-v
:定义变量。
eg:awk -F ',' '{ print $2 }' data.csv (以,为分隔符,然后打印第二列)
3.使用sed命令
sed
是一个强大的文本处理工具,适用于对文本文件进行各种编辑操作。可高效地执行文本替换、删除、插入、追加等操作,从而简化许多常见的文本处理任务。
sed
的基本语法如下:
sed [options] 'script' file
options
:选项,如-i
(编辑文件本身)、-e
(添加脚本)等。script
:要对文本执行的sed
命令脚本。file
:要处理的文件
eg:sed 's/foo/bar/' example.txt 将example.txt中的foo全部替换成bar
Q4:如何优化linux性能?
优化Linux系统可以从多个方面入手,以下是一些常见的优化措施:
1. 性能优化
内核参数调优:调整 /etc/sysctl.conf 中的内核参数,例如增加文件句柄数、调整网络缓冲区大小。
I/O 调优:使用 ionice 调整I/O优先级,调整磁盘调度算法(如 cfq、deadline 或 noop)。
内存管理:优化交换分区(swap)的使用,调整 vm.swappiness 参数,确保充足的物理内存。
CPU 调优:使用 cpufreq 工具调整CPU频率调节策略,确保关键应用获得更多CPU资源。
2. 网络优化
TCP/IP 参数调整:调整TCP窗口大小和缓冲区,使用 sysctl 调整网络栈参数。
MTU 设置:根据网络环境调整最大传输单元(MTU)以减少分片。
DNS 缓存:使用 dnsmasq 等工具缓存DNS查询以加快响应时间。
3. 文件系统优化
选择合适的文件系统:根据应用需求选择合适的文件系统(如 ext4、xfs、btrfs)。
定期维护:定期运行 fsck 检查和修复文件系统错误,定期清理和压缩日志文件。
4. 安全优化
最小化安装:只安装必要的软件包和服务,减少攻击面。
安全更新:定期安装安全补丁和更新,使用自动更新工具如 unattended-upgrades。
防火墙配置:使用 iptables 或 firewalld 配置防火墙规则,限制不必要的网络访问。
5. 系统监控与日志管理
监控工具:使用 top、htop、iotop、vmstat 等工具监控系统资源使用情况。
日志管理:使用 logrotate 管理日志文件,避免日志文件占满磁盘。
远程日志:将重要日志发送到远程日志服务器以备份和集中管理。
Q5:日志按天记录在服务器本地目录/app/logs 下,现在要求只能保留最近 7 天的访问日志!请问如何解决?或处理命令
find /application/logs/ -type f -mtime +7 -name "*.log" | xargs rm -f
命令解释如下:
find /application/logs/ -type f -mtime +7 -name "*.log"
在/application/logs/
目录中查找所有修改时间超过7天的 .log
文件
| xargs rm -f
| 管道符,将 find
命令的输出作为下一个命令的输入
xargs
: 从标准输入读取数据并将其作为参数传递给指定的命令。将 find
命令找到的文件名传递给 rm
命令,从而删除文件
Q6:写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些?能ping通则认为在线
#! /bin/bash
for testIP in `seq 1 255`
do
{
ping -c 1 192.168.1.$testIP > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "$testIP is up"
else
echo "$testIP is down"
fi
}&
done
wait
-c
是 ping
命令的一个选项,用于指定发送的请求报文的数量。
-c 1 是发送一个包。
/dev/null 黑洞文件。
2>&1 将标准输出和错误输出同时重定向到同一位置&
将命令放到后台运行。
Q7:tcpdump的应用和案例
1.使用 tcpdump 监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到 tcpdump.log
除了使用重定向外,还可以使用 -w 参数,如果保存为.pcap后缀的文件,可结合wireshark分析网络问题tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log
2.实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令
-n
:表示不将IP地址转换为主机名,直接显示IP地址-n
:表示不将端口号转换为服务名,直接显示端口号tcpdump -nn tcp port 80
3.用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20
实例结果及分析:
[root@iZbp1gyr6n52tkg93dybldZ ~]# tcpdump -nn tcp port 80
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:03:55.172508 IP 172.29.112.166.46602 > 100.100.30.26.80: Flags [P.], seq 541072800:541076202, ack 3757916946, win 501, length 3402: HTTP
15:03:55.180678 IP 100.100.30.26.80 > 172.29.112.166.46602: Flags [.], ack 1424, win 2054, length 0
通过这些信息,可以分析网络流量的基本行为,例如连接建立、数据传输、确认等
15:03:55.172508
: 时间戳,表示捕获数据包的时间。IP
: 协议类型(IPv4)。172.29.112.166.46602
: 源 IP 地址和源端口号 (172.29.112.166:46602
)。>
: 表示数据流的方向(从172.29.112.166
到100.100.30.26
)。100.100.30.26.80
: 目的 IP 地址和目的端口号 (100.100.30.26:80
)。Flags [P.]
: TCP 标志:
P
(Push):表示推送标志,要求立即发送数据。.
:表示 ACK 标志。seq 541072800:541076202
: 序列号范围,表示数据包中的字节范围从541072800
到541076202
。ack 3757916946
: 确认号,表示已收到的数据的最后一个字节的序列号加1。win 501
: 窗口大小,表示接收方可以接受的数据量。length 3402
: 数据包的有效载荷长度(3402 字节)。HTTP
: 应用层协议(HTTP)
Q8:查看http的并发请求数与其TCP连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ulimit -n 查看linux系统打开最大的文件描述符,默认是1024
如果要修改最大的文件描述符,修改/etc/security/limits.conf中的
# End of file
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
Q9:TCP/IP七层模型
物理层(Physical Layer):
简而言之,物理层负责数据在物理介质上的传输,使设备间能够进行基础的数据通信。即信号和介质
物理层是OSI模型的第一个层,它负责数据在物理介质上的传输。它定义了硬件设备之间如何通过电信号、光信号或无线电波等方式实际传输原始比特流。物理层涉及的主要方面包括:
- 信号传输:将数据编码为电信号、光信号或无线电波传输。
- 介质类型:指定使用的传输介质,如铜线、电缆、光纤、无线电波等。
- 连接器和接口:定义硬件设备之间的物理连接器和接口标准。
- 传输速率:规定数据传输的速度和频率。
链路层 (Link):
简而言之,数据链路层确保数据在相邻网络设备之间能够可靠且无误地传输。(MAC地址)
数据链路层是OSI模型的第二层,负责在物理层之上建立可靠的数据传输。它的主要功能包括:
- 帧同步:将数据划分成帧并在帧之间进行同步。
- 地址定义:使用MAC地址来唯一标识网络设备。
- 错误检测和纠正:检测并纠正物理层传输中出现的错误。
- 流量控制:管理数据传输速率以防止网络拥塞。
网络层 (Network):
简而言之,负责数据包在不同网络之间的路由和转发
网络层是OSI模型的第三层,主要功能包括:
- 路径选择:决定数据包从源到目的地的最佳路径。
- 逻辑地址:使用IP地址来标识网络设备。
- 数据包转发:在网络节点之间传输数据包。
- 流量控制和拥塞管理:优化网络流量,避免网络拥塞。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
传输层 (Transport):
简而言之,传输层确保数据可靠、有序地在发送方和接收方之间传输。
传输层是OSI模型的第四层,主要功能包括:
- 数据分段和重组:将数据分段传输并在目的地重组。
- 端到端连接:建立和维护源和目的地之间的通信连接。
- 可靠传输:通过确认和重传机制确保数据完整性(如TCP)。
- 流量控制:调节数据传输速率,防止网络拥塞。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层(定义传输数据的协议端口号)
会话层 (Session Layer)(在五层模型里面已经合并到了应用层)
简而言之,会话层负责建立、管理和终止应用程序之间的会话对应主机进程,指本地主机与远程主机正在进行的会话
会话层是OSI模型的第五层。它的主要功能包括:
- 会话建立:启动和设置通信会话。
- 会话管理:维持和同步数据传输,管理对话的开始和结束。
- 会话恢复:在连接中断时恢复会话。
表示层(Presentation Layer):(在五层模型里面已经合并到了应用层)
简而言之,表示层负责数据的转换、加密和压缩,确保数据在不同系统之间能够被正确理解和使用
主要功能包括:
- 数据转换:在不同数据格式之间进行转换(如文本到二进制)。
- 数据加密和解密:确保数据安全传输。
- 数据压缩和解压缩:减少数据传输量。
格式有,JPEG、ASCll、DECOIC、加密格式等
应用层 (Application):
简而言之,应用层是用户和网络之间的桥梁,提供访问和使用网络服务的接口
主要功能包括:
- 网络服务:提供各种应用程序服务(如电子邮件、文件传输、网页浏览)。
- 数据接口:为用户和软件应用提供数据访问接口。
- 协议支持:支持特定的网络协议(如HTTP、FTP、SMTP)。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
Q10: 请列出你了解的web服务器负载架构
Nginx
HAproxy
LVS
Keepalived
Keepalived 是一个提供高可用性(HA)和负载均衡(LB)功能的系统工具。
1. 高可用性 (HA)
Keepalived 通过实现虚拟路由冗余协议 (VRRP),提供高可用性。
VRRP 允许将多个物理服务器配置为一个高可用性集群,这些服务器共享一个虚拟 IP 地址 (VIP)。如果主服务器出现故障,Keepalived 会自动将 VIP 切换到备用服务器,以确保服务的持续可用性2. 负载均衡 (LB)
Keepalived 也可以配置为负载均衡器,分发流量到后端服务器池。(需借助Linux IPVS)
工作原理:
VRRP高可用性:在配置中自定义主备关系,主节点发送vrrp广播包,如果备用节点在指定的时间内没有收到主节点的包,则接管VIP(如果是多个备节点,谁接管做master?根据VRRP的优先级来选举一个backup当master)
健康检查:内置的检查机制,可以获取到后端服务器的状态,如果检测到后端服务器故障,则从负载均衡池中删除
keepalived主要有三个模块,分别是core、check和vrrp。
core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。check模块:负责健康检查,包括常见的各种检查方式,例如:1.TCP 检查,检测指定端口的服务是否可访问。2.HTTP 检查通过发送 HTTP 请求来检测服务是否正常运行。 3.SSL/TLS 检查用于检测 SSL/TLS 服务是否可用,并验证 SSL 证书的有效性。(based on OpenSSL)4.SMTP 检查用于检测 SMTP 服务的可用性 5.MISC 检查允许用户执行自定义的脚本或命令,并根据执行结果来判断服务的状态
vrrp模块:是实现VRRP协议的。
Keepalived健康检查方式配置: HTTP_GET|SSL_GET HTTP_GET | SSL_GET { url { path /# HTTP/SSL 检查的url可以是多个 digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成 status_code 200# HTTP/SSL 检查返回的状态码 } connect_port 80 # 连接端口 bindto<IPADD> connect_timeout 3 # 连接超时时间 nb_get_retry 3 # 重连次数 delay_before_retry 2 #连接间隔时间 }
最常用的场景:分别与其它三个负载均衡器搭配使用
如果使用Keepalived与其它三个负载均衡结合使用:Keepalived常用于管理虚拟 IP 地址,并在主服务器故障时切换到备服务器
Nginx
Nginx 是一个开源的高性能 HTTP 服务器和反向代理服务器,也支持负载均衡。
- 高性能:作为一个高性能的 HTTP 服务器,Nginx 在处理静态内容和高并发请求方面表现出色。
- 负载均衡算法或功能:支持负载均衡、反向代理、缓存、SSL/TLS 终止、内容重写等多种功能。
1.轮询 2.权重 3.ip_hash 4.最小连接 5.url_hash和fair是第三方的
- 健康检查:通过端口检测到服务器内部的故障(TCP检查);根据服务器处理网页返回的状态码(HTTP检查)、超时(类似自定义监本检查)等
- 配置简单:配置文件简洁易懂,容易上手。
- 模块化设计:支持通过模块扩展功能,如第三方模块可以提供额外的负载均衡算法和健康检查功能。
- Nginx 对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能
- 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活
- 既可以做HTTP服务器又可以做反向代理服务器(Nginx也可作为静态网页和图片服务器,Nginx社区非常活跃;Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器)
缺点:
- 性能较 LVS 略逊:虽然性能高,但在处理极高并发连接时,性能不及 LVS。
- 负载均衡算法有限:内置的负载均衡算法相对简单,不如 HAProxy 丰富。
- 健康检查功能有限:内置的健康检查功能较为基础,不如 HAProxy 先进。
常用的 Nginx 模块,用来做什么
rewrite模块,实现重写功能access模块:来源控制
ssl模块:安全加密
ngx_cache_purge:实现缓存清除功能
HAproxy
HAProxy 是一个开源的、快速且可靠的解决方案,主要用于 TCP 和 HTTP 的负载均衡
- 高性能:专门为负载均衡设计,处理大量并发连接效率高。
- 丰富的负载均衡算法:支持多种负载均衡算法,如轮询、最小连接数、源地址哈希(source)等。
haproxy负载均衡的算法: 1.roundrobin : 基于权重轮循。 2.static-rr : 基于权重轮循。静态算法,运行时改变无法生效。 3.source : 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。 4.leastconn : 最小连接 5.uri : 对部分或整体URI进行hash运算,再与服务器的总权重相除,最后转发到匹配后端。 6.uri_param : 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。 7.hdr(<name>) : 根据http头转发,如果不存在http头。则使用简单轮循。
hash相关的算法大多都是为了将相类似的请求转发到同一后端进行处理
高级健康检查:支持多种健康检查方法(和Keepalived差不多),确保后端服务器的可用性
1.TCP检查,尝试建立 TCP 连接来检测后端服务器是否可用 2.通过发送 HTTP 请求并验证响应状态码来检测后端服务器的可用性 3.SSL 健康检查用于检测 SSL/TLS 服务的可用性 4.可以使用代理协议来进行健康检查,以传递更多的客户端连接信息 5.可以运行自定义脚本来进行复杂的健康检查 6.设置检查的频率、超时时间、失败次数等参数来控制健康检查的行为 小结,和Keepalived的健康检查方式差不多
- SSL(Secure Sockets Layer)/TLS(Transport Layer Security) 终止:支持 SSL/TLS 终止,可以减轻后端服务器的负载。(解密 SSL/TLS 加密的流量,在负载均衡器上进行,从而减轻后端服务器的负担)(在负载均衡器上进行 SSL/TLS 终止可以集成更多的安全功能,如 DDoS 防护、Web 应用防火墙(WAF)等)
- 强大的配置灵活性:配置文件功能强大,可以对请求进行精细的控制和优化。
缺点:- 配置复杂度:配置文件相对复杂,学习成本较高。
- 没有内置缓存功能:主要用于负载均衡和代理,没有内置的缓存功能。
LVS
使用Linux内核集群实现一个高性能、高可用的负载均衡服务器
- 高性能:基于内核的实现,性能极高,适合处理大量并发连接
- 丰富的负载均衡算法:支持多种高可用性模式,如 DR (Direct Routing)、NAT (Network Address Translation) 和 TUN (Tunneling)
负载均衡的算法: (常用的,大家基本都有的算法)轮询、权重轮询、最小连接、目标地址哈希、源地址哈希、 1.动态哈希(根据服务器的负载情况动态调整哈希表项的分布) 2.NAT(Network Address Translation)模式:在这种模式下,LVS将客户端的请求转发到后端的真实服务器,并将真实服务器的响应返回给客户端。 3.IP隧道(IP Tunneling)模式:IP隧道模式利用IP隧道技术将客户端的请求和后端服务器的响应在隧道中传输。 4.直接路由(Direct Routing)模式:直接路由模式与IP隧道模式类似,它将请求和响应直接在物理层传输,不需要IP封装和解封装的过程
- 低资源消耗:由于在内核空间运行,资源消耗非常低(抗负载能力强,是工作在网络4层之上仅作分发之用,没有流量的产生)
- 自身有完整的双机热备方案(LVS/DR+Keepalived,但网站应用比较庞大的话,实施比较困难)
- 几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等
缺点:
- 功能较简单:主要侧重于负载均衡,缺乏应用层的高级功能,如内容重写、SSL/TLS 终止等。(工作模式在第四层的限制)
- 配置复杂:需要对 Linux 网络配置有较深的了解,配置较为复杂。
- 健康检查有限:内置的健康检查功能相对简单,通常需要结合其他工具(如 Keepalived)来实现高级健康检查。
- 对网络稳定性要求高
LVS、Nginx、HAproxy 有什么区别?工作中你怎么选择?
LVS:是基于四层的转发
HAproxy:是基于四层和七层的转发,是专业的代理服务器
Nginx:是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
区别:LVS由于是基于四层的转发所以只能做端口的转发,而基于URL的、基于目录的这种转发LVS就做不了。
工作选择:
HAproxy 和 Nginx 由于可以做七层的转发,所以 URL 和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
选择 HAproxy 或者 Nginx 足已,由于 HAproxy 由是专业的代理服务器
配置简单,所以中小型企业推荐使用 HAproxy
Q11:Linux 系统中病毒怎么解决
1)最简单有效的方法就是重装系统
2)要查的话就是找到病毒文件然后删除
中毒之后一般机器 CPU、内存使用率会比较高、机器向外发包等异常情况。
排查方法如下:
1.top 命令找到 CPU 使用率最高的进程,尝试找到该进程
2.一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置
3.rm -f 命令删除病毒文件
4.检查计划任务、开机启动项和病毒文件目录有无其他可以文件等(执行history查看是否有执行程序/shellscript、crontab -e、或者对Systemd/init.d文档有修改的动作)
3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下
Q12:发现一个病毒文件你删了他又自动创建怎么解决
公司的内网某台linux服务器流量莫名其妙的剧增,用 iftop 查看有连接外网的情况
针对这种情况一般重点查看 netstat 连接的外网 ip 和端口。
用 lsof -p pid 可以查看到具体是那些进程,哪些文件
经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了
由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首
查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问
断了内网,病毒就失去外联的能力,杀掉它就容易的多
怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查
方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑
看不到图片就是/usr/bin/.sshd
于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件
然后才删掉了文章开头提到的自动复活的文件
总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统
一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜
一般都能找到元凶。但是如果遇到诸如此类的问题
/boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了
Q13:服务器开不了机怎么解决一步步的排查
1.检查硬件:检查电源插座、电源线是否有松动;检查散热器和风扇是否正常工作,检查是否有出现蓝屏或死机
2.检查服务器文件系统丢失、检查BIOS,确保启动顺序正确
3.软件层面:检查是否有内核更新或配置错误、检查必要的内核模块能否正确加载
Q14:你对现在运维工程师的理解和以及对其工作的认识
运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务
运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失
因此运维工程师的工作需要严谨及富有创新精神
Q15:如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1
iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080
-A PREROUTING
:这表示将规则追加(-A
)到PREROUTING
链
-d 192.168.2.1
:指定目标地址-p 指定协议(
-p
)是 TCP-m 使用
tcp
模块,允许进一步匹配 TCP 特有的属性
--dport
匹配目标端口是 80
-j
表示跳转到目标操作--to-destination 将数据包的目标地址和端口转换为
192.168.2.1:8080
Q16:统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip
cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10
awk '{print $1}'
从每行中提取第一个字段(通常是 IP 地址)uniq -c
计算每个唯一 IP 地址的出现次数sort -rn
按照出现次数的降序对 IP 地址进行排序head -10
显示出现次数最多的前 10 个 IP 地址及其出现次数
Q17:MySql数据备份工具
1.mysqldump工具:
mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump
支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景
Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。
2.基于LVM快照备份
在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录
进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别
而innodb不开启独立表空间的话只能备份整个数据库
3.tar包备份
percona提供的xtrabackup工具
支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同
数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展
可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份
Q18:如何重置 MySQL Root 密码?
一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:
1、 在SHELL环境下,使用 mysqladmin 命令设置:
mysqladmin –u root –p password “新密码” 回车后要求输入旧密码
2、 在mysql>环境中,使用update命令,直接更新 MySQL 库 user 表的数据:
Update mysql.user set password=password(‘新密码’) where user=’root’;
flush privileges;
注意:mysql语句要以分号”;”结束
二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:
1、 关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务)
2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务
/usr/local/mysql/bin/mysqld_safe --skip-grant-table &
3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码
#mysql -u rootMysql> Update mysql.user set password=password(‘新密码’) where user=’root’;
Mysql> flush privileges;
Q19:MySQL 的 innodb 如何定位锁问题,MySQL 如何减少主从复制延迟?
MySQL 的 innodb 如何定位锁问题:
在使用 show engine innodb status检查引擎状态时,发现了死锁问题
在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)
innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系
MySQL 如何减少主从复制延迟:
如果延迟比较大,就先确认以下几个因素:
从库硬件比主库差,导致复制延迟
主从复制单线程,如果主库写并发太大,来不及传送到从库,就会导致延迟。更高版本的mysql可以支持多线程复制
慢SQL语句过多
网络延迟
master负载;主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层
slave负载;一般的做法是,使用多台 slave 来分摊读请求,再从这些 slave 中取一台专用的服务器。只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒
#参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据–master-connect-retry=seconds 单位为秒 默认设置为 60秒
#参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟
MySQL 数据库主从同步延迟解决方案
1.最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行
还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit= 1 之类的设置,而slave则不需要这么高的数据安全,完全2.可以讲sync_binlog设置为0或者关闭binlog
innodb_flushlog也可以设置为0来提高sql的执行效率。
3.另外就是使用比主库更好的硬件设备作为slave
Q20:什么是中间件?什么是jdk?
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯,是连接两个独立应用程序或独立系统的软件。
相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递,通过中间件,应用程序可以工作于多平台或OS环境。
jdk:jdk是Java的开发工具包
它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境
Q20:RabbitMQ 是什么东西?(消息队列中间件)
消息是指在两个独立的系统间传递的数据。这两个系统可以是两台计算机,也可以是两个进程。
消息是平台无关和语言无关的
RabbitMQ 也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器,消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地。
消息队列简单的理解就是:在消息的传输过程中使用队列作为保存消息的容器。
队列是在消息的传输过程中的通道,是保存消息的容器,
根据不同的情形,可以有先进先出,优先级队列等区别 。
注册的时候需要调用三个服务,这三个服务可以各自独立放在三个服务器中,执行到哪一步直接发送消息即可实现异步调用。注册的效率就快多了
调用邮件服务:发送带有验证链接的注册邮件,
调用第三方验证服务:验证身份证信息真假,
调用用户的服务:对用户进行注册。
Q21:Tomcat和Resin有什么区别,工作中你怎么选择?
Resin 和 Tomcat 是两种流行的 Java 应用服务器,均用于部署和运行基于 Java 的 Web 应用程序
区别:Tomcat 用户数多,可参考文档多,Resin用户数少,可考虑文档少
最主要区别则是 Tomcat 是标准的 java 容器,不过性能方面比 resin 的要差一些。但稳定性和 java 程序的兼容性,应该是比 resin 的要好
工作中选择:现在大公司都是用 resin,追求性能;而中小型公司都是用 Tomcat,追求稳定和程序的兼容
Q22:讲述一下Tomcat8005、8009、8080三个端口的含义?
8005 - 关闭时使用
8009 - 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
8080 - 一般应用使用
AJP(Apache JServ Protocol)是一种二进制协议,设计用于高效地连接 Web 服务器(如 Apache HTTP Server)和应用服务器(如 Apache Tomcat
Q23:简述 DNS 进行域名解析的过程?
域名解析(DNS Resolution)是将人类可读的域名(如 www.example.com)转换为机器可读的 IP 地址(如 93.184.216.34)的过程
用户请求 -> 本机host文件 -> 本地设置的DNS服务器 -> 网络中的根服务器 -> 一级域名服务器-> 二级域名服务器 -> 三级域名服务器
-> 将 IP 地址返回 -> 使用获取的 IP 地址,与目标服务器建立连接,发送 HTTP 或 HTTPS 请求等
用户要访问 www.baidu.com,会先找本机的 host 文件,再找本地设置的 DNS 服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器。
二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端。
Q24:什么叫CDN?
即内容分发网络,其目的是通过在现有的 Internet 中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度
DNS 解析的优化
CDN(内容分发网络):使用 CDN 可以将内容缓存到离用户较近的服务器,提高访问速度和可靠性。
智能 DNS 解析:根据用户的地理位置、网络条件等因素,返回最优的 IP 地址,优化用户访问体验。
Q25:什么叫网站灰度发布?
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。
AB test 就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
Q26:Squid、Varinsh 和 Nginx 有什么区别,工作中你怎么选择?
Squid、Varinsh 和 Nginx 都是代理服务器
什么是代理服务器:
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你;如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网。
区别:
1)Nginx 本来是反向代理/web服务器,用了插件可以做做这个副业,但是本身不支持特性挺多,只能缓存静态文件
2)从这些功能上。varnish 和 squid 是专业的 cache 服务,而 nginx 这些是第三方模块完成
3)varnish 本身的技术上优势要高于 squid,它采用了可视化页面缓存技术在内存的利用上,Varnish 比 Squid 具有优势,性能要比 Squid 高。还有强大的通过 Varnish 管理端口,可以使用正则表达式快速、批量地清除部分缓存。它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
4)squid 的优势在于完整的庞大的 cache 技术资料,和很多的应用生产环境
工作中选择:
要做 cache 服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。
Q27:简述 raid0 raid1 raid5 三种工作模式的工作原理及特点?
RAID(独立磁盘冗余阵列)技术通过组合多个物理硬盘来提供数据冗余和提高性能。RAID 有多种不同的配置模式,常见的有 RAID 0、RAID 1 和 RAID 5。还可以结合使用,例如:RAID 10
RAID0:
数据条带化(Striping)
- 优点
- 高性能:由于同时读取/写入多个磁盘,RAID 0 提供了显著的读写速度提升。
- 存储效率高:没有冗余数据,所有磁盘的空间都被用来存储实际数据。
缺点:
- 没有数据冗余:任何一个磁盘的故障都会导致整个 RAID 0 卷的数据丢失。
- 可靠性差:随着磁盘数量的增加,故障风险也增加
RAID1:
数据镜像(Mirroring)
优点:
- 高数据可靠性:任意一个磁盘故障都不会导致数据丢失,只要另一个磁盘仍然工作。
- 读性能提升:读取操作可以从任意一个磁盘进行,因此读性能有所提高。
缺点:
- 存储效率低:由于数据是完全镜像的,实际可用存储空间只有一半。
- 写性能略低:每次写操作都需要写入到两个磁盘,写性能略低于单个磁盘
RAID5:
数据条带化和奇偶校验(Striping with Parity)
优点:
- 数据冗余和恢复能力:可以通过奇偶校验数据恢复故障磁盘上的数据。
- 存储效率较高:只需要一个磁盘的空间存储奇偶校验信息,存储效率比 RAID 1 高。
缺点:
- 写性能较低:由于需要计算和写入奇偶校验数据,写性能比 RAID 0 和 RAID 1 低。
- 恢复性能较低:磁盘故障后的数据恢复过程较慢,因为需要重新计算奇偶校验数据。
Q28:现在给你三百台服务器,你怎么对他们进行管理?
管理3百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用 salt、ansiable、puppet 进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的 cmdb 信息管理。便于查阅每台服务器上的各种信息记录。