运维工程师总结大全

目录

第一章.网络协议

1.OSI七层模型 (TCP/IP五层 四层)

1)七层(物数网传会表应)
2)五层(物数网传应)
3)四层(网络接口层、网络层、传输层、应用层)

2.TCP三次握手四次断开 (11种状态的转换)

在这里插入图片描述

3.UDP和TCP区别:

UDP传输效率高,包小,头部长度8,TCP安全可靠,包大,头部长度20

第二章.系统管理

1.命令

kill scp ps lsof top等

2.用户

/etc/passwd 密码 /etc/shadow 用户信息

3.RAID

–> 笔试多 比较RAID级别
1)0-6种级别
2)RAID0:条带模式
3)RAID1:镜像模式
4)RAID5:分布式奇偶校验
5)RAID10:RAID0+RAID1
6)Mdadm -Cv /dev/md5 -l5 -n3 -x1 /dev/sd[b-e] 格式化 挂载 自动挂载

4.LVM

–> 1.创建逻辑卷的流程 2.扩展逻辑卷的流程
1)特点:动态调整大小,弹性伸缩
2)Scan、display、create、remove、extend、reduce

5.权限

chmod chown umask(默认权限)
umask root默认022 --> 文件 644 目录 755
chattr lsattr i 不能修改 a 只能追加

6.计划任务

at 一次性
crontab 周期性 --> 分时日月周
每天两点执行一次 0 2 * * *

7.任务管理

& jobs ctrl+z bg fg

8.进程

ps:
当前时间,上线时间,用户,平均负载(1min,5min,15min的平均负载,单双核)
任务总数,运行数,休眠数,停止的,僵尸进程
cpu总核数(按1显示全部核数),user、system、nice、idle、IO-wait、hi(硬中断)、si(软中断)、st(虚拟化磁盘节省)
kb单位内存,空闲,已用的,缓存
kb单位交换分区,空闲,已用,可用空间。

top
进程状态:
S R N T D Z X + < l s
kill /killall /pkill
kill和kill -9有什么区别?
kill -9可以强制杀死进程,原因在于kill与kill -9 向进程发送的信号不同;
尽量避免使用kill -9,kill -9可能会出现孤儿进程
什么是僵尸进程?
子进程死掉,父进程没有正常回收子进程,一直占用pid号,不能有新的进程运行。
Top ps -elf | grep -Z
杀死父进程,自动清理僵尸进程。
重启系统。

9.网络命令

ping 测试网络连通性
netstat/ss
tcpdump 抓包 笔试题
-i 指定网络接口
-n 以数字显示,不显示域名
-w 把内容保存到文件
-vv 详细信息
-c 接受数据包的数量
host 指定要抓取的主机IP

tcpdump -i ens33 src/dst host IP

端口 或协议的数据
tcpdump tcp port 端口号
tcpdump tcp port 端口号 and host IP地址

第三章.网络服务

1.FTP -->三种用户 端口号 20 21

1)匿名用户、本地用户、虚拟用户
2)主动:客户机打开端口,等待服务器发送数据。(tcp20、21)
3)被动:服务器打开端口,等待客户发送数据。(tcp20、未知高级端口)

2.DHCP

–>DHCP分配IP的流程 DHCP中继(跨网段)
1)discover、offer、request、ack
3.DNS
–>host/nslookup/dig
DNS解析流程:浏览器,宿主机host,域名服务器,根域,二级域。

主从
端口 TCP/UDP 53
解析时主要使用UDP 53,当域名过长时,使用TCP 53 ,还有主从复制使用TCP 53 (面向连接,安全可靠)

4.ssh

–> 22 scp命令的使用 ssh命令使用
免密登录(秘钥登录)

5.shell脚本

–>背两个脚本

1.检测主机存活
检测主机存活:

#!/bin/bash
i=0
for IP in 192.168.20.{1..3}
do
	ping -c 2 -i 0.1 -w 1  $IP &>/dev/null
	if [ $? -eq 0 ];then
		echo "$IP is up."
		let i++
	else
		echo "$IP is down."
	fi
done
echo "total ${i} IP is up."
2.自动备份MySQL

在这里插入图片描述

3.Keepalived+nginx检测是否开启
#!/bin/bash
while :;do
	pidof nginx &> /dev/null
	if [ $? -ne 0 ];then
		/usr/local/nginx/sbin/nginx &> /dev/null
		pidof nginx $> /dev/null
		if [ $? -ne 0 ];then
			/usr/bin/systemctl stop keepalived
		else
			pidof keepalived &> /dev/null
			if [ $? -ne 0 ];then
				/usr/bin/systemctl start keepalived
			fi
		else
			pidof keepalived &> /dev/null
			if [ $? -ne 0 ];then
				/usr/bin/systemctl start keepalived
			fi
		fi
	fi
	sleep 3
Done
检测LVS后端真实服务器
#!/bin/bash
VIP=192.168.153.188
rs=(192.168.153.136 192.168.153.137)
while :
do
for i in ${rs[*]}
do
    exist_num=$(ipvsadm -Ln | grep -c $i)
    status_code=$(curl -sI -o /dev/null -w %{http_code} http://$i/index.html)
    if [ $status_code -ne 200 -a $exist_num -eq 1 ];then
        echo "正在将$i从调度表中删除"
        ipvsadm -d -t $VIP:80  -r $i:80
    elif [ $status_code -eq 200 -a $exist_num -eq 0 ];then
        echo "正在添加 $i 到调度表中"
        ipvsadm -a -t $VIP:80  -r $i:80 -g
    fi
    done
    sleep 1
done

$? $* $@ $# $0 $$
read / $1-$9
if/case
while/for

6.grep sed awk

awk默认分割符 空格和tab -F NR NF $1
sort cut uniq paste xargs split join tr tee

第四章.web

1.访问网站的流程

DNS解析流程 三次握手 WEB流程

2.nginx

版本号 1.6

3.nginx优化:

1).防盗链 rewrite
2).调整并发连接数 woker_connections 20480;
3).隐藏版本号 配置文件在http段内添加server_tokens off;
4).压缩
gzip on;
gzip_min_lengh 1k;压缩页面最小字节
gzip_buffers 4 16k;缓冲4块,单位16k
gizp_http_version 1.1; 压缩版本
gzip_comp_level 2;压缩等级

5).会话保持
6).日志轮割
7).自定义错误页面
8).设定用户和用户组 配置文件user nginx nginx;或者编译./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
9).绑定CPU
10).设置连接超时时间 keepalive_timeout 60;
11).设置缓存 在location中添加expires 3650d;
12).使用epoll的IO模型 -->select epoll 对比
13).访问控制
14).调整进程数
woker_processes 4;几核写成几(top 1 查看或/proc/cpuinfo看processor)

4.同步异步模式

select 同步阻塞 线性轮询 1024
epoll 异步非阻塞

5.select,epoll比较

select模型是同步阻塞式,同时采用线性轮询的方式,只能监听1024个文件描述符,效率比较低。而epoll是异步非阻塞,采用的是定期轮询,对监听文件描述符没有限制。
epoll在Linux内核版本2.6+开始支持

6.nginx常用模块?

ngx_http_access_module模块
ngx_http_auth_basic_module模块
ngx_http_stub_status_module模块
ngx_http_log_module模块
ngx_http_gzip_module模块
ngx_http_ssl_module模块
ngx_http_rewrite_module模块
ngx_http_referer_module模块
ngx_http_headers_module模块

7.rewrite模块

–>重写
1).防盗链
2).URL重写
3).域名镜像
4).跳转301

8.rewrite标志位

last 本条规则匹配后,继续匹配下一条
break 匹配成功后,就终止
redirect 返回302临时重定向
permanent 返回301永久跳转

9.location 匹配

1).动静分离
2).UA分离 -->
3).域名

= 普通字符精准匹配
^~ 不支持正则,普通字符串匹配
~* 正则匹配,不区分大小写
~ 正则匹配,区分大小写
/匹配内容/ 匹配普通字符串,如果有正则 先匹配正则

! 取反

10.nginx与Apache对比?

nginx的并发量 5万
公司的并发量 七八百 PV量 几万 数据量 100多兆

11.tomcat

–版本 8.5
JVM -->内存模型 调整内存大小 catalina.sh
tomcat 优化
1).压缩
2).并发
3).版本号
4).线程池
5).禁止DNS解析
端口 8080

连接器运行模式 -->BIO NIO NIO2 APR

多实例

第五章MySQL

1.版本号

MySQL 5.5 5.6 5.7

2.查询语句

SQL语句 -->select 内连接 外连接 全连接 子查询
order by ; limit ; group by

3.where与having区别 ?

where用在聚合前 having用在聚合后
如果条件允许,多用where,这样聚合后的数据量小

4.delete与drop区别?

drop是删除库或表的;
delete删除表里的数据;

用户信息和权限存放mysql.user

5.MySQL忘记root用户密码如何解决?

关闭数据库:systemctl stop mariadb
mysqld_safe --skip-grant-tables &
update mysql.user set password=password(‘新密码’) where user='root’and host=‘localhost’;
杀数据库进程,重新启动

6.索引类型

索引: 普通索引 唯一性索引 主键 全文索引
日志: 错误日志 查询日志 慢查询日志 二进制日志 中继日志

7.主从复制:

1.主从复制原理;

主库开启二进制日志,并且对从库进行授权;
从库连接主库后,执行start slave命令,开始IO线程和SQL线程;
IO线程通过主库的binlog dump线程获取二进制日志的内容并写入中继日志,SQL线程负责执行中继日志中的内容

2.主从分类

按架构分:
一主一从(多从) 互为主从 级联复制 同源复制(多主一从)

按复制方式分:
传统复制 基于GTID复制 并行复制

按同步方式分:
默认是异步 半同步复制 增强半同步

8.为什么要做读写分离?

主库负责写,从库负责读,减轻IO压力
避免在从库上写

9.mysql数据库的优化;

第六章 集群

1.LVS–>四层

2.工作模式

DR NAT TUN ENAT FullNAT
DR的工作原理
调度算法: 一共有11种,常用rr wrr lc wlc

3.nginx -->主要在七层

通过模块实现四层负载(stream)
调度算法:
轮询 加权轮询 哈希(ip_hash,url_hash) fair(根据RS响应时间)

4.正向代理与反向代理?

4.nginx如果实现负载均衡?

5.LVS与nginx负载对比优缺点?

LVS的负载能力强,因为其工作方式逻辑非常简单,仅进行请求分发,而且工作在网络的第4层,没有流量,所以其效率不需要有过多的忧虑。
LVS基本能支持所有应用,因为工作在第4层,所以LVS可以对几乎所有应用进行负载均衡,包括Web、数据库等。

Nginx工作在网路第7层,所以可以对HTTP应用实施分流策略,比如域名、结构等。相比之下,LVS并不具备这样的功能,所以Nginx可使用的场合远多于LVS。并且Nginx对网络的依赖比较小,理论上只要Ping得通,网页访问正常就能连通。LVS比较依赖网络环境。只有使用DR模式且服务器在同一网段内分流,效果才能得到保证。

6.keepalived -->功能 健康检查 故障转移

协议 VRRP
keepalived+nginx 需要脚本监控nginx状态

第七章redis

1.支持数据类型

字符串string (512M) 列表list(2^32-1) 集合set(2^32-1) 有序集合sroted(2^32-1) 哈希hash(2^32-1)

2.redis单线程?

1.Redis是否真的是单线程?

Redis在处理客户端的请求时,包括获取(socket读)、解析、执行、内容返回(socket写)等都由一个顺序
行的主线程处理,这就是所谓的“单线程”。但如果严格来讲从Redis4.0之后并不是单线程,除了主线程外,
也有后台线程在处理一些较为缓慢的操作,例如清理脏数据、无用连接的释放、大key的删除等等。

2.为什么Redis设计为单线程?

官方回应:使用Redis时,几乎不存在CPU成为瓶颈的情况,Redis主要受限于内存和网络。例如在一个普通的Linux系统上,Redis通过使用pipelining每秒可以处理100万个请求,所以如果应用程序主要使用O(N)或O(log(N))的命令,它几乎不会占用太多CPU。
使用了单线程后,可维护性高。多线程模型虽然在某些方面表现优异,但是它却引入了程序执行顺序的不确定性,带来了并发读写的一系列问题,增加了系统复杂度、同时可能存在线程切换、甚至加锁解锁、死锁造成的性能损耗。Redis通过AE事件模型以及IO多路复用等技术,处理性能非常高,因此没有必要使用多线程。单线程机制使得Redis内部实现的复杂度大大降低,Hash的惰性Rehash、Lpush等等“线程不安全”的命令都可以无锁进行。

3.Redis6.0中为什么要引入多线程?

从Redis自身角度来说,因为读写网络的read/write系统调用占用了Redis执行期间大部分CPU时间,瓶颈主要在于网络的IO消耗,优化主要有两个方向:
•提高网络IO性能,典型的实现比如使用DPDK来替代内核网络栈的方式
•使用多线程充分利用多核,典型的实现比如Memcached。
协议栈优化的这种方式跟Redis关系不大,支持多线程是一种最有效最便捷的操作方式。所以总结起来,redis支持多线程主要就是两个原因:
•可以充分利用服务器CPU资源,目前主线程只能利用一个核
•多线程任务可以分摊Redis同步IO读写负荷

4.Redis6.0中如何设置多线程?

Redis6.0的多线程默认是禁用的,只使用主线程。如需开启需要修改redis.conf配置文件:
io-threads-do-reads yes
开启多线程后,还需要设置线程数,否则是不生效的。同样修改redis.conf配置文件:io-threads 4;
关于线程数的设置,官方有一个建议:4核的机器建议设置为2或3个线程,8核的建议设置为6个线程,线程数一定要小于机器核数。还需要注意的是,线程数并不是越大越好,官方认为超过了8个基本就没什么意义了。

3.redis吞吐量

单点TPS 8万/S
QPS 10万/s

4.redis优势:

1).纯内存性速度快
2).支持数据持久化
3).支持数据类型丰富
4).功能比较多
5).支持主从,哨兵,集群等架构

5.redis与memcached对比

1).memcached只能支持字符串,而redis可以支持多种数据类型
2).memcached是纯内存型,不支持数据持久化,redis支持数据持久化
3).Reids支持主从,哨兵,集群等架构

6.redis持久化

RDB -->快照模式,保存某一时间点的数据集
AOF -->类似于mysql的二进制日志,记录执行的语句
AOF 三种策略:
Always everysec no

7.redis集群

Hash槽数量 16384(0-16383)
作用:当集群中需要存放一个键值对,根据CRC%16384的值,决定这个键值对放那个槽

8.应用场景

1)session共享
2)消息队列
3)排行榜或计数器

9.缓存穿透

查询一个key,缓存与数据源都没有,频繁查询数据源。
解决:1)返回空值给redis,key=null,避免恶意攻击,设置有效时间,短 期有效。
2)布隆过滤器(redis自身具备)

10.缓存击穿

查询一个key(热点数据),数据源中有,但redis中过期。
问题:热点数据缓存过期,导致大量并发,数据库io压力增大。
解决:互斥锁,不存在返回1,读取数据库中数据,再次访问返回0.

11.缓存雪崩

当缓存服务器重启或大量的缓存失效时,频繁查询数据库。
解决:1)缓存层高可用
2)消息队列削峰

第八章zabbix 5.0

1.监控怎么做的?

利用监控了哪些内容
硬件:温度 风扇 -->IPMI
网络设备: 路由 交换 -->SNMP
系统:CPU 内存 硬盘 网络
应用:redis(使用内存大小) mysql(端口号、主从复制) nginx(访问情况) php
业务:访问量

tomcat–>JMX -->zabbix-java-gateway 10052

2.单机监控命令

iostat
df /du
mpstat
vmstat
r 等待执行的任务数,如果超过CPU个数,说明CPU有瓶颈
b 等IO的任务数
system:
in:每秒中断数
cs:每秒上下文切换
这两个值越大,表示内核消耗的CPU资源越多
free

https://blog.csdn.net/qq_39109226/article/details/114928613

3.端口号

zabbix-server 10051 zabbix-agent 10050

4.zabbix模式

主动模式:客户端主动向服务端上报信息
被动模式:默认,服务端主动向客户端获取信息
zabbix-proxy:实现分布式,同样监听10051端口,没有web,只有数据库

5.报警:邮件,钉钉,微信(通过脚本实现)

6.自动救援

通常当服务下线或宕机,重启服务时使用,在动作中可以实现

7.自动发现

可以通过扫描的方式添加客户端

8.自动注册

当客户端启动,主动添加

9.LLD

低级别自动发现–>通过脚本实现,可以自动添加监控项

10.优化

LAMP
1.mysql
通过配置项
2.php
调整php的进程数
3.zabbix
删除不用的监控项
调整数据的缓存周期

11.添加监控项流程

1.取值
2.配置
3.测试
4.添加

特殊的监控项:
web检测 -->步骤和场景

第九章 ansible

ansible:
常用模块: copy yum service file shell command(默认) corn
templete

1.copy和templete区别?

copy直接上传文件,而template模块能识别变量,通常推送的是jinja2模板

2.主机清单:

主机地址 跟变量(用户名,密码)

3.playbook -->剧本

触发器 notify和handler
变量定义
变量注册 register:变量名 + debug模块–>msg: {{变量名}}
facts变量
流程控制语句: 判断:when 循环with_items

通过playbook实现过什么?
编写playbook部署zabbix-agent

4.使用过roles吗?

没有,了解过,roles规范化了playbook,使playbook结构清晰,实现解耦。可以通过ansible-galaxy管理roles

第十章 docker

docker
docker中如何实现资源隔离?
namespace --> pid uts ipc user mount network
docker中如何实现资源限制的?
cgroup

镜像 容器 仓库
docker基础命令

docker run -->通过镜像启动容器
=pull create start

1.当docker服务重启后,容器会显示exit状态,如何解决?

–restart=always
容器分为两种:
交互式容器 系统
守护进程式容器 应用

2.如果进入启动容器?

attach
exec 使用多

3.如果不退出容器,只退出终端?

ctrl+pq

4.镜像制作两种方式?

1.通过容器commit提交
2.dockerfile

1.FROM 指定基础镜像
2.RUN 运行命令 ,每一RUN指令会生成一个镜像层
3.COPY 传输文件
ADD 支持解压缩,原路径可以是远程路径,此时不解压缩
4.CMD 指定在docker run时运行的命令
ENTRYPOINT 与CMD类似,但是不会被docker run指定的命令覆盖
5.ENV 设置环境变量
6.ARG 传参,与ENV类似,作用范围不同,ARG仅对Dockerfile生效
7.VOLIME 匿名数据卷,启动容器时如果没有指定,默认挂载
8.EXPOSE 暴露端口

5.docker的数据持久化:

1.数据卷
2.数据卷容器

6.docker网络模式

host --net=host 容器与宿主机共用Network
container --net=container:容器或ID
容器与另外一个容器共用一个网络
none --net=none 容器独立的Network
bridge --net=bridge 默认的网络模式

第十一章CICD

1.CSV:代码版本管理系统

svn,git
Git 与 SVN 区别
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

2.Git 与 SVN 区别点:

1、git,svn区别
Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。Git 与 SVN 区别
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

3.代码上线流程

产品经理—>项目管理系统—>开发—>本地测试—>gitlab合并分支—>gitlab合并master—>jenkins做持续集成

jinkens持续集成过程:
jenkins手动或自动(webhook脚本)拉去代码—>maven打包,解决依赖—>sanar代码质量检测—>利用脚本rsync,ansible进行分发到测试服务器—>类生产环境—>生产环境

4.代码发布策略

1)蓝绿发布
两组服务器,通过负载调度器把新版本分发到一组服务器中,另一组保留原样。用户使用一组服务器。
特点:
如果代码出现问题,一组服务器不可用。
成本比较高,需要一组一摸一样的服务器。
用户无感,平滑过渡。
升级,回滚速度快。

2)滚动发布
每次只升级一个或多个服务器,不断执行这个过程,到升级完成。
特点:
节约资源。
用户无感,平滑过渡。
部署时间慢。
发布策略复杂。
不易回滚。

3)灰度发布(金丝雀发布)使用较多
升级部分服务器,一部分用户使用老版本,一部分用户使用新版本。逐步扩建,直到完成。使用权重值实现分流策略。
特点:
保证整个系统稳定性,在初始灰度发布时发现,解决问题,影响范围可控。
新功能逐渐评估性能,稳定性,健康状况,如果出问题,影响范围小。
用户无感,平滑过渡。
自动化需求高,同时并存两个版本。

面试题:

https://www.cnblogs.com/mydba-j/articles/10296084.html

https://blog.51cto.com/ganbing/2057482

https://mp.weixin.qq.com/s?__biz=MzIzODIzNzE0NQ==&mid=2654428912&idx=1&sn=09da648acb4bfe2bbc0527d5ee4652f8&chksm=f2ff9a46c588135097df1de7a30c75ee88d683652826ec72923ed89c033219a869b9686bd701&mpshare=1&srcid=0821l5E5Iv4sngSY0v0MRIAy&sharer_sharetime=1614221667213&sharer_shareid=1ae456ef992b5c82668272c6fede9ac5&from=groupmessage&scene=1&subscene=10000&clicktime=1614221749&enterid=1614221749&ascene=1&devicetype=android-29&version=28000159&nettype=3gnet&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=Aav3Z3vNa%2BgdyWRmFWoulYg%3D&pass_ticket=uvAffQBJTs3DSoZTBIUmNN3Rs7kZXjOGbfk4BCSRJxNihNiYq2%2FY2ADhqNIrSqiK&wx_header=1

https://blog.51cto.com/ganbing/2059541

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值