我叫xxx,今年xx岁,来自山东聊城,毕业于聊城大学东昌学院;
上家公司就职于xxx,在公司主要负责系统维护,
保证服务7*24小时稳定运行,
ELK日志的收集,
zabbix监控报警的处理,
协助开发进行代码上线,
给开发部署所需要的环境,
完成领导安排的其他任务。
上家公司领导对我很照顾,
虽然距离家比较近,
我也还年轻,
不想这么早就安逸下来。
二线和一线城市也是有一定的差距,
对云计算领域比较感兴趣,
想来xx发展,
沉淀自己的技术。
tcp/ip协议一共有四层,对应osi的七层网络模型,tcp工作在传输层,
主要有tcp和udp协议。其中tcp是可靠协议,udp是不可靠协议。 tcp传输之前,需要建立连接,通过三次握手实现。
三次握手过程
第一次握手:
发送请求连接控制字段syn , 请求建立连接 (客户端 — 服务端)
根据数据包编号发送数据 seq=x
第二次握手:
发送确认控制字段ack 和 请求连接控制字段 syn (服务端 — 客户端)
根据数据包编号进行确认 ack=x+1
根据数据包编号发送数据 seq=y
第三次握手:
发送确认控制字段ack (客户端 — 服务端)
根据数据包编号进行确认 ack=y+1
根据数据包编号发送数据 seq=x+1
四次挥手过程
第一次挥手:
发送请求断开控制字段fin 和 确认控制字段 (客户端 — 服务端)
第二次挥手:
发送确认控制字段ack (服务端 — 客户端)
第三次挥手:
发送请求断开控制字段fin 和 确认控制字段 (服务端 — 客户端)
第四次握手:
发送确认控制字段ack (客户端 — 服务端)
三次握手涉及到的状态集(五种)
客户端初始状态:closed
服务端初始状态:closed—listen
第一次握手:发送syn信息 客户端----服务端
客户端 closed — syn_sent
第二次握手 发送syn ack信息 服务端—客户端
服务端状态: listen—syn_rcvd
第三次握手:发送ack信息 客户端–服务端
客户端状态:syn_sent ---- established
服务端状态 syn_rcvd — established
四次挥手涉及到的状态集(六种)
客户端初始化状态:established
服务端初始化状态:established
正常情况:
第一次挥手:发送fin ack 信息 客户端—服务端
客户端:fin_wait1
第二次挥手:发送ack信息 服务端—客户端
服务端状态:established ---- close_wait
客户端状态:fin_wait1 — fin_wait2
第三次挥手:发送fin ack信息 服务端—客户端
服务端状态:close_wait — last_ack
第四次挥手:发送ack信息 客户端—服务端
客户端状态:fin_wait2 – time_wait
服务端状态:last_ack —closed
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;
我们自己测了都没问题,只是这个客户访问有问题,
那肯定是要先联系到这个客户,能远程最好,
问一下客户的网络是不是正常的,访问其它的网站有没有问题(比如京东、百度什么的)。
如果访问其它网站有问题,那叫客户解决本身网络问题。
如果访问其它网站都没问题,用ping和nslookup解析一下我们的网站是不是正常的,
让客户用IP来访问我们的网站是否可行,如果IP访问没问题,
那就是客户的DNS服务器有问题或者DNS服务器解析不到我们的网站。
还有一种可能就是跨运营商访问的问题,
比如我们的服务器用的是北方联通、而客户用的是南方移动,就也有可能突然在某个时间段访问不到,
这种情况在庞大的中国网络环境中经常发生(一般是靠CDN解决)。
还有可能就是我们的网站没有SSL证书,在公网是使用的是http协议,
这种情况有可能就是没有用https协议网站被运营商劫持了。
桌面系统(6/GNOE2.x、7/GNOME3.x)、
文件系统(6/ext4、7/xfs)、
内核版本(6/2.6x、7/3.10x)、
防火墙(6/iptables、7/firewalld)、
默认数据库(6/mysql、7/mariadb)、
启动服务(6/service启动、7/systemctl启动)、
网卡(6/eth0、7/ens192)等。
如果是单一应用的服务器,只需要用iftop、sar等工具统计网卡流量就可以。
如果服务器跑了多个应用,可以使用nethogs工具实现,
它的特别之处在于可以显示每个进程的带宽占用情况,
这样可以更直观获取网络使用情况。
发布:jenkins配置好代码路径(SVN或GIT),
然后拉代码,打tag。
需要编译就编译,
编译之后推送到发布服务器(jenkins里面可以调脚本),
然后从分发服务器往下分发到业务服务器上。
input、output两大块配置;
input中指定日志(type、path)等,
output指定日志输出的目标(host、port)等。
用过ansible的(copy file yum ping command shell)等模块;
ansible默认只会创建5个进程,所以一次任务只能同时控制5台机器执行.
那如果你有大量的机器需要控制,或者你希望减少进程数,
那你可以采取异步执行.
ansible的模块可以把task放进后台
,然后轮询它.
这使得在一定进程数下能让大量需要的机器同时运作起来.
常用的有3种调度算法(轮询、ip hash、权重)。
轮询:upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
权重:指定轮询几率,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。
用到过(负载均衡upstream、反向代理proxy_pass、location、rewrite等)。
proxy模块中配置过:proxy_set_header、proxy_connect_timeout、proxy_send_timeout、proxy_buffer_*
iptables是工作在TCP/IP的2、3、4层。
当主机收到一个数据包后,数据包先在内核空间中处理,
若发现目的地址是自身,
则传到用户空间中交给对应的应用程序处理,
若发现目的不是自身,则会将包丢弃或进行转发。
4张表(raw表、mangle表、net表、filter表)
5条链(INPUT链、OUTPUT链、PORWARD链、PREROUTING链、POSTROUTING链)。
全部设置为DROP:
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
echo "1" > /proc/sys/net/ipv4/ip_forward
last : 相当于Apache的[L]标记,表示完成当前的rewrite规则
break : 停止执行当前虚拟主机的后续rewrite指令集
redirect : 返回302临时重定向,地址栏会显示跳转后的地址
permanent : 返回301永久重定向,地址栏会显示跳转后的地址
301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解:
last一般写在server和if中,而break一般使用在location中
last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后匹配
break和last都能组织继续执行后面的rewrite指令
一般会用到if语句、for语句、while语句、case语句以及function函数的定义;
case语句为多选择语句,可以用case语句匹配一个值与一个模式,
如果匹配成功,执行相匹配的命令。
最典型的case语法会用到启动服务脚本的处理。
这个命令就很多了,比如:lscpu(查看cpu信息)、
free -m(查看内存信息)、
df -h(查看硬盘分区信息)、
top(还可以动态查看cpu、内存使用情况的信息),
/proc/目录下也可以查看很多硬件信息。
awk -F':' '{print $2}' tset.txt
grep -C 1 -i "error" catalia.out
参数-C:是匹配前后的行,后面1是匹配前后各1行
crontab -e,最小单位是分钟
正常来说,一般会把监控的服务器统一加入到一个模板中,
修改模板的其是某一项的监控项参数和告警阈值后,
加入模板中的所有主机都会同步。
如果单独想修改其中某一台服务器内存告警阈值,需要进入这台主机
单独创建一个告警Triggers,关联这台主机监控内存的项,
配置好告警的阈值为60%即可实现。
1.change master to 时,ip pot user password binlog position写入到master.info进行记录
2. start slave 时,从库会启动IO线程和SQL线程
3.IO_T,读取master.info信息,获取主库信息连接主库
4. 主库会生成一个binlog DUMP线程,来响应从库
5. IO_T根据master.info记录的binlog文件名和position号,请求主库DUMP最新日志
6. DUMP线程检查主库的binlog日志,如果有新的,TP(传送)给从从库的IO_T
7. IO_T将收到的日志存储到了TCP/IP 缓存,立即返回ACK给主库 ,主库工作完成
8.IO_T将缓存中的数据,存储到relay-log日志文件,更新master.info文件binlog 文件名和postion,IO_T工作完成
9.SQL_T读取relay-log.info文件,获取到上次执行到的relay-log的位置,作为起点,回放relay-log
10.SQL_T回放完成之后,会更新relay-log.info文件。
11. relay-log会有自动清理的功能。
细节:
12.主库一旦有新的日志生成,会发送“信号”给binlog dump ,IO线程再请求
w命令查看上次服务器启动时间。last命令 查看登录。
redis主从复制原理
1.从节点发送同步请求到主节点
2.主节点接收到从节点的请求之后,做了如下操作
- 立即执行bgsave将当前内存里的数据持久化到磁盘上
- 持久化完成之后,将rdb文件发送给从节点
3.从节点从主节点接收到rdb文件之后,做了如下操作
- 清空自己的数据
- 载入从主节点接收的rdb文件到自己的内存里
4.后面的操作就是和主节点实时的了
哨兵的原理
1、代码连接哨兵的IP地址列表
2、哨兵去查询谁是当前的master节点,返回给代码 主节点的ip地址
3、代码拿到IP地址之后,去连接master
redis集群原理
redis 3.0版本之前是不支持集群的,官方推荐最大的节点数量为1000,
至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,
可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。
集群可以将数据自动切分(split)到多个节点,当集群中的某一个节点故障时,
redis还可以继续处理客户端的请求
切库
单机情况下用select 2可以切换第2个库,select 1可以切换第1个库
aof和rdb的区别
RDB: 类似于快照,当前内存里的数据的状态持久化到硬盘
优点:压缩格式/恢复速度快
缺点:不是实时的,可能会丢数据,操作比较重量
AOF:类似于mysql的binlog,可以设置成每秒/每次操作都以追加的形式保存在日志文件中
优点:安全,最多只损失1秒的数据,具备一定的可读性
缺点:文件比较大,恢复速度慢
1、redis没有设置密码被入侵
2、服务在未关闭状态下强制卸载导致整个服务器的环境全部出现问题,无奈重装
3、
根据这种现象有可能是:
服务器磁盘满了;
文件格式破坏了;
或者你用的是普通用户上传,正好上传的目录没有权限;
还有可能就是你上传的文件大小超出了该目录空间的范围。
写过mysql、redis、mongodb等数据库备份的脚本;
服务器文件备份的脚本;
日常代码发布的脚本;
rsync是远程同步工具、inotify是一种强大的异步文件系统系统监控机制。
通过inotifywait 中的-m参数可以实现“始终保持事件监听状态”。
rsync中的-delete参数是指“ 删除那些DST中SRC没有的文件”。
awk '{print $1}' access.log| sort | uniq -c |sort -rn -k 1 | head -1
好处:在内存不够用的时候,
将部分内存上的数据交换到swap空间上,
以便让系统不会因为内存不够用而导致oom或者更致命的情况出现。
什么情况下会用swap:当系统的物理内存不够用的时候,
就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。
那些被释放的空间可能来自一些很长时间没有什么操作的程序,
这些被释放的空间被临时保存到swap空间中,等到那些程序要运行时
,再从swap中恢复保存的数据到内存中。
这样,系统总是在物理内存不够时,才进行swap交换。
在生产中不用swap
不能用ping,那可以用telnet对方服务器的端口、或者互相访问对方打开的服务。
用tracert命令就可以跟踪,主要是查询本机到另一个主机经过的路由跳数及数据延迟情况。
问清楚反应的人哪个服务应用或者页面调取哪个接口慢,
叫他把页面或相关的URL发给你,
首先,最直观的分析就是用浏览器按F12,
看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),
如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。
其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,
最好用tail -f 跟踪一下日志,当然你也要点击测试来访问接口日志才会打出来。
最后,排除sql,找到sql去mysql执行一下,看看时间是否很久,
如果很久,就要优化SQL问题了,expain一下SQL看看索引情况啥的
,针对性优化。数据量太大的能分表就分表,
能分库就分库。如果SQL没啥问题,那可能就是写的逻辑代码的问题了,
一行行审代码,找到耗时的地方改造,优化逻辑。
比如可以用sed命令,格式为:sed -n '/起始时间/,/结束时间/p' 日志文件
部署过,没有深入研究过,一般mongodb部署主从、或者mongodb分片集群;
建议3台或5台服务器来部署。MongoDB分片的基本思想就是将集合切分成小块。
这些块分散到若干片里面,每个片只负责总数据的一部分。
对于客户端来说,无需知道数据被拆分了,也无需知道服务端哪个分片对应哪些数据。
数据在分片之前需要运行一个路由进程,进程名为mongos。
这个路由器知道所有数据的存放位置,知道数据和片的对应关系。
对客户端来说,它仅知道连接了一个普通的mongod,在请求数据的过程中,
通过路由器上的数据和片的对应关系,路由到目标数据所在的片上,
如果请求有了回应,路由器将其收集起来回送给客户端。
Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。
进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:
Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;
Tomcat作为独立服务器:请求来自于web浏览器;
在生产环境下,不管是应用数据、还是数据库数据
首先在部署的时候就会有主从架构、或者集群,这本身就是属于数据的热备份;
其实考虑冷备份,用专门一台服务器做为备份服务器,
比如可以用rsync+inotify配合计划任务来实现数据的冷备份,
如果是发版的包备份,正常情况下有台发布服务器,
每次发版都会保存好发版的包。
LVS是Liunx虚拟服务器的简称,利用LVS提供的负载均衡技术和linux操作系统可实现高性能、高可用的服务器集群,
一般LVS都是位于整个集群系统的最前端,由一台或者多台负载调度器(Director Server)组成,分发给应用服务器(Real Server)。
它是工作在4层(也就是TCP/IP中的传输层),
LVS是基于IP负载均衡技术的IPVS模块来实现的,
IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR
NAT
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,
调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,
同时报文的目标端口也改成选定的Real Server的相应端口,
将报文请求发送到选定的Real Server。在服务器端得到数据后,
Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,
然后把数据发送给用户,完成整个负载调度过程。
可以看出,在NAT方式下,
用户请求和响应报文都必须经过Director Server地址重写,
当用户请求越来越多时,
调度器的处理能力将称为瓶颈。
TUN
也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,
只是它的报文转发方法不同,VS/TUN方式中,
调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,
不再经过前端调度器,此外,对Real Server的地域位置没有要求,
可以和Director Server位于同一个网段,也可以是独立的一个网络。
因此,在TUN方式中,调度器将只处理用户的报文请求,
集群系统的吞吐量大大提高。
DR
就是用直接路由技术实现虚拟服务器。
它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,
将请求发送到Real Server,而Real Server将响应直接返回给客户,
免去了VS/TUN中的IP隧道开销。
这种方式是三种负载调度机制中性能的,
但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。
统计用户的访问IP,用awk结合uniq、sort过滤access.log日志就能统计并排序好。
kvm OpenStack
问清楚反应的人哪个服务应用或者页面调取哪个接口慢,
叫他把页面或相关的URL发给你,首先,最直观的分析就是用浏览器按F12,
看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),
如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。
其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,
用tail -f 跟踪一下日志,当然你也要点击测试来访问接口日志才会打出来。
排除sql,找到sql去mysql执行一下,看看时间是否很久,如果很久,
就要优化SQL问题了,expain一下SQL看看索引情况啥的,
针对性优化。数据量太大的能分表就分表,能分库就分库。
如果SQL没啥问题,那可能就是写的逻辑代码的问题了,
一行行审代码,找到耗时的地方改造,优化逻辑。
双核CPU就是能处理多份任务,顺序排成队列来处理。
单核CPU一次处理一份任务,轮流处理每个程序任务。
双核的优势不是频率,而是对付同时处理多件事情。
单核同时只能干一件事,比如你同时在后台BT下载,
前台一边看电影一边拷贝文件一边QQ。
HDD代表机械硬盘,SSD代表固态硬盘。
首先,从性能方面来说,固态硬盘几乎完胜机械硬盘,
固态硬盘的读写速度肯定要快机械硬盘,
因为固态硬盘和机械硬盘的构造是完全不同的(具体的构造就没必要解释了)。
其次,固态盘几乎没有噪音、而机械盘噪音比较大。
还有就是,以目前的市场情况来看,一般机械盘容量大,
价格低;固态盘容量小,价格偏高。
但是企业还是固态盘。
我们公司一直使用的是zabbix监控系统
如果这套环境是部署在云端(比如阿里云),你就不用去考虑硬件设计的问题。
可直接上阿里云的SLB+ECS+RDS这套标准的高可用、高并发的架构。
对外服务直接上SLB负载均衡技术,由阿里的SLB分发到后端的ECS主机;
ECS主机部署多台,应用拆分在不同的ECS主机上,尽量细分服务。
数据库用RDS高可用版本(一主一备的经典高可用架构)、或者用RDS金融版(一主两备的三节点架构)。
在结合阿里其它的服务就完全OK,业务量上来了,主机不够用了,直横向扩容ECS主机搞定。
如果这套环境托管在IDC,那么你就要从硬件、软件(应用服务)双面去考虑了。
硬件要达到高可用、高并发公司必须买多套网络硬件设备(比如负载设备F5、防火墙、核心层交换、接入层交换)都必须要冗余,
由其是在网络设计上,设备之间都必须有双线连接。
设备如果都是跑的单机,其中一个设备挂了,你整个网络都瘫痪了,
就谈不上高可用、高并发了。
其次在是考虑应用服务了,对外服务我会采用成熟的开源方案LVS+Keepalived或者Nginx+Keepalived,
缓存层可以考虑redis集群及Mongodb集群,中间件等其它服务可以用kafka、zookeeper,图片存储可以用fastDFS或MFS,
如果数据量大、又非常多,那么可采用hadoop这一套方案。
后端数据库可采用 “主从+MHA”。
这样一套环境下来是绝对满足高可用、高并发的架构。
服务器是突然变慢的话,可能是服务器系统本身的问题,也有可能是由于服务器上运行的程序导致变慢的;
先进行检查服务器本身的运行状态 各种性能指标,
如果发现异常 先不着急修复 先去查看一下应用程序是否出现异常 比如进程数量变得异常多,
后台进入死循环状态等
如果是软件运行出现异常导致服务器运行特别慢,
则进行日志查看,是否有异常,
查看配置文件中设计到的脚本信息,定时任务信息等,
进行逐一排查。
76、Nginx 反向代理,负载均衡,动静分离,工作原理及优化
77、Mysql 主从复制,主从复制的原理,读写分离,读写分离的原理,mysql优化
78、Tomcat 配置文件有哪些,优化
79、Redis 作用,应用场景
80、Zookeeper 配置文件叫什么,作用是什么
81、Lvs 工作原理是什么,有哪些工作模式
82、Keepalived 作用,怎么实现负载均衡
83、Rabbitmq 作用,为什么使用(应用场景)
84、MongoDB 是什么数据库,优化参数有哪些
85、Zabbix 作用是什么 可以监控什么,优化有什么,工作原理
86、Apache 配置文件叫什么,优化有哪些
87、NFS 作用
88、Ansible 配置,优化有什么,怎么实现的自动化
89、rsync的作用及优点?
90、Linux系统优化有什么
91、常见的centos和redhat故障怎么处理?
92、grub.conf丢失和解决办法
93、redis主从复制模式下,主挂了怎么办?redis提供了哨兵模式(高可用)
94、使用redis有哪些好处
95、MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据(redis有哪些数据淘汰策略???)
96、看你简历上写了你项目里面用到了Redis,你们为啥用Redis?
97、Redis有哪些数据结构呀?
98、那你使用过Redis分布式锁么,它是什么回事?
99、RDB的原理是什么?
100、mysql原理
关系型数据库使数据库的数据之间存在关联关系,
可以通过一条数据关联出一些列数据,
方便了数据的检索和查询,
提高开发人员的查询效率,
但是会拖累数据库,
因此关系型数据库不支持太高的并发
101、Redis主从怎么配置?
102、Mysql忘记密码该如何操作呢?
103、Nginx宕机怎么处理?
104、出现keepalived脑裂,是什么原因?
可能是端口受阻。网络线路抖动,
导致通电信号受阻。
导致健康信号包发送不了也接收不了。
所以双方都起了VIP,客户访问时出现两个VIP,
所以出现这个问题。
将其安装在一台能正常上网的机器上,
看其指示灯是否闪烁,正常接入状态下指示灯应为红色或者绿色,
然后用ping命令检测是否能ping通网络上的主机,
若通则正常,若网卡驱动安装无误而ping命令不通,
则可以断定网卡坏掉。
107、数据库满了,怎么缩容,腾出更多的磁盘空间,也是公司常遇到的问题;
108、nginx和Apache的区别在哪儿?
109、LVS的工作原理是什么?有哪些算法?
110、Linux系统用户数
一、增加内存
redis存储于内存中,数据太多,占用太多内存,那么增加内存就是最直接的方法,但是这个方法一般不采用,因为内存满了就加内存,满了就加,那代价也太大,相当于用钱解决问题,不首先考虑,一般所有方面都做到最优化,才考虑此方法
二、搭建Redis集群
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail(失败)是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
112、磁盘RAID级别有几种,分别是哪几种?你了解或者使用过哪几种,请写出它们的大概描述和区别。
RAID 0 存取速度最快 但没有容错 2块盘
RAID 1 完全容错但成本比较高,可用于数据备份,磁盘利用率为50% 2块盘
RAID 3 写入性能最好 但没有多任务功能 3块盘n+1,1为校验盘
RAID 5 具备多任务及容错功能,安全性高,随机和连续读写性能低 3块盘
RAID 0+1 读写速度快、完全容错但成本高,用的比较多 4块盘 利用率50%
113、工作中遇到的故障点
114、mysql主从复制不同步的原因及如何处理?
方法一:该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况
首先进入master库,查看进程是否sleep太多,还有状态是否正常,然后在从slave上查看,IO线程和SQL线程是否正常。如果不正常,则停止slave,然后set globai sql_slave_skip_counter=1(跳过一个事物);再重新启动slave,再用show slave status \G;查看,如果IO线程和SQL线程均为yes,那么主从同步状态恢复正常。
方法二:该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
1.先进入主库,进行锁表,防止数据写入 。使用命令: flush tables with read lock;
2..进行数据备份 。把数据备份到mysql.bak.sql文件 ,使用命令:mysqldump -uroot -p -hlocalhost > mysql.bak.sql
3.查看master 状态 。使用命令:show master status;
4.把mysql备份文件传到从库机器,进行数据恢复 。使用命令:scp mysql.bak.sql [email protected]:/tmp/
5.停止从库的状态 。使用命令:stop slave;
6.然后到从库执行mysql命令,导入数据备份。使用命令:source /tmp/mysql.bak.sql
7.设置从库同步,注意该处的同步点,就是主库show master status信息里的| File| Position两项
change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;
8.重新开启从同步 。使用命令:start slave;
9.查看同步状态 。使用命令:show slave status\G ;如果IO线程和SQL线程均为yes时,则主从可同步。
115、当文件系统受到破坏时,如何检查和修复系统?
116、访问网页时报错都是什么意思?
401:用户验证失败。
402:密码认证失败。
403:访问被拒绝。
404:文件位置发生了转变或删除。
500:用户权限的问题导致。
501: 不具有请求功能。
502:错误网关。
503:正在维护或者暂停。
504:网关超时的现象
505:http的版本是不受支持。
117、简述贵公司的PV、UV、IP,流量等资源大小?
日访问量5万,
小时点击量4-5万,
最高QPS 1000左右,
UV量是20-30万,
IP量为5万
118、Linux中/var/log/下日志详解
系统日志一般都存在/var/log下
常用的系统日志如下:
核心启动日志:/var/log/dmesg
系统报错日志:/var/log/messages(几乎所有的开机系统发生的错误)
邮件系统日志:/var/log/maillog
FTP系统日志:/var/log/xferlog
119、mysql中一些重要的参数
最大连接数,响应的连接数,索引缓冲区的大小,等待行动的秒数,表高速缓存的大小,允许的同时客户的数量,为所有线程打开表的数量,服务器在关闭它之前在一个连接上等待行动的秒数
120、查看僵尸进程:ps aux | grep Z
杀死僵尸进程:kill -9 7811 还会产生新的进程,用以下命令进行杀死进程
解决办法:
ps -ef | grep defunct(查出不再使用的进程,死的)
$3 是这些僵尸进程的父进程 PID ( PPID ),杀之!
ps -ef | grep defunct | awk '{print $3}' | xargs -i kill {}
121、关系型数据库和非关系性数据库的区别?
数据存储方式不同,扩展方式不同,对事物的支持不同
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
122、MySQL5.6和mysql5.7的区别是什么?
mysql5.7是5.6的新版本,
新增了新的优化器,
原生JSON支持,
多源复制,
还优化了整体的性能、GIS空间扩展、innodb.
123、有没有遇到过ddos 攻击,攻击的原理是什么,当前最容易消耗的是什么资源?
即分布式拒绝服务攻击,
是指攻击者通过网络远程控制大量僵尸主机向一个或多个目标发送大量攻击请求,
耗尽攻击目标服务器的系统资源,
导致其无法响应正常的服务请求,
利用的是TCP/IP三次握手 sync实现攻击...
最容易消耗目标服务器的网络带宽
124、服务器怎么做的安全加固?
1.禁用或删除无用账号
2.检查特殊账号
3.限制用户su
4.禁止root用户直接登录
5.关闭不必要的服务
6.记录所有用户的登录和操作日志
7.设置登录超时
8.ssh服务安全
125、现在给你三百台服务器,你怎么对他们进行管理?
管理3百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。
126、讲一下Keepalived的工作原理?
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,
BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)
多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性
由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息
127、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
区别: LVS由于是基于四层的转发所以只能做端口的转发
而基于URL的、基于目录的这种转发LVS就做不了
工作选择:
HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
配置简单,所以中小型企业推荐使用HAproxy
128、讲述一下Tomcat8005、8009、8080三个端口的含义?
8005==》监听的关闭端口
8080==》正常的http协议
8009==》接受其他服务器转发过来的请求
129、什么叫CDN?
- 即内容分发网络
- 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到
最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度
130、什么叫网站灰度发布?
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B
如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度
131、简述DNS进行域名解析的过程?
用户要访问www.baidu.com,
会先找本机的host文件,
再找本地设置的DNS服务器,如果也没有的话,
就去网络中找根服务器,
根服务器反馈结果,说只能提供一级域名服务器.cn,
就去找一级域名服务器,
一级域名服务器说只能提供二级域名服务器.com.cn
,就去找二级域名服务器,
二级域服务器只能提供三级域名服务器.baidu.com.cn,
就去找三级域名服务器,
三级域名服务器正好有这个网站www.baidu.com,
然后发给请求的服务器,
保存一份之后,再发给客户端
132、RabbitMQ是什么东西?
RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器
消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用
队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用
消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地
133、突然发现一台Linux系统只读,应该怎么处理,请写出详细步骤。
文件系统只读,可能是误操作,
比如挂载的时候加了ro的挂载选项。
也可能是文件系统损坏,
这时候可以使用fsck -y 分区 来尝试修复一下,
但在修复之前最好是把重要数据做一个备份以防万一。
如果修复失败,那说明是磁盘损坏,
这就需要更换磁盘了。
134、Linux的标准分区是什么?(内存32G,硬盘1T)
/boot 分200M,/分50G,swap 分16G,其余分到 /data 下。
135、请用iptables写一条规则(同时允许443,80,1723,22,3306,11211,25,110,dns,ntp协议,并写出默认允许或者拒绝端口的作用)
iptables -I INPUT -p tcp -m multiport --dport 443,80,1723,22,3306,11211,25,110,53,123 -j ACCEPT
iptables默认是允许所有端口开放的,如果想只放行指定某些端口,那就需要配置一下默认规则了。
比如本例中,我们写完放行的端口规则后还需要写一条默认拒绝的规则iptables -P INPUT DROP
这样除了上面那规则中提到的端口可以访问外,
其他端口都是拒绝的。
136、网站HTTPS证书认证需要那几个文件?分别是什么?什么作用?
HTTPS证书需要有两个文件,一个是crt,一个是key。
crt文件就是公钥文件,用来加密的。
而key文件是私钥文件,是用来解密的。
137、写一条192.168.10.0网段从网关192.168.9.1出去的路由
route add -net 192.168.10.0/24 gw 192.168.9.1
138、你公司监控(如zabbix)系统监控了哪些项目?
监控了CPU使用率、内存剩余、磁盘使用空间、网卡流量、web服务、mysql主从、访问日志等
139、linux引导加载的先后顺序是BIOS kernel GRUB MBR RAID?
BIOS -> RAID -> MBR -> GRUB -> kernel
140、进程间通信方式主要有哪几种方式?
1管道 2命名管道 3信号 4消息队列 5共享内存 6信号量 7套接字
141、怎样用命令查看3天前的CPU分核的负载数据?
sar -f /var/log/sa/(三天前日期)
142、说一下公司多少台服务器,是什么架构
143、提高性能和并发数,需要优化哪些内核参数
net.ipv4.tcp_max_tw_buckets = 6000 //timewait的数量,默认是180000。
net.ipv4.ip_local_port_range = 1024 65000 //允许系统打开的端口范围。
net.ipv4.tcp_tw_reuse = 1 //允许将TIME-WAIT sockets 重新用于新的TCP 连接。
net.ipv4.tcp_syncookies = 1 //开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。
net.ipv4.tcp_max_orphans = 262144 //系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
net.ipv4.tcp_max_syn_backlog = 262144 //记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。
net.ipv4.tcp_synack_retries = 1 //为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。
net.ipv4.tcp_syn_retries = 1 //在内核放弃建立连接之前发送SYN 包的数量。
net.ipv4.tcp_keepalive_time = 30 //当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时。
145、如何查看当前linux系统的状态如cpu使用,内存使用,负载情况,看到swap使用量大时,是不是意味着物理内存已不够用?
top命令就可以看cpu使用、内存使用以及负载情况,
当swap使用率大时,不一定是内存不够
,如果swap容量固定不变,那内存就不是瓶颈。
用vmstat 1命令看,si so两列的数值在不断变化时,
内存就不够了。
146、在 bash 里 $0 $? $* $@各表示什么意思?
$0 Shell本身的文件名
$?最后运行的命令的返回值
$*所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
147、先来说一下什么是cc攻击和ddos攻击。
1) CC主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观。
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的数据容量有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。
防御CC攻击可以通过多种方法,比如,可以分析攻击的请求头信息,分析它的特点,然后针对这些请求做一些限制。也可以分析请求的ip,利用iptables来限制ip。将网站做成静态页面,也可以有效降低服务器资源使用。另外,还可以限制连接数量,修改最大超时时间等。
2) ddos攻击的方式有很多种,最基本的ddos攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。单一的ddos攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项指标不高的性能,它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少。这时候分布式的拒绝服务攻击手段(ddos)就应运而生了。ddos就是利用更多的傀儡机(肉鸡)来发起进攻,以比从前更大的规模来进攻受害者。
简单的ddos,比如cc,我们可以通过限定ip来解决攻击。但有时候攻击量很大,甚至可以把机房的网络攻击瘫痪,这时候只能临时在上层网络把目标IP封掉,这样牺牲单个ip而保全大局。也可以接入第三方的防ddos攻击的cdn。
148、zabbix是怎么实施监控的?
一个监控系统运行的大概的流程是这样的:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
【主动监测】通信过程如下:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。分两个部分:
获取ACTIVE ITEMS列表
Agent打开TCP连接(主动检测变成Agent打开)
Agent请求items检测列表
Server返回items列表
Agent 处理响应
关闭TCP连接
Agent开始收集数据
主动检测提交数据过程如下:
Agent建立TCP连接
Agent提交items列表收集的数据
Server处理数据,并返回响应状态
关闭TCP连接
【被动监测】通信过程如下:
Server打开一个TCP连接
Server发送请求agent.ping\n
Agent接收到请求并且响应
Server处理接收到的数据
关闭TCP连接
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。
149、zabbix 自定义发现是怎么做的
1、首先需要在模板当中创建一个自动发现的规则,这个地方只需要一个名称和一个键值。
2、过滤器中间要添加你需要的用到的值宏。
3、然后要创建一个监控项原型,也是一个名称和一个键值。
4、然后需要去写一个这样的键值的收集。
自动发现实际上就是需要首先去获得需要监控的值,然后将这个值作为一个新的参数传递到另外一个收集数据的item里面去。
150、zabbix 是怎么微信报警的
1、首先,需要有一个微信企业号。(一个实名认证的[微信号]一个可以使用的[手机号]一个可以登录的[邮箱号]
2、下载并配置微信公众平台私有接口。
3、配置Zabbix告警,(增加示警媒介类型,添加用户报警媒介,添加报警动作)。
151、zabbix 怎么开启自定义监控
1、写一个脚本用于获取待监控服务的一些状态信息。
2、在zabbix客户端的配置文件zabbix_agentd.conf中添加上自定义的“UserParameter”,目的是方便zabbix调用我们上面写的那个脚本去获取待监控服务的信息。
3、在zabbix服务端使用zabbix_get测试是否能够通过第二步定义的参数去获取zabbix客户端收集的数据。
4、在zabbix服务端的web界面中新建模板,同时第一步的脚本能够获取什么信息就添加上什么监控项,“键值”设置成前面配置的“UserParameter”的值。
5、数据显示图表,直接新建图形并选择上一步的监控项来生成动态图表即可。
152、zabbix 监控了多少客户端 客户端是怎么进行批量安装的
根据实际公司台数回答。
1、使用命令生成密钥。
2、将公钥发送到所有安装zabbix客户端的主机。
3、安装 ansible 软件,(修改配置文件,将zabbix 客户机添加进组)。
4、创建一个安装zabbix客户端的剧本。
5、执行该剧本。
6、验证。