> 文章列表 > 云计算面试总结

云计算面试总结

云计算面试总结

shell脚本对日志进行备份

shell 对日志备份
#!/bin/bash
if      [ -d /log/bak/ ] || mkdir -p /log/bak/
thentar Pcf /log/bak/log_$(date +%Y%m%d)''$(date +%H%M%S).tar.gz  /var/log/*.logecho "干完!可以约会啦"
fi

存在的问题:
说的太快,听清楚问题再说,不要说无关的知识,及内容;自我介绍,没想了解那么详细,毕业后做什么
不要说几年经验,改成会shell
Kafka 用在大数据场景;mysql使用ID场景

Linux
1、linux 基础之-高并发内核优化
1)单进程最大打开文件数限制
2)内核TCP参数方面 Linux系统下,TCP连接断开后,会以 TIME_WAIT 状态保留一定时间,然后才释放端口。当并发请求过多时,会产生大量 TIME_WAIT 状态连接,无法及时断开会占用大量的端口资源和服务器资源。
3)IO事件分配机制
生产环境请根据自己的实际情况调整观察再调整
2、如何优化 Linux系统(可以不说太具体)?
答:
安全:
01)不用root ,添加普通用户,通过sudo授权管理。
02)更改默认的远程连接SSH服务端口及禁止root用户远程连接。
03)锁定关键系统文件。
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
处理以上内容后把chattr.lsattr改名 oldboy ,这样就安全多了。
4)去除系统及内核版本登录前的屏幕显示,清空/etc/issue。
5)清除无用的默认系统账户或组。
性能:
1)定时自动更新服务器时间。
04) 配置yum更新源,从国内更新源下载安装rpm包。
05)关闭selinux及iptable(IPtable工作场景如果有wan ip一般要打开,高并发除外)。
06)调整文件描述符的数量。进程及文件的打开都会消耗文件描述符。
07)定时自动清理/var/spool/clientmquene/目录垃圾文件,防止inodes节点被占满。
08)精简开机自启动服务(crond,sshd,network,rsyslog)。
09)linux内核参数优化/etc/sysctl.conf ,执行sysctl -p生效。
10)更改字符集,支持中文,但建议还是使用英文字符集,防止乱码问题,不要使用中文。
11)

Tomcat

优化:
1)Tomcat的运行模式:bio效率低,apr对系统配置有一些更高的要求;一般使用nio
2)关键配置
maxthereads:最大线程数,默认200
minsparetherad:最小活跃线程数,默认是25
maxqueusize: 最大等待队列个数
3)影响性能的配置
compression设置成on,开启压缩
禁用AJP链接器:用nginx+tomcat架构,用不到AJP
disableuploadtimeou=fase: 上传是否使用超时机制

下面举一些例子来说明 jar 命令的用法:

  1. 压缩jar -cvf test.jar test

  2. 解压jar -xvf test.jar test

mysql

1)mha是通过心跳来检测存活,

问:索引建立越多越好吗?

数据量小的表不需要建立索引,因为建立索引会增加额外的开销。
数据变更需要维护索引,因此更多的索引意味着更多的维护成本。
更多的索引意味着更多的存储空间。

理论

1、简述Raid0、1、5的特点与原理

raid0:读写性能提升,无冗余,利用率100%,至少两块盘
raid1:读性能提升写性能下降,有冗余,利用率 1/2,至少两块盘
raid5:读写性能提升,有冗余,利用率n-1,只能坏一块盘,至少三块盘

2、linux根目录下各子目录的名词及作用

答:1)/bin binary二进制
系统可执行程序文件。普通用户的命令,例如ls pwd whoami
2)/home 用户家目录;
每给系统增加一个用户,都在此目录创建一个“同名”的目录,作为该用户的家目录使用,用户每次登陆系统首先进入其家目录。
3)/sbin super binary超级的二进制
系统可执行程序文件,是root管理员执行;例如init
4)/root 超级管理员root的家目录
5) /boot 系统启动文件目录
/boot/initramfs-2.6.32-504.el6.i686.img是系统内核文件
6)/etc 系统配置文件目录
/etc/passwd 存放系统用户信息
/etc/group 存放系统用户组信息
7)/dev device设备目录
系统把全部的硬件映射为文件存储在此目录
例如:/dev/cdrom用于指向“光驱”
8)/usr unix system resource操作系统资源文件目录
类似windows系统的C:/Program Files目录
是系统软件安装
3、什么是代理服务器,什么叫CDN?
答:代理服务器
1. 本身不产生内容
2.处于中间位置转发上下游的请求和响应
① 面向下游的客户端: 它是服务器,反向代理
② 面向上游的服务器: 它是客户端,正向代理
CDN即内容分发网络
其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度

4、linux系统启动流程
centos-6 开机自检BIOS-MBR引导-GRUB菜单-加载内核-init进程初始化
centos-7 开机自检BIOS-MBR引导-GRUB2菜单-加载内核-systemd进程初始化

故障排查
1、假如有人反应,调取后端接口时特别慢,你会如何排查?

答:只是看你回答的内容与面试官契合度有多高,能不能说到他想要的点上,主要是看你排查问题的思路。
问清楚反应的人哪个服务应用或者页面调取哪个接口慢,叫他把页面或相关的URL发给你,
首先,最直观的分析就是用浏览器按F12,看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),
如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。
其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,最好用tail -f 跟踪一下日志,
当然你也要点击测试来访问接口日志才会打出来。
最后,排除sql,,找到sql去mysql执行一下,看看时间是否很久,如果很久,就要优化SQL问题了,
expain一下SQL看看索引情况啥的,针对性优化。数据量太大的能分表就分表,能分库就分库。如果SQL没啥问题,那可能就是写的逻辑代码的问题了,一行行审代码,找到耗时的地方改造,优化逻辑。

2、当一个网站访问慢时, 你都是怎么去查找问题,和解决问题以达到优化效果的

答:第一,用5分钟排除网络因素,借助工具(如pagespeed)分析页面加载过程

  1. 某个元素或者图片加载过慢: 具体原因具体分析

  2. DNS解析时长问题: 可以通过购买解析服务, 来让自己的域名在各地DNS更多缓存

  3. 网络带宽瓶颈: 考虑增加带宽

  4. 网络线路波动: 考虑CDN,或者镜像站第二,要考虑到服务器问题1. 是否有服务器过载: 考虑增加硬件

  5. I/O操作:数据库的频繁读写,服务器的频繁请求(包括静态文件的读取,图片的读取)等都属于I/O问题。对于数据库的问题,首先要优化SQL,存储过程等。如果单表数据量过大要考虑做分割或者运用程序来控制分表。如果请求量过大,要考虑做集群。对于服务器(静态)文件的I/O问题,则可以考虑做CDN,这样也可以解决地域性问题。对于动态文件的访问,则涉及到代码优化及负载均衡两项。

  6. 具体应用优化: nginx针对访问量修改配置文件,调高Buffers 调低keep alive空连接时间等第三,安全方面1. 查看web\\mail等其它服务日志,是否存在被攻击现象: 针对安全方面加固

  7. 是否有其它攻击存在DDOS,WEB CC等

3、web应用
http返回状态码
200 请求成功
302,307 临时重定向
404 请求的资源在前端查明不存在(前端服务如:Apache等找不到请求的资源)
500 服务器的内部错误,程序错误(Apache等前端程序错误,未启动或错误配置)
503 服务暂时不可用(服务器的程序出现问题)

4、HTTP流程

1)用户输入域名–》DNS解析–》浏览器向服务器发起TCP连接(三次握手)
客户端发起HTTP请求–》服务器响应–》客户端向服务器发起tcp断开(四次挥手)

2)用户访问网站流程
用户输入域名,抵达防火墙
防火墙根据规则判断是否放行,通过tcp连接负载均衡器
负载均衡器,通过tcp连接到web服务器
web服务器解析内容
静态:由本地或nfs解析,获取图片等内容,根据调度算法返回给用户
动态:向后端缓存或数据库建立tcp连接
由数据库–》动态程序(Tomcat或php)–》缓存–》web–》负载均衡–》防火墙–》用户

5、为什么TCP是四次挥手?
因为服务端要确认一下,它发送的FIN和ACK包,客户端是否收到

为什么TCP是三次握手?
因为服务端收到SYN包之后,它向客户端发送的SYN和ACK包放在一个报文里面发送的

6、TCP三次握手
建立连接时,客户端向服务端发送SYN请求包,等待服务器确认
服务端收到请求,确认后,向客户端发送一个SYN+ACK包
客户端收到响应,给服务端发送一个ACK包,连接成功

TCP四次挥手
客户端发送一个FIN,用来关闭客户端和服务端的数据传送
服务端收到FIN后,发送一个ACK给客户端
服务端发送一个FIN,用来关闭服务端到客户端的数据传送
客户端收到FIN后,客户端发送一个ACK给服务端,断开连接

白话解释:

三次握手:
1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。

2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。

3)最后,发送方再回传一个带有ACK标志的数据包,代表我知道了,表示’握手‘结束。

syn和ack代表什么意思
URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:发起一个新连接。
FIN:释放一个连接。

7、能ping通公网,域名ping不通怎么回事?
没有配置正确的dns

8、两台服务器,有a机器和b机器,b开放了一个端口,你在a上怎么知道这个端口是否是通的
nmap telnet

软件

Nginx优化

1、你用过什么nginx模块?
access 基于ip的访问控制
stub_status nginx状态信息
log 日志
gzip 压缩
ssl 加密模块
upstream 定义服务器组
stream 四层代理

2、ssl加密实现

源码安装要添加openssl加密模块
颁发证书、创建私钥、生成证书、去掉私钥密码、修改配置文件(端口、配置证书位置、配置密钥位置)
重启生效

3、nginx的优化

1)修改配置文件方式优化
worker_processes 8; 工作进程数
worker_connections 65535; 每个进程最多连接数
proxy_connect_timeout 30; 代理和后端连接超时时间
proxy_send_timeout 60; 后端服务器传回代理的超时时间
proxy_read_timeout 60; 代理等待后端服务器的响应时间
proxy_buffering on; 启用缓存
其他:
1)隐藏版本号,在http{字段添加server_tokens off;},在php配置文件fastcgi_param字段后更改为nignx
如果编译安装前可以修改软件名称和版本号 src/core/nginx.h
2)设置工作进程个数,一般我们设置 CPU 的核心或者核心数 x2
worker_processes 4
3)设置 最多可以打开文件数
worker_rlimit_nofile 65535;
4)设置连接超时时间
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
5)gzip 调优
使用 gzip 压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约
成本,gzip on;
ngx_http_gzip_module 模块,apache 使用的是 mod_deflate
一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash 什么的不压缩,
同时也要注意,我们使用 gzip 的功能是需要消耗 CPU 的
6) expires 缓存调优
缓存,主要针对于图片,css,js 等元素更改机会比较少的情况下使用,特别是图片,占用
带宽大,我们完全可以设置图片在浏览器本地缓存 365d,css,js,html 可以缓存个 10 来天,
这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存
的拓展名列出来, Expires 缓存配置在 server 字段里面
7)防盗链
防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法
由几种: 1:水印,品牌宣传,你的带宽,服务器足够 2:防火墙,直接控制,前提是你知
道 IP 来源 3:防盗链策略 下面的方法是直接给予 404 的错误提示
8)内核参数优化
9)关于系统连接数的优化:
linux 默认值 open files 为 1024
新装的 linux 默认只有 1024 ,当作负载较大的服务器时,很容易遇到 error: too many open
files。/etc/security/limits.conf添加

4、nginx 有哪些进程?分别是干嘛的?
Master进程:master进程负责管理worker进程,并负责读取配置文件和判断文件语法的工作;是主进程,且只有一个。
Worker进程:worker进程有多个,它负责处理请求;worker的进程数量由管理员自己定义;

5、nginx的算法,ip_hash算法原理?
1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

2)weight(轮询权值)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }
3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
4)fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
{ server server1; server server2; fair; }
5)url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

6、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

nginx
web服务器、负载均衡器、代理服务器
高并发、低消耗
工作在七层、网络依赖小
调度算法:轮询、加权轮询、ip_hash、url_hash、fair响应时间分配

lvs
负载强、工作在四层、没流量
算法:轮询、加权轮询、加权最小连接数、目标地址哈希、源地址哈希、最小连接数、基于地址最小连接数、最少期望延迟、永不排队、基于地址带复制的最小连接数

lvs三种工作模式
NAT模式 客户-负载-web web-负载-客户
TUN模式
DR直接路由模式 客户-负载-web web-客户

HAproxy
工作在四层和七层、算法多、负载能力比nginx强、比lvs弱
算法:轮询、最小连接数、动态加权轮询、源地址哈希、基于uri的哈希、基于url的哈希

工作选择:
HAproxy和Nginx可以做七层的转发,所以URL和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,中小型公司并发量没那么大,选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器配置简单,所以中小型企业推荐使用HAproxy

7、怎么做高可用?

keepalived
vrrp 虚拟路由冗余协议
hsrp 热备份路由协议
router_id lb2 路由id
state BACKUP 状态
interface ens33 指定网卡
priority 99 优先级:备比主要小
192.168.8.254 虚拟路由ip,公共ip

8、什么是git+jenkins(CICD)持续集成?

作用:各个开发者的工作集合到gitlab代码仓库中 。主要目的:减少成本、使团队更加紧密结合,更好的协作,自动部署减少人工的交流。

git+jenkins(CICD)持续集成 工作流程
开发者更新代码–上传分支–提交合并分支请求
运维人员同意合并分支
gitlab触发webhook组件,通知jenkins代码已更新
jenkins关联gitlab之后将更新后的代码自动下载到jenkins本地服务器
并且自动执行脚本,将代码文件发送到web节点的网页目录中
实现持续集成

git+jenkins(CICD)持续集成 实现思路
安装gitlab,web界面创建用户、组,将用户添加到组中,创建项目基于组
gitlab生成密钥对,将公钥复制到web界面中的settings中
安装jenkins,修改配置文件,指定root用户,看情况修改端口
jenkins与gitlab互相进行私钥认证
jenkins web界面新建项目关联gitlab,实现自动下载最新代码功能
jenkins服务器编写脚本,jenkins web界面在项目中设置触发器
密钥令牌复制到gitlab上
实现持续集成

Tomcat
1、Tomcat如何配置多实例?

修改端口,不要冲突
8005 与其他web界面建立连接
8009 关闭服务
8080 服务端口

2、tomcat优化

安全优化:降权启动、端口保护、禁用管理
性能优化
内存优化
启动优化
连接数优化
线程数优化:默认最大200

3、用命令查看 tomcat 服务的进程号,并查看当前访问 tomcat 服务的连接数量和客户端IP 列表。

查看当前tomcat ps aux | grep tomcat
查看访问tomcat连接数 netstat -na|grep ESTAB|grep tomcat端口号|wc -l

Elasticsearch

1、Elasticsearch数据分层

1)先定义数据节点角色:热节点、温节点、冷节点
2)在ILM索引生命周期中实现由热节点迁移到温节点
3)迁移到冷节点,达到数据冷热分离

数据库

1、关系型数据库与非关系型数据库原理?

关系型:使用方便、好维护、sql语言通用、格式一致、可用复杂查询、存储安全性较高的数据
非关系型:格式灵活(键值对)、速度快、扩展性强、性能强

2、了解哪些数据库

答:mysql、Redis、oracle、SQL server。进一步询问(可能是他们公司用到的)mysql数据库版本,5.7;
都有哪些进程,默认端口号3306;SQL server呢?默认端口号1433;如果还继续问,有些不知道,就说我之前用的主要是mysql;SQL server有了解,文档笔记都有。

3、数据库常用备份工具
答:mysqldump和XBK(xtrabackup)

4、mysqldump和xtrabackup的区别
答:mysqldump是mysql自带无需安装,数据量少于50G的场景备份使用;xtrabackup第三方,需要安装,物理备份,备份效率高,数据量大于50G的场景备份使用

5、mysql忘记密码,破解

停掉mysql服务
跳过权限表
mysql登录
重新加载权限表
设置新密码

6、mysql慢日志、慢查询(优化过程中常用的工具日志)

修改主配文件
slow_query_log=1 开启
slow_query_log_file=/usr/local/mysql/data/slow.log 文件位置和名字
long_query_time=0.1 慢查询时间
log_queries_not_using_indexes 没走索引的语句也记录

通过mysqldumpslow第三方工具进行分析慢日志,查询慢日志

7、恢复数据流程

停业务、挂维护页面、找到备份文件、差异备份恢复、恢复全备曾备差异、验证数据、起业务撤维护页

8、mysql主从复制原理及有几种模式?

答:三种模式,基于SQL语句、基于内容、混合,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制;
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)创建一个二进制dump进程,binlog dump thread;
(2) slave的I/O线程将master的binary log events拷贝到它的中继日志(relay log);
(3) slave的SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db

9、mha高可用

实现步骤
配置密钥对,建立互信
所有节点安装mha_node
主库创建mha用户并赋权
任选一台从库安装mha_manager
mha_manager服务器创建配置文件目录、日志目录
编写mha配置文件(配置文件位置、日志位置、用户、密码、主从用户密码、数据库集群信息(ip、端口)等等)
ssh、repl主从 状态检查
开启mha

工作原理
MHA Manager可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave 上。MHA node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。

故障转移
mha通过masterha_manger脚本启动MHA的功能.
再mha启动之前,会自动检查ssh互信和repl主从状态
mha通过masterha_master_monitor脚本探测主库3次
无心跳之后,认为主库宕机

选主:强制--最新日志量--配置文件先后顺序数据补偿ssh能连	调用 save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点,恢复ssh无法连接	调用 apply_diff_relay_logs 脚本,计算从库的relaylog的差异,恢复到2号从库

10、atlas读写分离
安装atlas服务,进入cd /usr/local/mysql-proxy/conf
备份一份配置文件,修改配置文件,指定主写从读

mycat读写分离
需要java环境、安装mycat服务
设置环境变量
修改配置文件,指定主写从读

读写分离原理
读写分离就是主服务器上进行事务性操作,从服务器上进行select查询,主服务器上的操作会同步到从服务器,实现备份的同时也实现了数据库读写性能的优化,提升了数据库的安全

11、mysql优化
瓶颈优化:单服务器–多服务器–主从–mha–memcached缓存–读写分离–分库分表优化等等
查询读写次数来看数据库的压力
优化表:如果一个表很大,拆分成多个表,添加中间表
优化速度:禁用索引、禁用唯一性检查、使用批量插入

redis
1、持久化

RDB持久化
根据时间快照实现数据持久化
速度快、适合做备份、主从基于RDB实现
会有部分数据丢失
AOF持久化
记录所有写操作命令,服务启动时,重新执行这些命令还原数据
全部以redis协议的格式来保存,新命令追加文件末尾
可以最大程度保证数据不丢失、日志量比较大
redis支持的数据类型
string 字符串 session共享、计数(粉丝数、订阅、礼物)
hash 字典 做数据库缓存、存储变更数据(用户信息)
list 列表 消息队列、微博
set 集合 将共同关注、共同好友等待存储到一个集合
sorted set 有序集合 按条件排序的一种集合
2、redis主从原理
主库和从库开启rdb持久化
从库通过slaveof主库ip命令,连接主库,并发送sync给主库
主库收到后,立即触发bgsave,后台保存rdb,发送给从库
从库收到后会应用rdb快照
主库陆续将中间产生的新操作,保存并发给从库
至此,达到主从目的
3、redis-sentinel哨兵
功能:监控、自动选主、达到高可用、别的从库自动指向新主、应用透明、自动处理故障节点

缓存穿透
访问一个不存在的键值对、缓存不起作用、请求会穿透到DB、流量大时DB会挂掉
解决:采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的键值对、不存的键值对直接被过滤;访问键值对未在DB查询到值,也将空值写进缓存,单可以设置较短过期时间

缓存雪崩
大量的键值对设置相同的过期时间,导致缓存再同一时间全部失效,造成瞬间性DB请求量大、压力倍增、引起雪崩
解决:给缓存设置过期时间的同时加上一个随机值时间,让每个键值对的过期时间分布开来,不会集中再同一时间失效

缓存击穿
一个存在的键值对,再缓存过期的时候,同时有大量的请求,这些请求都会击穿到DB,造成DB请求量大,压力倍增
解决:访问键值对之前,采用setnx来设置另一个短期键值对,来锁住当前键值对的访问,访问结束再删除该短期键值对

4、redis 密码怎么设置?

在redis.conf 中 requirepass 123456
redis-cli -p 6379 -a 123456
auth 123456

虚拟化

docker

1、docker工作原理
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
Docker-Server接收到Docker-Client的指令,就会执行这个命令!

docker核心三大组件
Image代表镜像 container代表容器 repository代表仓库

2、为什么docker比虚拟机块
1)docker使用的cpu、内存等硬件资源都是直接使用物理机的硬件
2)docker使用的系统内核也是宿主机的。docker新建一个容器时,不需要重新加载一个系统内核,避免引导。而新建虚拟机时,得加载系统内核,就很费时间

传统虚拟化和docker虚拟化的区别
传统虚拟化:原生架构、完全性解藕、系统占用率高、占用资源较多
docker虚拟化:寄生架构、半解藕、进程级的服务、快捷方便、占用资源少、拥有较好的资源隔离、资源限制,性能强。

namespace(名称空间)
六大隔离-------实现了容器与宿主机、容器与容器之间的隔离
IPC:共享内存
MNT:挂载点、文件系统
NET:网络栈
PID:进程编号
USER:用户、组
UTS:主机名、域名
s
cgroup(控制组)
四大功能-------限制docker容器对宿主机资源的使用
1.资源限制:对进程组使用的资源总额进行限制
2.优先级分配:通过分配cpu时间片和硬盘io带宽大小,控制了进程运行的优先级
3.资源统计:统计资源使用量,比如cpu使用时间、内存使用量等。
4.进程控制:可以对进程组进行挂起、恢复等操作

docker命令
docker search nginx 查找镜像
docker images 查看本地镜像
docker pull nginx 下载镜像
docker save -o nginx.tar nginx 把镜像导出到本地
docker load -i nginx.tar 把本地镜像包导入镜像
docker ps 查看运行中的所有容器
docker ps -a 查看所有容器(运行和非运行)
docker run -itd --name ngx nginx 运行一个容器
docker rmi nginx 删除镜像
docker rm -f nginx 强制删除容器

镜像分层:容器层、镜像层、主机层

Dockerfile常用指令
FROM 基于哪个镜像***
RUN 构建镜像时运行的shell命令***
CMD 运行容器时执行的shell命令***
EXPOSE 声明容器的服务端口 ***
ENV 设置容器环境变量***
COPY 拷贝文件或目录到容器内,不具备自动下载或自动解压***
ADD 拷贝文件或目录到镜像(URL或压缩包会自动下载或自动解压)
VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器

docker私有镜像仓库(私仓)docker hub
registry官方提供的工具,用来搭建私仓
harbor是企业级的私仓,可以理解为registry的升级版,拥有很好的web UI界面、角色和用户权限管理,用户操作审计等
*别的服务器想使用harbor拉去镜像,需要修改配置文件
vim /usr/lib/systemd/system/docker.service
–insecure-registry 192.168.1.100
*使用harbor需要下载docker-compose命令
例:上传私有镜像
docker tag nginx:latest 192.168.1.100/bdqn/nginx:v1.0
docker push 192.168.1.100/bdqn/nginx:v1.0
例:拉去harbor内的镜像
docker pull 192.168.1.100/bdqn/nginx:v1.0

docker网络
单主机网络:
1.none 除了lo,没有其他网卡。(与外界隔绝,安全)(–network none)
2.host 共用宿主机网卡(不隔离ip、端口),性能好(–network host)
3.bridge桥接 docker进程启动,宿主机创建docker0虚拟网桥,容器连接docker0(docker默认网络模式)
4.自定网络brdige 基于桥接
-d bridge my_net 创建
–subnet 172.20.16.0/24 指定网段
–gateway 172.20.16.1 my_net 指定网关
5.join容器(共享网络协议栈)
新容器和已创建的容器共享网络(ip、端口)
别的都正常隔离
–network container:name(已创建的容器名)

跨主机网络
1.overlay
环境限制
必须安装键值对存储服务(consul、etcd、ZooKeeper)
安装docker engine
hostname不同
步骤:
docker01安装consul服务
docker02、03修改配置文件,添加到conusl中, docker02自定义网络
docker network create -d overlay ov_net1
2.macvlan 性能极好

docker编排工具
1.docker-compose
2.docker swarm

k8s

1、k8s组件
apiserver 所有服务访问的统一入口
controller-manager 负责集群的状态,故障检测,自动扩展,滚动更新等
scheduler 负责调度任务,选择合适的节点进行分配
etcd 键值对数据库 存储k8s集群信息(持久化)
kubelet 直接和容器引擎交换 实现容器的生命周期管理
kube-proxy 负责写规则到iptables或ipvs实现服务映射访问
crontroller manager 维持副本期望值

clusterip
是虚拟ip,外网ping不通,只供k8s集群内部,有点像网关

nodeport
创建nodeport类型的service,然后给每个node都打开一个相同的端口,工具端口走的流量具体找到service

ingress
通过一个公网ip来发布很多服务 根据相对于的域名来找服务 不用暴露端口

2、k8s原理
我们通过kubectl向k8s Master发出指令。kubernetes Master主要是提供API Server、Scheduler、Controller组件,接收kubectl的命令,从Node节点获取Node的资源信息,并发出调度任务。Node节点提供kubelet、kube-proxy,每个node节点都安装docker,是实际的执行者。kubernetes不负责网络,所以一般是用flannel或者weave。etcd负责服务发现和node信息存储

3、基本流程(简单易懂)
1)用户调教创建pod请求
2)通过apiserver处理用户请求,存储pod数据到etcd
3)schedule尝试给pod绑定node
4)scheduler检测到新pod后,结果主机过滤、主机打分规则后,选择主机,将新pod绑定到合适的主机
5)kubelet根据调度结果执行pod创建操作

2、select查询语言结构

答:例如:select count(*) from information_schema.COLUMNS

3、

创建表:create table bs(user_name char(30),score decimal(5,2),id int,primary key (user_name));
1)复杂表:create table bs(id int,age int(3),sex varchar(10),address varchar(120),tel varchar(11),primary key AUTO_INCREMENT (id));

插入数据:insert into bs values(‘A’,55,1);

4)插入数据:insert into bs values(4,‘D’,18,‘girl’,114,‘da xue’);

  1. 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”
    update bs set academic=‘da zhuan’ where tel like ‘11%’;

改表结构:

删除主键:alter table bs drop primary key;添加主键:alter table bs drop primary key(code);

3)删除表结构一列表信息:

6)删除学生表的数据,姓名以C开头,性别为’男’的记录删除
delete from bs where name like ‘c%’ and sex=‘boy’;

alter table bs drop address;

2)改:表头添加一列学历项,alter table bs add academic varchar(10) after tel;

查:
表结构desc bs;
查询A用户成绩最高得分,select user_name,score from bs where user_name=‘A’ order by score desc limit 1;
去重复:select distinct user_name from bs where score group by user_name;

查询每个学生最高成绩的结果集:select * from bs3 where score in (select max(score) from bs3 group by user_name);

  1. 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号显示出来

select id,name from bs where age<22 and academic=‘da zhuan’;

  1. 查询学生表的数据,查询所有信息,列出前3条记录
    select * from bs limit 3;

  2. 查询出所有学生的姓名,性别,年龄降序排列
    select name,age,sex from bs order by age desc;

学生表:

1.列出数学成绩不及格的学生姓名,并按年龄从小到大排序
select student.name,score.score,student.age from student join score on student.code=score.code where score.class=‘数学’ and score.score<60 order by student.age ;

2.赵四的数学成绩为90分,需要在成绩表中补录;
insert into score(sn,code,class,score) values(8,97002,‘数学’,90);

3.给数学不及格的学生成绩每人加5分
update score set score=score + 5 where class=‘数学’ and score<60;

4.列出平均分高于75分的考试课程
select class from score group by score.class having avg(score) > 75;

5.删除学生表中重复记录,相同记录只保留一条。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EXveGERA-1638936946321)(C:\\Users\\GRAPHIC\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211130100612820.png)]

分析:查看包含重复姓名的记录都有哪些?

select name from student group by name having count(name)>1;

嵌套语句删除:

DELETE
FROM
student
WHERE
name IN ( SELECT t.name FROM ( SELECT name FROM student GROUP BY name HAVING COUNT( 1 ) > 1 ) t )
AND Code NOT IN (
SELECT
dt.mincode
FROM
( SELECT MIN( code ) AS mincode FROM student GROUP BY Name HAVING COUNT( 1 ) > 1 ) dt
)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vcW2xvsu-1638936946322)(C:\\Users\\GRAPHIC\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211130100707465.png)]

扩展:

删除名字为孙的成员;

delete from student where name=‘孙’;

user

1.7月1日以前数据的status更改为0

update user1 set status=0 where time < ‘2017/7/1’;

update user1 set status=0 where time between ‘2017-01-01 00:00:00’ and ‘2017-07-01 00:00:00’ ;

2.查询Ydbg用户发送成功的数量

select user2.username,count(user1.status) from user1 join user2 on user1.userid=user2.userid where user2.username=‘Ydbg’;

3.查询每个用户发生的成功数、失败数、未回执数。

select user1.userid=

12.1课上测试

1

命令

1、什么安装方式安装软件?
源(源码安装)、二(二进制安装)、yum(rpm包安装);

2、二进制方式安装软件方法?

1)压缩源码包,进入包目录,一般都会有README文件和INSTALL文件。该文件里面有如何安装的说明和注意事项

2)创建生成makefile文件,置安装目录。该文件其实是由configure脚本借助makefile.in模版文件生成的

3)make命令进行译,该步骤调用gcc编译器将源码编译成可执行文件

4) make install命令会把编译完成的数据复制到指定的目录中去

3、MySQL做成系统服务

1)进入解压出来的文件夹,看看里面有没有这个文件 support-files/mysql.server

2)cp support-files/mysql.server /etc/init.d/mysqld

3)chkconfig --add mysqld

4)chkconfig mysqld on

5)就可以变成系统服务,你可以在ntsysv里面看到。

6)解压出来应该有几个默认的 .cnf ,查看一下 ls *.cnf

4、在无网的环境下,解决依赖环境
配置本地yum源

Linux系统设置环境变量(永久生效和临时生效)
答:
临时生效:命令行下直接使用命令[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的。

永久生效:用VI在文件/etc/profile文件中增加变量,
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib;要马上生效运行source /etc/profile

重点
企业实训技能知识要点

系统运维命令

1、查看进程:ps -aux 或-ef
2、设置权限:赋权chmod a+wrx 设置属主、属组:chown
3、监控系统状态:top 磁盘io iotop,sar
4、Linux系统设置环境变量:
临时生效:命令行下直接使用命令[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的。

永久生效:用VI在文件/etc/profile文件中增加变量,例如:Tomcat添加到系统环境
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib;要马上生效运行source /etc/profile

网络

1、网络卡顿后的排查思路(网站卡顿)
硬件 服务器,交换机,网线,网卡;软件
第一,用5分钟排除网络因素,借助工具(如pagespeed)分析页面加载过程

  1. 某个元素或者图片加载过慢: 具体原因具体分析

  2. DNS解析时长问题: 可以通过购买解析服务, 来让自己的域名在各地DNS更多缓存

  3. 网络带宽瓶颈: 考虑增加带宽

  4. 网络线路波动: 考虑CDN,或者镜像站第二,要考虑到服务器问题1. 是否有服务器过载: 考虑增加硬件

  5. I/O操作:数据库的频繁读写,服务器的频繁请求(包括静态文件的读取,图片的读取)等都属于I/O问题。对于数据库的问题,首先要优化SQL,存储过程等。如果单表数据量过大要考虑做分库、分表。如果请求量过大,要考虑做集群。对于服务器(静态)文件的I/O问题,则可以考虑做CDN,这样也可以解决地域性问题。对于动态文件的访问,则涉及到代码优化及负载均衡两项。

  6. 具体应用优化: nginx针对访问量修改配置文件,调高Buffers 调低keep alive空连接时间等第三,安全方面1. 查看web\\mail等其它服务日志,是否存在被攻击现象: 针对安全方面加固

  7. 是否有其它攻击存在DDOS,WEB CC等

2、命令:
网络流量 ifconfig +参数
用户链接状态 netstat
查看路由表 route
端口嗅探 A点到B点或一个网段 nmap
数据抓包 tcpdump 分析软件 大白鲨

用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

3、网络安全
firewall
开放端口 禁用ip 端口 结合脚本做安全防护

数据库

1、mysql
安装部署集群:
主从复试(3种模式)
双主+防脑裂
mha(哨兵) + 读写分离 分库分表(mycat,atlas)
增删改查:create、insert、delete、drop、alter、update、select
多表联查:

2、redis
单机多实例搭建
持久化
主从
主从从
哨兵

3、mengoDB 安装部署高可用

开源软件

1、nginx

nginx优化

1)修改配置文件方式优化
worker_processes 8; 工作进程数
worker_connections 65535; 每个进程最多连接数
proxy_connect_timeout 30; 代理和后端连接超时时间
proxy_send_timeout 60; 后端服务器传回代理的超时时间
proxy_read_timeout 60; 代理等待后端服务器的响应时间
proxy_buffering on; 启用缓存

2)设置工作进程个数,一般我们设置 CPU 的核心或者核心数 x2
worker_processes 4
3)设置 最多可以打开文件数
worker_rlimit_nofile 65535;
4)设置连接超时时间
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
5)gzip 调优
使用 gzip 压缩功能,节约带宽,加快传输速度,有更好的体验,也为我们节约
成本,gzip on;
ngx_http_gzip_module 模块,apache 使用的是 mod_deflate
一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash 什么的不压缩,
同时也要注意,我们使用 gzip 的功能是需要消耗 CPU 的
6) expires 缓存调优
缓存,主要针对于图片,css,js 等元素更改机会比较少的情况下使用,特别是图片,占用
带宽大,我们完全可以设置图片在浏览器本地缓存 365d,css,js,html 可以缓存个 10 来天,
这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存
的拓展名列出来, Expires 缓存配置在 server 字段里面
7)隐藏版本号,在http{字段添加server_tokens off;},在php配置文件fastcgi_param字段后更改为nignx,如果编译安装前可以修改软件名称和版本号 src/core/nginx.h

其他:
8)防盗链
防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法
有几种: 1:水印,品牌宣传,你的带宽,服务器足够 2:防火墙,直接控制,前提是你知
道 IP 来源 3:防盗链策略 下面的方法是直接给予 404 的错误提示
9)内核参数优化
10)关于系统连接数的优化:
linux 默认值 open files 为 1024
新装的 linux 默认只有 1024 ,当作负载较大的服务器时,很容易遇到 error: too many open
files。/etc/security/limits.conf添加

常用模块:
access 基于ip的访问控制
stub_status nginx状态信息
log 日志
gzip 压缩
ssl 加密模块
upstream 定义服务器组
stream 四层代理

ssl加密实现
源码安装要添加openssl加密模块
颁发证书、创建私钥、生成证书、去掉私钥密码、修改配置文件(端口、配置证书位置、配置密钥位置)
重启生效

算法

1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

2)weight(轮询权值)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }
3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
4)fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
{ server server1; server server2; fair; }
5)url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
nginx结合tomcat动静分离
nginx 处理静态页面(html,htm,jpg,png,css)

tomcat 处理动态页面 (jsp jiavaweb)

2、tomcat
tomcat优化
修改bin/catalina.sh。在#OS_specific_support下添加JAVA_OPTS=“-server -Xms8192M -Xmx8192M -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/javamemorylogs/dump -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/usr/local/javamemorylogs/gclog -XX:+DisableExplicitGC”
-Xms8192m:设置JVM最小内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx8192m:设置JVM最大可用内存。

监控软件

1、zabbix

自定义监控项:
1)zabbix怎么用的
能够自定义添加监控项、并且设置触发器,然后通过报警媒介选好报警类型及收件人,授权码等信息,实现自动报警功能,并且在zabbix web 界面,设置图形化,添加聚合图形,以更人性化的方式展现。

2)写过什么监控项?自定义监控项
nginx的自定义监控项,在zabbix服务端/etc/zabbix/zabbix_agent.d/下编辑conf文件(自定义监控项),活跃连接数–正在读取–等待的–写入的–处理的(键值对方法),zabbix web界面添加自定义监控项

3)报警怎么实现的?
启动report–右上角用户–报警媒介–收件人–地址
管理–报价媒介类型–email–SMTP服务器–端口–收件人–授权码

2、Prometheus

模板
结合邮箱报警

自动化运维

1、shell
shell如何将命令执行到哪一步显示到屏幕?
选项:sh -x

2、ansibe

1)一键部署
2)一键集群硬盘扩容,缩容

CICD
1、作用:各个开发者的工作集合到gitlab代码仓库中 。主要目的:减少成本、使团队更加紧密结合,更好的协作,自动部署减少人工的交流。

2、git+jenkins(CICD)持续集成 工作流程
开发者更新代码–上传分支–提交合并分支请求
运维人员同意合并分支
gitlab触发webhook组件,通知jenkins代码已更新
jenkins关联gitlab之后将更新后的代码自动下载到jenkins本地服务器
并且自动执行脚本,将代码文件发送到web节点的网页目录中
实现持续集成

3、git+jenkins(CICD)持续集成 实现思路
安装gitlab,web界面创建用户、组,将用户添加到组中,创建项目基于组
gitlab生成密钥对,将公钥复制到web界面中的settings中
安装jenkins,修改配置文件,指定root用户,看情况修改端口
jenkins与gitlab互相进行私钥认证
jenkins web界面新建项目关联gitlab,实现自动下载最新代码功能
jenkins服务器编写脚本,jenkins web界面在项目中设置触发器
密钥令牌复制到gitlab上
实现持续集成

docker

1、企业应用容器化

云计算运维工程师

k8s
1、各组件在集群中的作用,原理 ,常用资源类型 dp,rc,rs,ds,svc,ingress。

1)etcd:提供数据库服务保存了整个集群的状态
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
cloud-controller-manager:是与底层云计算服务商交互的控制器
kub-scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理
kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则
container-runtime:是负责管理运行容器的软件,比如docker

2)问题:rc/rs功能是怎么实现的。详述从API接收到一个创建rc/rs的请求,到最终在节点上创建pod的全过程,尽可能详细。另外,当一个pod失效时,kubernetes是如何发现并重启另一个pod的?
Replication Controller 可以保证Pod始终处于规定的副本数。
而当前推荐的做法是使用Deployment+ReplicaSet。
ReplicaSet 号称下一代的 Replication Controller,当前唯一区别是RS支持set-based selector。
RC是通过ReplicationManager监控RC和RC内Pod的状态,从而增删Pod,以实现维持特定副本数的功能。
RS也是大致相同。

2、master上的那些组件作用 kube-proxy----iptabes(ipvs)
问题:详述kube-proxy原理,一个请求是如何经过层层转发落到某个pod上的整个过程。请求可能来自pod也可能来自外部。

kube-proxy部署在每个Node节点上,通过监听集群状态变更,并对本机iptables做修改,从而实现网络路由。 而其中的负载均衡,也是通过iptables的特性实现的。

另外我们需要了解k8s中的网络配置类型,有如下几种:
hostNetwork Pod使用宿主机上的网络,此时可能端口冲突。
hostPort 宿主机上的端口与Pod的目标端口映射。
NodePort 通过Service访问Pod,并给Service分配一个ClusterIP。

3、ks8 pod类型 dp控制的,自主创建的。pod创建流程

1)问题:deployment/rs有什么区别。其使用方式、使用条件和原理是什么。

deployment是rs的超集,提供更多的部署功能,如:回滚、暂停和重启、 版本记录、事件和状态查看、滚动升级和替换升级。
如果能使用deployment,则不应再使用rc和rs。

4、日志查看,排查 event事件

查看tech命名空间下的pod名称为tech-12ddde-fdfde的日志,并显示最后30行
kubectl logs tech-12ddde-fdfde -n tech|tail -n 30

5、k8s 标签选择调度某个节点,污点是什么。

实施工程师

1、从项目立项 到交付 实施流程 你在里面负责那些,干那些活。
1》跟客户商量有什么需求,用户需求不明确:我们提供测试用例,得到用户的认可,形成用户边界
用户需求明确: 明确客户的环境是否满足我们的测试条件
明确客户需求是否在我们的测试用例里面

2》与客户确认测试,定稿,然后测试环境尽量一次协调完整,有自己的的环境可以模拟测试,在客户现场测试 的功能要现在公司测试环境

3》本次部署是否按正式上线规模部署,仅功能测试:单台部署根据实施方案测试功能即可
正式部署:系统安装,根据客户正式上线所需的服务器天数及配置
软件–软件安装,根据客户准备正式上线所准备的服务器台数合理规划每台服务器要安装那些服务

4》了解到用户实际情况和需求出具体项目测试和实施方案,用户需求分析,产品实施方案,客户提供的硬件设备,参与项目人的清单,根据实施方案模板编写

5》于客户沟通号定稿的测试和实施方案后与客户预约测试时间和地点

6》现场测试,按照测试实施方案中用户的需求部分逐个实现并记录,产品的亮点演示

7》测试实施完成后形成报告,服务器部署信息,注意说明功能实现情况,是否与用户需求有差异如果存在差异用户是否接受,未满足的需求做详细说明,需要定制实现的功能需要做记录(描述实现逻辑,开发部门及人员,更换了那些文件)

2、产品实施流程:
1)销售交流
2)售前技术交流(售前技术工程师)
3)需求分析与技术应答
4)现场测试
5)正式实施
6)验收
7)维保(售后技术支持)

1、工作中遇到过什么问题?
1)服务

1、没接触过的知识,大胆承认

没了解过,可以学一下,请教一下您
git+jenkins+harbor+kubernetes

2、给你个项目,你需要多长时间?三天能将规划方案做下来。

3、你是本科学历吗?
是民教本科,有学信网可查的大专在读;外包公司不在乎学历,你直接说;
入学:入学时间 2010-09-01 毕业时间 2014-07-01

4、每个库多大的数据量
十几个G;

5、有多少个库?多少个表?
每天1、2G;有许多库和表;我负责6个库,5张表

6、k8s
4台服务器搭建测试

7、gzip对哪些做压缩,哪些不做

8、Nginx常用模块

9、遇到过什么问题?
网站访问过慢。应用优化:
安全方面:查看Nginx日志

shell、docker

10、上社保了吗?
没上,我们公司小;了解他们公司背景,到时候问,我来了干嘛?是尽快上手吗?表现出对工作很在意

11、聊天
用专业术语聊,不要说没用的,两年运维,一年实施经验,接受出差,民教本科,学信网可查大专在读(复习知识了解ERP)

12、你具体负责的是什么?
主要产品是一个电子公文软件,tar包解压安装,.tar命令是tar xvf,若.tar.gz则要换成tar zxvf

主要负责软件产品部署,解决遇到的问题,负责过军工项目081项目,1、建立项目产品部署方案
2、 提高工作效率 优化部署的产品,从http方式改进为https,并编写脚本,加快部署
个人擅长学习与客户沟通,学习能力抗压能力强。

你解决过什么问题?
docker