
本文共 85034 字,大约阅读时间需要 283 分钟。
面试必考
系统参数优化
关闭网卡LRO和GRO
现在大多数网卡都具有LRO/GRO功能,即 网卡收包时将同一流的小包合并成大包 (tcpdump抓包可以看到>MTU 1500bytes的数据包)交给 内核协议栈;LVS内核模块在处理>MTU的数据包时,会丢弃;
因此,如果我们用LVS来传输大文件,很容易出现丢包,传输速度慢;
解决方法,关闭LRO/GRO功能,命令:
ethtool -k eth0 查看LRO/GRO当前是否打开
ethtool -K eth0 lro off 关闭GRO
ethtool -K eth0 gro off 关闭GRO
禁用ARP,增大backlog并发数
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.core.netdev_max_backlog = 500000
LVS( Linux Virtual Server),Linux下的负载均衡器,支持LVS-NAT、 LVS-DR、LVS-TUNL三种不同的方式
nat用的不是很多,主要用的是DR、TUNL方式。
DR方式适合所有的RealServer同一网段下,即接在同一个交换机上.
TUNL方式就对于RealServer的位置可以任意了,完全可以跨地域、空间,只要系统支持Tunnel就可以,方便以后扩充的话直接Tunl方式即可
- MariaDB 是一个采用Aria存储引擎的MySQL分支版本,是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器
- MariaDB是一个社区驱动的、采用XtraDb存储引擎的MySQL分支版本
使用CDN(ContentDeliveryNetwork,内容分发网络)
优化数据库
lnmp 遇到502错误
启用两个php-fpm实例,把php-fpm分为两部分,每部分各听一个端口或socket,这样就减少了lock,依然保持400个php-fpm进程,每个实例启用200个,采用nginx的upstream负载均衡,轮询每个socket来处理请求。
nginx和lvs的区别
LVS特点:
1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生;
2.稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3.应用范围比较广,可以对所有应用做负载均衡;
4.不支持正则处理,不能做动静分离。
常用四种算法:
1.rr:轮叫,轮流分配到后端服务器;
2.wrr:权重轮叫,根据后端服务器负载情况来分配;
3.lc:最小连接,分配已建立连接最少的服务器上;
4.wlc:权重最小连接,根据后端服务器处理能力来分配。
Nginx特点:
1.工作在7层,可以对做正则规则处理;(如:针对域名、目录进行分流)
2.配置简单,能ping通就能进行负载功能,可以通过端口检测后端服务器状态,不支持url检测;
3.抗高并发,采用epoll网络模型处理客户请求;
4.只支持HTTP和EMail,应用范围比较少;
5.nginx主要是HTTP和反向代理服务器,低系统资源消耗。
常用四种算法:
1.RR:(默认)轮询,轮流分配到后端服务器;
2.weight:根据后端服务器性能分配;
3.ip_hash:每个请求按访问ip的hash结果进行分配,并发小时合适,解决session问题;
4.fair:(扩展策略),默认不被编译nginx内核,根据后端服务器响应时间判断负载情况,选择最轻的进行处理。
lvs优点:
是三个集群软件中性能和稳定性最高的(但是配置管理却是最复杂的)
工作在4层传输层,只用来做分发工作,并无流量的产生
几乎支持所有的应用,如:http,mysql,email等等
对网络要求很高,若是采用DR方式,最好用同一网段进行通信(LB与后端web)
nginx:
工作在7层应用层,可以对http应用层实现分流策略(如:根据域名,根据目录结构)
只支持http和email
对网络要求不是很高,理论上只要ping的通,就可以正常工作(nginx与后端web)
我建议:
如果公司的网站比较小,访问人数不是很多,可以采用nginx来做负载均衡
但是若公司网站规模较大,达到门户级别,建议采用lvs
php-fpm你做过哪些优化
php-fpm对于进程的管理存在两种风格——static和dynamic。
如果设置成static,php-fpm进程数自始至终都是pm.max_children指定的数量,不再增加或减少。
如果设置成dynamic,则php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。
这两种不同的进程管理方式,可以根据服务器的实际需求来进行调整。
这里先说一下涉及到这个的几个参数,他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。
pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件的说明。
下面4个参数的意思分别为:
pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。pm.min_spare_servers:动态方式下的最小php-fpm进程数量。pm.max_spare_servers:动态方式下的最大php-fpm进程数量。
如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。
如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。
对于内存大的服务器(比如8G以上)来说,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到,比如8GB内存可以设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子。如果内存稍微小点,比如1G,那么指定静态的进程数量更加有利于服务器的稳定。这样可以保证php-fpm只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。
对于小内存的服务器来说,比如256M内存的VPS,即使按照一个20M的内存量来算,10个php-cgi进程就将耗掉200M内存,那系统的崩溃就应该很正常了。因此应该尽量地控制php-fpm进程的数量,大体明确其他应用占用的内存后,给它指定一个静态的小数量,会让系统更加平稳一些。或者使用动态方式,因为动态方式会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。
redis3.0的新特性
- Redis Cluster —— 一个分布式的 Redis 实现
- 全新的 “embedded string” 对象编码结果,更少的缓存丢失,在特定的工作负载下速度的大幅提升
- AOF child -> parent 最终数据传输最小化延迟,通过在 AOF 重写过程中的 “last write”
- 大幅提升 LRU 近似算法用于键的擦除
- WAIT 命令堵塞等待写操作传输到指定数量的从节点
- MIGRATE 连接缓存,大幅提升键移植的速度
- MIGARTE 新的参数 COPY 和 REPLACE
- CLIENT PAUSE 命令:在指定时间内停止处理客户端请求
- BITCOUNT 性能提升
- CONFIG SET 接受不同单位的内存值,例如 “CONFIG SET maxmemory 1gb”.
- Redis 日志格式小调整用于反应实例的角色 (master/slave)
- INCR 性能提升 来源:
Fastcgi是CGI的更高级的一种方式,是用来提高CGI程序性能的。
web server(如nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态资源。
如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。此时CGI便是规定了要传什么数据以什么格式传输给php解析器的协议。
location ~ \.php$ { root /home/admin/web/nginx/html/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/admin/web/nginx/html/$fastcgi_script_name; include fastcgi_params; } 19.nginx常用模块和配置参数http://www.jb51.net/article/82150.htm user www www; worker_processes 2; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; events { use epoll; worker_connections 2048; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; # tcp_nopush on; keepalive_timeout 65; # gzip压缩功能设置 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 6; gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary on; # http_proxy 设置 client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 75; proxy_send_timeout 75; proxy_read_timeout 75; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_temp_path /usr/local/nginx/proxy_temp 1 2; # 设定负载均衡后台服务器列表 upstream backend { #ip_hash; server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ; } # 很重要的虚拟主机配置 server { listen 80; server_name itoatest.example.com; root /apps/oaapp; charset utf-8; access_log logs/host.access.log main; #对 / 所有做负载均衡+反向代理 location / { root /apps/oaapp; index index.jsp index.html index.htm; proxy_pass http://backend; proxy_redirect off; # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } #静态文件,nginx自己处理,不去backend请求tomcat location ~* /download/ { root /apps/oa/fs; } location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /apps/oaapp; expires 7d; } location /nginx_status { stub_status on; access_log off; allow 192.168.10.0/24; deny all; } location ~ ^/(WEB-INF)/ { deny all; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
2.2.1 main全局配置
nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等。
woker_processes 2
在配置文件的顶级main部分,worker角色的工作进程的个数,master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。worker_cpu_affinity
也是写在main部分。在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。worker_connections 2048
写在events部分。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。nginx作为反向代理服务器,计算公式 最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式里面是除以2。worker_rlimit_nofile 10240
写在main部分。默认是没有设置,可以限制为操作系统最大的限制65535。use epoll
写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。在操作系统不支持这些高效模型时才使用select。2.2.2 http服务器
与提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。
sendfile on
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。keepalive_timeout 65 : 长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置,可以另外起一片文章了。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。
send_timeout : 用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
client_max_body_size 10m
允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值client_body_buffer_size 128k
缓冲区代理缓冲用户端请求的最大字节数模块http_proxy:这个模块实现的是nginx作为反向代理服务器的功能,包括缓存功能(另见文章)proxy_connect_timeout 60
nginx跟后端服务器连接超时时间(代理连接超时)proxy_read_timeout 60连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)proxy_buffer_size 4k
设置代理服务器(nginx)从后端realserver读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点proxy_buffers 4 32k
proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置proxy_busy_buffers_size 64k
高负荷下缓冲大小(proxy_buffers*2)proxy_max_temp_file_size
当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。proxy_temp_file_write_size 64k
当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。proxy_pass,proxy_redirect见 location 部分。
模块http_gzip:
gzip on : 开启gzip压缩输出,减少网络传输。
gzip_min_length 1k : 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。gzip_buffers 4 16k : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。gzip_http_version 1.0 : 用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。gzip_comp_level 6 : gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)gzip_types :匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。gzip_proxied any : Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。gzip_vary on : 和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。Apache select和Nginx epoll模型区别
select的调用复杂度是线性的,即O(n)。举个例子,一个保姆照看一群孩子,如果把孩子是否需要尿尿比作网络IO事件,select的作用就好比这个保姆挨个询问每个孩子:你要尿尿吗?如果孩子回答是,保姆则把孩子拎出来放到另外一个地方。当所有孩子询问完之后,保姆领着这些要尿尿的孩子去上厕所(处理网络IO事件)。
还是以保姆照看一群孩子为例,在epoll机制下,保姆不再需要挨个的询问每个孩子是否需要尿尿。取而代之的是,每个孩子如果自己需要尿尿的时候,自己主动的站到事先约定好的地方,而保姆的职责就是查看事先约定好的地方是否有孩子。如果有小孩,则领着孩子去上厕所(网络事件处理)。因此,epoll的这种机制,能够高效的处理成千上万的并发连接,而且性能不会随着连接数增加而下降。
select | epoll | |
性能 | 随着连接数增加,急剧下降。处理成千上万并发连接数时,性能很差。 | 随着连接数增加,性能基本上没有下降。处理成千上万并发连接时,性能很好。 |
连接数 | 连接数有限制,处理的最大连接数不超过1024。如果要处理超过1024个连接数,则需要修改FD_SETSIZE宏,并重新编译 。 | 连接数无限制。 |
内在处理机制 | 线性轮询 | 回调callback |
开发复杂性 | 低 | 中 |
1.查找/backup目录下,更改时间在5日以前的文件并删除 答:find /backup -type f -mtime -5 -exec rm -f {} \;2.统计出apache的access.log日志中访问量最多的5个ip cat access.log |awk '{print $1}'|uniq -c|sort -n |head 53.查看http的并发请求数与其tcp连接状态 netstat -na | awk '/^tcp/ {++S[$NF]} END {for(i in S) print i, S[i]}'4.查找/tmp文件夹下,包含‘zw56’字符串的文件 grep -n "zw56" -r /tmp5.查看进程(pid=8000)的运行时间ps -ef |grep 8000|grep -v 'grep'|awk '{print $7}'6.编写防火墙策略实现只允许10.10.1.0/24网段的服务器访问本机的3306端口。 -A INPUT -m state --state NEW -m tcp -p tcp -s 10.10.1.0/24 --dport 3306 -j ACCEPT7.导出日志文件access_20170101.log中,时间段在12:00到13:00之间的日志。awk -F ':' '$2~/12/,$2~/13/{print $0}' access.log
常用服务端口
21 ftp 22 ssh 23 telnet 25 smtp 110 pop3 161 snmp 443 https 3306 mysqlmysql忘记密码如何操作 2.12 分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,取 top10,也就是计 算每个 url 的总访问大小 解答12:此题不会。【附加题: 工作场景高难度加分题,不会的同学可以放弃不答】。说明: 本题生产环境应用: 这个功能可以用于 IDC 网站流量带宽很高, 然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩 js 等措施。本题需要输出三个指标: 【访问次数】 【访问次数*单个文件大小】 【文件名(可以带 URL)】测试数据59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" 59.33.26.105 - - [08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swf HTTP/1.1" 200 3583 "http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"124.115.4.18 - - [08/Dec/2010:15:44:15 +0800] "GET /?= HTTP/1.1" 200 46232 "-" "-"124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.js HTTP/1.1" 200 4460 "-" "-"124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.js HTTP/1.1" 200 1627 "-" "-"1、客户反馈App中某内页加载慢(仍能显示),就你判断可能有什么原因,写出依据及解决方法
1.网络问题2.DNS解析3.服务性能低4.数据库慢查询多2、现有一台位于Ucloud的Nginx服务器突现负载升高,接近不能服务。怎么判断由何引起?如何紧急处理?nginx推荐优化内容:1.open files数量优化ulimit -a查看系统参数其中open files (-n) 1024表示系统同时最多能打开的文件数,linux下的所有设备都可以认为是文件,包括网络连接,如果同时超过1024个连接,那么nginx的日志就会报“24: Too many open files”多以优化的第一步就是设置open files为ulimit修改/etc/profile,增加ulimit -n 655352.Worker Processes数量优化通常来说设置一个cpu核心对应一个worker processer,最多不超过4个,提高worker process的值是为了提高计算能力,但一般在越到cpu瓶颈前,你会遇到别的瓶颈(如网络问题)。只有当你要处理大量静态文件的磁盘I/O时,worker进程是单线程的,所以这个读取文件的阻塞IO会降低CPU的处理速度,这是可以增加worker进程数量,其它情况是不需要的。3.worker进程连接数优化(Worker Connections)默认情况下这个值是worker_connections 1024,也就是说考虑到keep-alive超时65秒,每个浏览器平均消耗两个链接(chrome会同时打开多个连接来提到加载速度)。那么默认情况下nginx平均每秒能处理1024/65/2=8,那么8*86440=64w,差不多相当于每天有60万ip。多以普通网站默认值就可以了,如果你的流量一直提升,可以考虑增加这个值为2048或者更高。3. CPU Affinity用来设置worker进程使用哪个cpu核心处理请求并且一直使用这个cpu核心。如果你不知道cpu调度,最好别碰这个,操作系统比你更懂如何调度。4. Keep AliveKeep alive 没有数据传输的情况下保持客户端和服务端的连接,也就是保持空连接一段时间,避免重现建立链接的时间消耗。nginx处理空连接的效率非常高,1万个空连接大约消耗2.5M内存。如果流量非常大的网站,减少建立连接的时间开销是非常客观的。keep alive的值设置在10-20s之间比较合理。5. tcp_nodelay 和 tcp_nopush优化这两个指令影响nginx的底层网络,它们决定操作系统如何处理网络层buffer和什么时候把buffer内容刷新给终端用户。如果你不懂,就可以保持这两个指令默认不变,对nginx性能影响不明显。6. access日志优化默认情况下,access日志会记录所有请求到日志文件,写操作会增加IO操作,如果不需要统计信息,可以使用百度统计或者cnzz统计,完全可以关闭日志,来减少磁盘写,或者写入内存文件,提高IO效率。7. Error日志优化错误日志会记录运行中的错误,如果设置的太低,会记录的信息太多,会产生大量IO,推荐设置为warn,这样可以记录大部分信息,而不会有太多IO8. Open File Cachenginx会读文件系统的许多文件,如果这些文件的描述符能够缓存起来,那么会提高处理效率。详见http://wiki.nginx.org/HttpCoreModule#open_file_cache9. Buffers size优化buffer的大小是你需要调优最重要参数。如果buffer size太小就会到导致nginx使用临时文件存储response,这会引起磁盘读写IO,流量越大问题越明显。client_body_buffer_size 处理客户端请求体buffer大小。用来处理POST提交数据,上传文件等。client_body_buffer_size 需要足够大以容纳如果需要上传POST数据。fastcgi_buffers,proxy_buffers 处理后端(PHP,That to used sensitive just www auvitra 20 mg tablets lung however http://www.imrghaziabad.in/rrw/augmentin-625/ job that tension http://www.martinince.eu/kxg/pfizer-viagra-online-cheap.php hair because. That shower... Comes robaxin side effects A after. Well is it legal to buy cialis online that taking. Head http://www.jacksdp.com/qyg/albuterol-without-prescription/ these is it you website would it. I'm http://www.m2iformation-diplomante.com/agy/albendazole-walgreens/ for had accidentally http://www.leglaucome.fr/asi/prescription-drugs-online.html this of oil http://www.meda-comp.net/fyz/generic-levitra.html adult it just. Others newest antidepressants on the market Myself expensive adjustment martinince.eu tadalafil blister supposed highly brush. Out how much does generic viagra cost probably I last costumes.Apache)响应。如果这个buffer不够大,同样会引起磁盘都系IO。需要注意的是它们有一个上限值,这个上限值受 fastcgi_max_temp_file_size 、 proxy_max_temp_file_size控制。10.磁盘IO如果能把数据全放到内存,不使用磁盘就可以完全去掉磁盘IO。 默认情况下操作系统也会缓存频繁访问的数据以降低IO。所以预算足够的情况加,加大内存。11.网络IO假设我们没有了磁盘IO,所有数据都在内存,那么我们的读IO大概有3-6gbps。这种情况下,如果你网络差,一样会很慢。所以尽可能提高网络带宽,压缩传输数据。网络带宽买你能买的起的最大带宽,nginx的gzip模块可以用来压缩传输数据,通常gzip_comp_level 设为 4-5,再高就是浪费cpu了。同时也可以采用css,js压缩技术,当然这些技术就与nginx优化无关了。。绝招如果你还想提高nginx处理能力,只能祭出大杀器了。别优化了,加机器吧。一点点优化是没有用的,不如扩展机器来的快些。ps 说道系统的扩展性通常有scale、和extension,区别是前者是数量上扩展,后者是功能上扩展。3、11:30误删mysql中的Production库,最近一次完整备份是在昨日凌晨3:00,如何恢复至误删时间点?写出具体命令查找系统中所有以*.log结尾并>500M的文件,保留最后500行至 原文件名-cut.log 并移动至/tmp,清空原文件#!/bin/shfor i in `find . -type f -name "*.log" -size -500M`do tail 500 $i >>$i-cut.log mv $i-cut.log /tmp && >$idone
在华为交换机中新增VLAN10,将G0/0/1-10加入VLAN10,G0/0/48 设置为trunk模式并允许所有VLAN通过,新增一条默认路由至192.168.2.1
sysvlan 10port-group yewugroup-member G0/0/1 to G0/0/10port default vlan 2270interface GigabitEthernet 0/0/48port link-type trunk
6、将公司官网环境形成文档,按你的思路,需要描述哪些方面,列出提纲即可
mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456
linux 下的server需要自己手动建一个 后面的user与pass 是windows主机的账号和密码 注意空格 和逗号
netstat -n | awk ‘/^tcp/ {++b[$NF]} END {for(a in b) print a,b[a]}’
还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024,不修改这里web服务器修改再大也没用。若要用就修改很几个办法,这里说其中一个:
修改/etc/security/limits.conf* soft nofile 10240* hard nofile 10240重启后生效
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4″.”}’ | sort |uniq -c | sort -nr | head-5
ls /var/log/ -1R | grep “-” | wc -l
netstat -n | awk ‘/^tcp/ {print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -rn
cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass
cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -n -r | head -5
我们一般通过hexdump命令 来查看二进制文件的内容。
hexdump -C XXX(文件名) -C是参数 不同的参数有不同的意义
-C 是比较规范的 十六进制和ASCII码显示
-c 是单字节字符显示
-b 单字节八进制显示
-o 是双字节八进制显示
-d 是双字节十进制显示
-x 是双字节十六进制显示
VSZ:虚拟内存集,进程占用的虚拟内存空间
RSS:物理内存集,进程战用实际物理内存空间
fsck用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查
加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init一句inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)–>init进程执行rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了。
我们可以把符号链接,也就是软连接 当做是 windows系统里的 快捷方式。
硬链接 就好像是 又复制了一份,举例说明:
ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4会跟着变,若删除3,4不受任何影响。
ln -s 3.txt 4.txt 这是软连接,相当于快捷方式。修改4,3也会跟着变,若删除3,4就坏掉了。不可以用了。
dd 命令是以个强大的命令,在复制的同时进行转换
dd if=/dev/sda of=./mbr.txt bs=1 count=512
以下操作全部在命令行状态操作,不要在编辑状态操作。
在文本里 移动到想要复制的行 按yy 想复制到哪就移动到哪,然后按P 就黏贴了
删除行 移动到改行 按dd
删除全部 dG 这里注意G一定要大写
按行查找 :90 这样就是找到第90行
按字母查找 /path 这样就是 找到path这个单词所在的位置,文本里可能存在多个,多次查找会显示在不同的位置。
grub-install /dev/sda
vi /etc/sysctl.conf 这里修改参数sysctl -p 刷新后可用
expr $[RANDOM%39] +1RANDOM随机数%39取余数范围0-38
每秒新建连接数 一般都是由防火墙来做,apache本身好像无法设置每秒新建连接数,只能设置最大连接:
iptables -A INPUT -d 172.16.100.1 -p tcp –dport 80 -m limit –limit 1/second -j ACCEPT
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。
grep “^#/{1,/}[^]” /etc/inittab
grep “/:[0-9]/{1/}:” /etc/inittab
在脚本里加入#!/bin/bash# chkconfig: 345 85 15# description: httpd然后保存chkconfig httpd –add 创建系统服务现在就可以使用service 来 start or restart
#!/bin/sh for i in `seq -f %02g 1 20` do useradd user$i echo "user$i-`echo $RANDOM|md5sum|cut -c 1-5`" |passwd --stdin user$i >/dev/null 2>&1 done
#!/bin/bashfor ip in `seq 1 255`doping -c 1 192.168.1.$ip > /dev/null 2>&1if [ $? -eq 0 ]; thenecho 192.168.1.$ip UPelseecho 192.168.1.$ip DOWNfi}&donewait
[root@compute tmp]# cat checkfile.sh #!/bin/bashread -p "please input your want to check file:" fileif [ -f $file ];then sh -n $fileif [ $? -eq 0 ];then echo "$file is ok"elseread -p "you need to check $file ,[Type q to exit or Type vim to exit] " answercase $answer inq|Q)exit 0;;vim)vim $file;;*)exit 0;;esacfiexit 1fi
创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
[root@localhost tmp]# cat downfile.sh#!/bin/bashurl=$1dir=$2download(){cd $dir >> /dev/null 2>&1if [ $? -ne 0 ];thenread -p “$dir No such file or directory,create?(y/n)” answerif [ “$answer” == “y” ];thenmkdir -p $dircd $dirwget $url 1> /dev/null 2>&1elsereturn “51”fifiif [ $? -ne 0 ]; thenreturn “52”fi}download $url $direcho $?
1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;而后将此磁盘设备上的所有分区清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1实现,注意其中的设备路径不要写错了;
如果此步骤失败,返回67给主程序;
接着在此磁盘设备上创建两个主分区,一个大小为100M,一个大小为1G;如果此步骤失败,返回68给主程序;
格式化此两分区,文件系统类型为ext3;如果此步骤失败,返回69给主程序;
如果上述过程都正常,返回0给主程序;
2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来;
local Darray=(`ls /dev/sd[a-z]`)for i in ${Darray};do[[ “$i” == “$1” ]] && Sd=$i &&breakdoneelsereturn66fi
#当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环
while :;doread -p “Warning!!!This operation will clean $Sd data.Next=y,Quit=n [y|n]:” Choicecase $Choice iny)dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null &&break || return 67 ;;n)exit 88 ;;*)echo “Invalid choice,please choice again.” ;;esacdone
#使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍
echo-e “n/np/n1/n/n+100M/nn/np/n2/n/n+1024M/nw/n”|fdisk /dev/sdb&> /dev/null || || return 68
#格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好…此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69
`partprobe`Part=`fdisk -l /dev/$Sd|tail -2|cut -d” ” -f1`for M in ${Part};domke2fs -j $M &> /dev/null && ErrorPart=$M &&return 69donereturn 0}
#下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。
Disk_Mod $1Res=$?[ $Res-eq 0 ] && exit 0[ $Res-eq 66 ] && echo “Error! Invalid input.”[ $Res-eq 67 ] && echo “Error! Command -> dd fdisk mke2fs
HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S”export HISTTIMEFORMAT重新开机后会还原,可以写/etc/profile
l Linux操作系统知识:
- Linux开机启动流程详细步骤是什么?密码如何破解?
硬件加电自检---BIOS引导---boot loader加载---MBR---内核加载----启动级别-----init.d启动进程----加载rc.local------登录
- 企业中Linux数据库服务器做raid几,你们公司的数据库服务器大小?RAID 0 1 5 10区别,系统分区标准是什么?
应用服务器:dell R720 E5-2610*2 300G*2 7200 raid 1H730
- 某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤,如果发现磁盘满了,需要重新挂载一块新硬盘,操作步骤:
fsck.ext3 /dev/sdb1 分区----mkfs.ext4 格式化挂载到目录,写入开机自动/etc/rc.local
- 如何安装50台Linux系统如何安装呢?思考一下,如何实现,步骤是什么?
使用kickstart+pxe+dhcp+tftp+nfs 通过网络批量安装
- 用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?
/etc/udev/rules.d/70-persistent-net.rules 原来机器的网卡注释掉,修改第二块网卡为eth0,重启系统,
- Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么?
/etc/sysconfig/network-scripts/ifcfg-eth0 ,配置网关与DNS
- 一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件?xshell sercurCRT rz sz
- 查找当前目录下30天以前.log结尾的大于1G的文件,并把它移动到/tmp下。
find ./ -name "*.log" -type f -size +1024M|xargs mv /tmp
- 新增一块新硬盘如何实现?需要哪些步骤?
- Apache两种工作方式的区别,如何创建多个虚拟主机呢?
worker
- 用一条命令,查看本机IP,并且只显示ip,其他字符不显示。
[root@LVS-1 ~]# ifconfig|grep "Bcast"|awk '{print $2}'|sed 's/addr://g'
192.168.1.7
10.0.1.7
10.0.2.7
- 查看某个端口是否已经启动,以及查看端口做占用的PID进程号。
lsof -i :80 ps -ef|grep http
l Linux命令及文件操作:
- 在/tmp/目录下创建test.txt文件,内容为: Hello,World! ,用一个命令写出来。echo " Hello,World! ">/text.txt
- 给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。chmod go+1 test.txt 655
- 用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入,如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net
- 如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。
- 你们公司上线的流程是什么?真实环境上线一个论坛需要哪些步骤?
- 你每天在公司做什么工作?
l Linux磁盘及软件管理操作:
- 有个金士顿U盘,需要往服务器/var/www/html/目录下上传一个index.html文件,如何操作并完成。
- 光盘里面有一个httpd-2.2.15.xx.rpm包,如何挂载并安装呢,如果查看这个rpm安装后的路径?
- 使用rpm命令安装、卸载、删除、更新ntp-0.7.12.x86_64.rpm这个软包。
- /var/www/html/是网站的发布目录,如何每天2点12点,每隔2小时对其进行自动备份,写出操作步骤?
- 使用tar命令打包并压缩/root目录,然后移动到/tmp下,将其权限设置其他人只读。
- Yum命令与rpm命令的区别?如何使用rpm安装一个有依赖的包?
- 7. Mysql数据库服务器为192.168.1.1,web网站ip为192.168.1.2,现在需要1.2访问mysql数据库discuz数据库,请写出授权命令。
- 8. Mysql查询中,查询abc用户是否存在,如何查询。
- Mysql备份和恢复如何实现,你们公司的数据量多大,备份的策略是什么?
- Mysql主从原理是什么?Bin-log是干什么用的?
主上100G数据,从库同步失败,差距很大,如何恢复?
- 11. 你们公司都使用什么监控,都分别来做什么?
- 你维护网站的时候,出现过什么问题呢?故障如何解决呢?
l Linux服务配置及管理:
- 请写出 apache2.X 版本的两种工作模式,以及各自工作原理。如何查看apache 当前所支持的模块,并且查看是工作在哪种模式下?
- Linux下nfs在客户端无法挂载,请写出排查步骤?
- Linux下已经部署了dhcp服务器,客户端无法获取的IP,如何解决?
- 常见的FTP软件有哪些?Linux最常用的是?如何共享一个资源让他人使用用户名和密码访问?
- 如何禁止FTP使用匿名用户登录?命令行如何访问ftp服务器?
- Apache WEB服务器的发布目录在哪里?
- Apache WEB服务器有几种工作模式,每种模式的简单区别?
- MySQL服务器的用途是?Apache和mysql可以安装在一台机器吗?如何查看apache和mysql端口和进程?
- 如何在虚拟机上面部署4个网站,访问的域名分别为www.a1.com test.a1.com test.a2.com?
- 假设 Apache 产生的日志文件名为 access_log,在 apache 正在运行时,执行命令 mv access_log access_log.bak,执行完后,请问新的 apache 的日志会打印到哪里,为什么?
- 我们都知道 FTP 协议有两种工作模式,说说它们的大概的一个工作流程?
- Linux 内核引导时,从哪个文件中读取要加载的文件系统。
- 写出下面服务的常用端口ftp http dns snmp pop3、dhcp、nfs、mysql、samba等服务。
- Mysql创建数据库的命令,创建表的命令,插入语句的命令?
- Mysql备份命令?Mysql如何给root用户对jfedu授权访问,密码为jfedu.net,请写出命令?
- Mysql忘记密码该如何操作呢?
- Linux运维工程师都需要具备哪些技能和职业品质?
企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:
阶段1:开发一个守护进程脚本每30秒实现检测一次。阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)#!/bin/bash
mysql_cmd=
"mysql -u root -proot"
errornum=(1158 1159 1008 1007 1062)
while
true
do
array=($($mysql_cmd -e
"show slave status\G"
|egrep ‘_Running|Behind_Master|Last_SQL_Errno‘|awk ‘{print $NF}‘))
if
[
"${array[0]}"
==
"Yes"
-a
"${array[1]}"
==
"Yes"
-a
"${array[2]}"
==
"0"
]
then
echo
"MySQL is slave is running"
else
for
((i=0;i<${#errornum[*]};i++))
do
if
[
"${array[3]}"
=
"${errornum[$i]}"
];then
$mysql_cmd -e
"stop slave &&set global sql_slave_skip_counter=1;start slave;"
fi
done
char
=
"MySQL slave is downed"
echo
"$char"
echo
"$char"
|mail -s
"$char"
xxxxx@qq.com
break
fi
sleep 30
done
企业面试题2:
使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为:#!/bin/sh[ -d /home/oldboy ] || mkdir /home/oldboy && cd /home/oldboyfor (( i=1; i<11; i++ ))do touch `date +%s%N | md5sum |sed -e 's/[0-9]//g'|head -c 10`_oldboy.htmldone
[root@oldboy oldboy]# sh /server/scripts/oldboy.sh
[root@oldboy oldboy]# lscoaolvajcq_oldboy.html qnvuxvicni_oldboy.html vioesjmcbu_oldboy.htmlgmkhrancxh_oldboy.html tmdjormaxr_oldboy.html wzewnojiwe_oldboy.htmljdxexendbe_oldboy.html ugaywanjlm_oldboy.html xzzruhdzda_oldboy.htmlqcawgsrtkp_oldboy.html vfrphtqjpc_oldboy.html企业面试题3:请用至少两种方法实现!
将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写。#!/bin/shDir=/home/oldboycd $Dirfor i in `ls `do mv $i `echo $i|sed 's/oldboy.html/oldgirl.HTML/g'`#mv $i ${i%_oldboy.html}_oldgirl.HTMLdone
企业面试题4:
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。#!/bin/shfor i in `seq -w 10`do useradd oldboy$i echo "`date +%s%N|md5sum|head -c 8`"|passwd --stdin oldboy$i >/dev/null 2>1&done
企业面试题5:
写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多)#!/bin/shfor i in `seq 1 255`do ping -c 1 10.0.0.$i >>/dev/null 2>1& if [ $? -eq 0 ];then echo "10.0.0.$i is up" else echo "10.0.0.$i is down" fidone
企业实战题6:请用至少两种方法实现!
写一个脚本解决DOS攻击生产案例提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -AINPUT -s 10.0.1.10 -j DROP。
企业实战题7:
开发mysql多实例启动脚本:已知mysql多实例启动命令为:mysqld_safe –defaults-file=/data/3306/my.cnf &停止命令为:mysqladmin -u root-poldboy123 -S /data/3306/mysql.sock shutdown请完成mysql多实例启动启动脚本的编写要求:用函数,case语句、if语句等实现。企业实战题8:如何实现对MySQL数据库进行分库备份,请用脚本实现
企业实战题9:如何实现对MySQL数据库进行分库加分表备份,请用脚本实现
企业面试题10:请用至少两种方法实现!
bash for循环打印下面这句话中字母数不大于6的单词(昆仑万维面试题)。I am oldboy teacher welcome to oldboy training class.#!/bin/shfor i in I am oldboy teacher welcome to oldboy training class.do #if [ `echo $i|wc -L` -le 6 ];then if [ `expr length $i` -le 6 ];then echo $i fidone
企业面试题11:开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小。以屏幕输出的方式提醒用户比较结果。注意:一共是开发2个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数做判断。
企业面试题12:
打印选择菜单,一键安装Web服务:
[root@oldboyscripts]# sh menu.sh
1.[install lamp]2.[install lnmp]3.[exit]pls input the num you want:
要求:
1、当用户输入1时,输出“startinstalling lamp.”然后执行/server/scripts/lamp.sh,脚本内容输出”lamp is installed”后退出脚本;
2、当用户输入2时,输出“startinstalling lnmp.” 然后执行/server/scripts/lnmp.sh输出”lnmp is installed”后退出脚本;3、当输入3时,退出当前菜单及脚本;4、当输入任何其它字符,给出提示“Input error”后退出脚本。5、要对执行的脚本进行相关条件判断,例如:脚本是否存在,是否可执行等。#!/bin/shcat <
企业面试题13:
1、监控web服务是否正常,不低于3种监控策略。
2、监控db服务是否正常,不低于3种监控策略。要求间隔1分钟,持续监控。企业面试题14:监控memcache服务是否正常,模拟用户(web客户端)检测。
使用nc命令加上set/get来模拟检测,以及监控响应时间及命中率。
企业面试题15:面试及实战考试题:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次(10分钟时间完成)。
企业面试题16:
写一个网络服务独立进程模式下rsync的系统启动脚本
例如:/etc/init.d/rsyncd{start|stop|restart} 。
要求:1.要使用系统函数库技巧。2.要用函数,不能一坨SHI的方式。3.可被chkconfig管理。企业面试题17:
抓阄题目:运维派提供外出企业项目实践机会(第6次)来了(本月中旬),但是,名额有限,队员限3人(班长带队)。
因此需要挑选学生,因此需要一个抓阄的程序:
要求:
1、执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。
2、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入。企业面试题18:
已知下面的字符串是通过RANDOM随机数变量md5sum|cut -c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?
21029299
00205d1ca3da16771f6d12dd890684b企业面试题19:批量检查多个网站地址是否正常
要求:shell数组方法实现,检测策略尽量模拟用户访问思路
http://www.yunweipai.com
http://www.taobao.comhttp://www.chengxuyuan.comhttp://10.0.0.7free命令各行意义
total:内存总数
used:已经使用的内存数
free:空闲的内存数
shared:当前已经废弃不用
buffers:缓存内存数
列举你所知道的mysql引擎类型,分析各自特性;
MyISAM:默认的MySQL插件式存储引擎。
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID十五支持。
BDB:可替代InnoDB的十五引擎,支持COMMIT、ROLLBACK和其他事务特性。
Cluster:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
InnoDB存储方式为两种:1 使用共享表空间存储 2 使用多表空间
2.MyIASM与InnoDB的区别:
1、MyIASM是非事务安全的,而InnoDB是事务安全的
2、MyIASM锁的粒度是表级的,而InnoDB支持行级锁
3、MyIASM支持全文类型索引,而InnoDB不支持全文索引
4、MyIASM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyIASM
5、MyIASM表保存成文件形式,跨平台使用更加方便
应用场景:
1、MyIASM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyIASM
2、InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB
使用sql语句清空test_table表
truncate table test_table;
简述mysql主从配置的过程。
配置master
1.修改master配置文件
#开启二进制日志文件
#配置唯一server id
#事务安全
2.创建复制权限的用户
配置slave
#设置唯一id
#启动relay log
#事务安全
3.开始复制
#master上查看binlog Pos点
#在slave上执行同步操作
#在slave上启动slave
列举Mysql日志类型,并作简单说明
1.错误日志 记录启动,运行或停止mysqld时出现的问题
log-error
2.查询日志 记录建立的客户端连接和执行的所有语句(包括错误的)
log
3.二进制日志 记录所有更改数据的语句,还用于主从复制
log-bin
4.慢日志 记录所有执行时间超过long_query_time秒的所有查询
log-slow-queries
如果mysql日志提示test_table表损坏,如何修复
check table test_table;
repair table test_table;
列举SSH的验证方式
口令认证和密钥认证
如何修改linux最大文件打开数
ulimit -n 10240 >>/etc/profile
使用traceroute进行路由查询的原理是?
Traceroute 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。
常用来进行网络数据包抓取,分析的工具有哪些?
wireshark、fiddler、tcpdump
DNS里面的A记录、MX记录、CNAME记录各指什么?
A记录——》域名对应IP地址记录
MX记录——》邮件交换记录
CNAME记录——》别名记录
NS记录——》域名服务器记录
互联网ip地址A、B、C段地址范围分别是?每段地址的保留地址段分别是?
gA类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为,用于本地等用途); B类:128.0.0.0~191.255.255.255,默认子网掩码/16,即255.255.0.0; C类:192.0.0.0~223.255.255.255,默认子网掩码/24,即255.255.255.0; IPv4中还有一种,即比如内部局域网所用的地址,分别为: 10.0.0.0~10.255.255.255; 172.16.0.0~172.31.0.0; 192.168.0.0~192.168.255.255
中了rootkit病毒,如何查询、检测、取证,预防说出大概过程?
chkrootkit、rootkit hunter。
深度防卫的要素包括:病毒扫描程序、定期更新软件、在和网络上安装,以及策略
客户端进行SMTP发信,POP3收信时与服务器端的交互过程?
(a)建立TCP连接
(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;
服务器端正希望以OK作为响应,表明准备接收
(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;
服务器端则表示是否愿意为收件人接收邮件
(d)协商结束,发送邮件,用命令DATA发送
(e)以.表示结束输入内容一起发送出去
(f)结束此次发送,用QUIT命令退出
性能测试一般有哪几种方法,并加以简述?
1、负载测试 2、压力测试 3、并发测试 4、基准测试 5、稳定性测试 6、可恢复测试
1、什么是运维?什么是游戏运维?
1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维开发运维:是给应用运维开发运维工具和运维平台的应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑开发运维、应用运维和系统运维他们的工作是环环相扣的2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?游戏运营要做的一个事情除了协调工作以外还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划3、现在给你三百台服务器,你怎么对他们进行管理?管理3百台服务器的方式:1)设定跳板机,使用统一账号登录,便于安全与登录的考量。2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据还有一个大功能,多块盘放在一起可以有冗余(备份)RAID整合方式有很多,常用的:0 1 5 10RAID 0,可以是一块盘和N个盘组合其优点读写快,是RAID中最好的缺点:没有冗余,一块坏了数据就全没有了RAID 1,只能2块盘,盘的大小可以不一样,以小的为准10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘特点,读写性能一般,读还好一点,写不好冗余从好到坏:RAID1 RAID10 RAID 5 RAID0性能从好到坏:RAID0 RAID10 RAID5 RAID1成本从低到高:RAID0 RAID5 RAID1 RAID10单台服务器:很重要盘不多,系统盘,RAID1数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10)WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)有多台,监控、应用服务器,RAID0 RAID5我们会根据数据的存储和访问的需求,去匹配对应的RAID级别5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?LVS: 是基于四层的转发HAproxy: 是基于四层和七层的转发,是专业的代理服务器Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发区别: LVS由于是基于四层的转发所以只能做端口的转发而基于URL的、基于目录的这种转发LVS就做不了工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器配置简单,所以中小型企业推荐使用HAproxy6、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。7、Tomcat和Resin有什么区别,工作中你怎么选择?区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些但稳定性和java程序的兼容性,应该是比resin的要好工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容8、什么是中间件?什么是jdk?中间件介绍:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递通过中间件,应用程序可以工作于多平台或OS环境。jdk:jdk是Java的开发工具包它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境9、讲述一下Tomcat8005、8009、8080三个端口的含义?8005==》 关闭时使用8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口8080==》 一般应用使用10、什么叫CDN?- 即内容分发网络- 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度11、什么叫网站灰度发布?灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度12、简述DNS进行域名解析的过程?用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端13、RabbitMQ是什么东西?RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地14、讲一下Keepalived的工作原理?在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息15、讲述一下LVS三种模式的工作过程?LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)一、NAT模式(VS-NAT)原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时大量的数据包都交汇在负载均衡器那,速度就会变慢!二、IP隧道模式(VS-TUN)原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RSRS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上三、直接路由模式(VS-DR)原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?mysql的innodb如何定位锁问题:在使用 show engine innodb status检查引擎状态时,发现了死锁问题在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)innodb_trx ## 当前运行的所有事务innodb_locks ## 当前出现的锁innodb_lock_waits ## 锁等待的对应关系mysql如何减少主从复制延迟:如果延迟比较大,就先确认以下几个因素:1. 从库硬件比主库差,导致复制延迟2. 主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。更高版本的mysql可以支持多线程复制3. 慢SQL语句过多4. 网络延迟5. master负载主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层6. slave负载一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒#参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据–master-connect-retry=seconds 单位为秒 默认设置为 60秒#参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟MySQL数据库主从同步延迟解决方案最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit= 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binloginnodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave17、如何重置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语句要以分号”;”结束3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。 grant all on *.* to root@’localhost’ identified by ‘新密码’;二、 如查忘记了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 root Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’; Mysql> flush privileges;18、lvs/nginx/haproxy优缺点Nginx的优点是: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一Nginx单凭这点可利用的场合就远多于LVS了。2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一相反LVS对网络稳定性依赖比较大,这点本人深有体会;3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器8、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃9、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多Nginx的缺点是:1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测 不支持Session的直接保持,但能通过ip_hash来解决LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器 它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)LVS的优点是:1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生 这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西 所以并不需要太多接触,大大减少了人为出错的几率3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案 如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等LVS的缺点是:1、软件本身不支持正则表达式处理,不能做动静分离 而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了 特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了 相对而言,Nginx/HAProxy+Keepalived就简单多了。HAProxy的特点是:1、HAProxy也是支持虚拟主机的。2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导 同时支持通过获取指定的url来检测后端服务器的状态3、HAProxy跟LVS类似,本身就只是一款负载均衡软件 单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡 对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;② static-rr,表示根据权重,建议关注;③leastconn,表示最少连接者先处理,建议关注;④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似 我们用其作为解决session问题的一种方法,建议关注;⑤ri,表示根据请求的URI;⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。19、mysql数据备份工具mysqldump工具mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。基于LVM快照备份在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别而innodb不开启独立表空间的话只能备份整个数据库。tar包备份percona提供的xtrabackup工具支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份20、keepalive的工作原理和如何做到健康检查keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的Keepalived健康检查方式配置HTTP_GET|SSL_GETHTTP_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 #连接间隔时间}21、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ipcat access.log | awk '{print $1}' | uniq -c | sort -rn | head -1022、使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.logtcpdump 'host 192.168.1.1 and port 80' > tcpdump.log23、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:808024、简述raid0 raid1 raid5 三种工作模式的工作原理及特点RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能25、你对现在运维工程师的理解和以及对其工作的认识运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失因此运维工程师的工作需要严谨及富有创新精神26、实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令tcpdump -nn tcp port 8027、服务器开不了机怎么解决一步步的排查A、造成服务器故障的原因可能有以下几点: B、如何排查服务器故障的处理步骤如下: 28、Linux系统中病毒怎么解决1)最简单有效的方法就是重装系统2)要查的话就是找到病毒文件然后删除 中毒之后一般机器cpu、内存使用率会比较高 机器向外发包等异常情况,排查方法简单介绍下top 命令找到cpu使用率最高的进程一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置rm -f 命令删除病毒文件检查计划任务、开机启动项和病毒文件目录有无其他可以文件等3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下29、发现一个病毒文件你删了他又自动创建怎么解决公司的内网某台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,个人觉得就要重装系统了30、说说TCP/IP的七层模型应用层 (Application):网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP表示层(Presentation Layer):数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)格式有,JPEG、ASCll、DECOIC、加密格式等会话层(Session Layer):建立、管理、终止会话。(在五层模型里面已经合并到了应用层)对应主机进程,指本地主机与远程主机正在进行的会话传输层 (Transport):定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层网络层 (Network):进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP数据链路层 (Link):建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正物理层(Physical Layer):是计算机网络OSI模型中最低的一层物理层规定:为传输数据所需要的物理链路创建、维持、拆除而提供具有机械的,电子的,功能的和规范的特性简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”31、你常用的Nginx模块,用来做什么rewrite模块,实现重写功能access模块:来源控制ssl模块:安全加密ngx_http_gzip_module:网络传输压缩模块ngx_http_proxy_module 模块实现代理ngx_http_upstream_module模块实现定义后端服务器列表ngx_cache_purge实现缓存清除功能32、请列出你了解的web服务器负载架构NginxHaproxyKeepalivedLVS 33、查看http的并发请求数与其TCP连接状态netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:修改/etc/security/limits.conf* soft nofile 10240* hard nofile 10240重启后生效
34、用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -2035、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线#!/bin/bashfor ip in `seq 1 255`do{ping -c 1 192.168.1.$ip > /dev/null 2>&1if [ $? -eq 0 ]; thenecho 192.168.1.$ip UPelseecho 192.168.1.$ip DOWNfi}&donewait
#!/bin/bashfor n in `seq 14`do date -s "11/0$n/14"touch access_www_`(date +%F)`.logdone
cut方法1:# ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1192.168.20.130awk方法2:# ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'192.168.20.130awk多分隔符方法3:# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'192.168.20.130sed方法4:# ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.*ddr:(.*)Bc.*$#\1#g'192.168.20.130
39、请写出下面 linux SecureCRT 命令行快捷键命令的功能?
Ctrl + aCtrl + cCtrl + dCtrl + eCtrl + lCtrl + uCtrl + ktabCtrl+shift+cCtrl+shift+v解答:Ctrl + a —->光标移动到行首Ctrl + e —->光标移动到行尾Ctrl + c —->终止当前程序Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断Ctrl + l —->清屏Ctrl + u —->剪切光标以前的字符Ctrl + k —->剪切光标以后的字符Ctrl + y —->复制u/k的内容Ctrl + r —->查找最近用过的命令tab —->命令或路径补全Ctrl+shift+c —->复制Ctrl+shift+v —->粘贴40、每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)# cat a.sh#/bin/bashcd /var/www/ && /bin/tar zcf /data/html-`date +%m-%d%H`.tar.gz html/# crontab –e00 00 * * * /bin/sh /root/a.sh
一、Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 答: 常见的Linux发现版本有Redhat、Centos、Debian、Ubuntu、Suse 最擅长Redhat和Centos Redhat官网:www.redhat.com Centos官网:www.centos.org 我最擅长Linux基本命令操作及相关服务搭建 2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? 答: 开机步骤 a、首先是bios加电自检、初始化,这个过程会检测相关硬件(cpu、内存、显卡、硬盘等) 然后读取一个启动顺序,以硬盘为例,会读取硬盘中的MBR。 b、加载内核读取/boot里边的配置文件。 c、启动初始化进程,开始运行/sbin/init d、读取/etc/inittab确定运行级别 e、根据/etc/rc.d/rcN.d加载开机启动程序,rcN.d都是链接文件,都指向/etc/rc.d/init.d再运行/etc/rc.d/rc.local f、用户登录(3种方式ssh、命令行、图形化) g、进入loginshell,以命令行为例,首先读取/etc/profile这个全局配置文件 然后再针对当前用户读取家目录中的 ~/.bash_profile和~/.bash_login和~/.profile h、最后一步就是打开non-loginshell 进入图形化后手动新建一个终端,但这个shell不读取/etc/profile 忘记密码 a、重启系统,在GRUB界面,选取忘记密码的系统,按e键进入编辑模式 b、选项Kernel.....按e键进行编辑 c、在编辑界面rhgbquiet后加空格,然后输入"single"或"1"回车 d、按b启动进入单用户模式 f、进入系统后passwd回车输入新密码(如果有selinux,先暂时关闭setenforce0) 3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G) 答: /boot200M /swap16G /70G /data剩下的全部空间 4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤。 答: 首先把系统关机,然后以光盘启动进入救援模式(linuxrescue) 执行"fsck.ext3-y/dev/sda2"(假如只读的分区类型为ext3,分区为/dev/sda2) 5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下。 答: a、可以多用几张DVD一台一台的安装。 b、可以用Kickstart批量安装(客户端从网络启动) 6.用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决? 答: a、编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,将HWADDR和MAC地址这两行删除。 b、修改文件/etc/udev/rules.d/70-persistent-net.rules,删除之前eth0所在的行,将下一行eth1修改为eth0 c、reboot 7.Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么? 答: 网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-eth*(*代表数字) 要上外网需要:能够链接internet的网线(或无线)、有网卡 需要配置:IP、netmask、gateway、dns(自动或手动都ok,服务器一般自动) 8.一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件? 答: 远程连接linux的软件:xshell、SecureCRT、putty、vnc(图形化) 上传和下载文件:lrzsz、sftp 9./mnt目录主要用于什么?/root目录跟root用户有什么关系?/根目录与/boot目录有什么联系? 答: /mnt一般用于挂载外接设备 /root是一个目录,是root用户的家目录 /boot目录是/目录下的一个子目录 10.某一天误操作,执行了rm-rf*,会有哪些情况发生?请举例。 答: a、如果当前目录为"/tmp",那么这个目录下的东西会全部删除(默认不包含隐藏文件) b、如果当前目录为"/",那么系统上的数据将会丢失,且无法启动,系统崩溃(谨慎使用这个命令)二、Linux命令及文件操作 1.在/tmp/目录下创建test.txt文件,内容为:Hello,World!,用一个命令写出来。 答: echo "Hello,World!" > /tmp/test.txt 2.给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。 答: 655 默认是644,可以通过"chmod 655 /tmp/test.txt" 3.用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入 如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net 答: 末行:G 首行:gg 行首:^(Shift+6) 行尾:$(Shift+4) 光标下插入一行:o 复制5行:5yy 删除10行:10dd 替换::%s/jingfeng/jfedu.net/g 4.查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下。 答: find / -name *txt -mtime +30 -type f -size +20k -perma= x -exec cp {} /data/backup/\; 5.当前test.txt所属的用户为root,组为abc,请将test.txt使拥有者为abc,组为root,写出命令。 答: chown abc:root test.txt 6.如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。 答: 更改字符模式:修改/etc/inittab一行为id:3:initdefault: 临时关闭selinnuxsetenforce0 临时关闭防火墙iptables-F 永久关闭selinux修改/etc/selinux/config一行为SELINUX=permissive 永久关闭防火墙 iptables -F; /etc/init.d/iptablessave 7.每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:`date+%Y%m%d`) 答: echo "mkdir/tmp/ `date+%Y%m%d`" >> /etc/rc.d/rc.local 8.如何查看文件内容,命令有哪些?查看文件第1行到3行,查看文件最后一行。 答: 查看文件内容:vim、cat、head、tail 查看第1到行:head -3 file 查看最后一行:tail -1 file 9.查看linux服务器IP的命令,同时只显示包含ip所在的行打印出来。 答: 以eth0为例 只打印所在的行:ifconfig eth0 | grep "inetaddr:" 只打印ip:ifconfig eth0 | grep "inetaddr:" | awk -F: '{print$2}' | awk -F ' ' '{print$1}' 10.将普通用户test加入root组的命令是? 答: usermod -G root test
答案一一般是简单回答,答案二一般问详细说明,总体来说光看字面意义是不够理解的,真正的实施过才能更好的理解其中的道理.
PHP缓存加速器?
答案一:加速页面的访问速度
答案二:Php缓存加速可以提高用户的访问速度,它的过程是客户端向网站发送请求,PHP程序请求再传送给libphp5.so处理模块,php在磁盘查找php文件并加载到内存中,libphp5.so将php源代码编译成操作码,libphp5.so执行操作码,然后把操作码缓存,当客户再次访问时,就直接读取php缓存中的操作码文件
nginx,PHP版本,mysql版本?
答案一:nginx -v 显示nginx版本 php -v 显示 php版本 mysql -V 显示mysql 版本进入到数据库命令行输入 status
PV,UV的概念?
答案一:PV:即页面浏览量,网页浏览是评价网站流量最常用的指标之一,简称PV
UV:即独立访客数,指访问网站站点或某个页面不同IP地址人数,在同一天内UV只记录第一次进入网站具有独立IP的访问者,在同一天内再次访问网站则不计数
答案二:PV访问量(Page View),即,每打开一次页面PV计数+1,刷新页面也是。
IP访问数指独立IP访问数,计算是以一个独立的IP在一个计算时段内访问网站计算为1次IP访问数。在同一个计算时段内不管这个IP访问多少次均计算为1次。计算时段有以1天为一个计算时段,也有以1个小时为一个计算时段
UV访问数(Unique Visitor)指访问数,一台电脑终端为一个访客。
在同一个局域网中对互联网访问时对外通常是同一个IP,如果该局域网中有10台终端在同一个计算时段内访问同一个网站,对该网站的独立IP访问数贡献为1,而不是10。而此时UV访问数则为10。
SVN和GIT说详细点?
答案一:
1.GIT是分布式的版本控制系统,SVN不是,SVN属于集中式的版本控制系统
2.GIT把内容按元数据方式存储,而SVN是按文件
3.GIT分支和SVN的分支不同,GIT更适用于代码管理,SVN更适用于项目管理
4.GIT没有一个全局的版本号,而SVN有
5.GIT的内容完整性要优于SVN,GIT的内容存储使用的是哈希算法
答案二:
他们都可以做版本控制系统。SVN属于集中式的版本控制系统而git属于分布式的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器, SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等。 Git是一个分布式版本控制系统,操作命令包括:clone,pull,push,branch ,merge ,push,rebase,Git擅长的是程序代码的版本化管理。
SVN 的优缺点
SVN对中文支持好,操作简单,使用没有难度,美工人员,产品人员,测试人员,实施人员都可轻松上手。使用界面统一,功能完善,操作方便。
Git的优缺点
对程序源代码进行差异化的版本管理,代码库占极少的空间。易于代码的分支化管理。不支持中文,图形界面支持差,使用难度大。不易推广。
分布式版本控制系统最大的特点是不需要每次提交都把文件推送到版本控制服务器,而是采用分布式版本库的机制,使得每个开发人员都够从服务器中克隆一份完整的版本库到自己计算机本地,不必再完全依赖于版本控制服务器,使得源代码的发布和合并更加方便,并且因为数据都在自己本地,不仅效率提高了,而且即便我们离开了网络依然可以执行提交文件、查看历史版本记录、创建分支等等操作
Git则是关注于文件数据整体的变化,直接会将文件提交时的数据保存成快照,而非仅记录差异内容,并且使用SHA-1加密算法保证数据的完整性。
他问我把网站的http改https怎么个改发我不会?
答案一:
需要在服务器安装CA证书,现在有免费和收费两种,需要申请CA证书,然后在服务器进行安装。
答案二:
HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层。HTTPS 不同于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443。
HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
比如网站被黑客攻击怎么解决?
答案一:
1、确认被攻击的范围网站被篡改能攻击都只有网站的Webshell,也有可能攻击者通过Webshell提权,需要相应的管理权限。
2、备份日志备份日志(如IIS、apache、FTP、Windows/Linux/Unix等日志)。
3、清除后门程序后门程序如asp、aspx、php、jsp、cgi、py等脚本木马。
4、修复漏洞
5、更改原来配置
答案二:
1、确认被攻击的范围网站被篡改,可能攻击都只有网站的权限就是常说的Webshell,也有可能攻击者通过Webshell提权,已经获取到服务器的权限,甚至已经渗透到内网。所以你通过日志等迹象来判断和确认攻击的范围。
2、备份日志备份日志(如IIS、apache、FTP、Windows/Linux/Unix等日志)。也许部份日志已经被黑客清除,可以通过日志恢复等方法,尽量找到更多的日志。如果有大的损失,完全可以报警,这时候日志就发挥重要作用了,办案人员可以通过日志寻找入侵者的行踪。日志还有一个重要作用就是或许可以找到黑客攻击该网站时使用的方法,并从中寻找漏洞所在。
3、清除后门程序一般黑客会为了长期巩固“成果”,会安装各种后门程序如asp、aspx、php、jsp、cgi、py等脚本木马。如果黑客已经获取到服务器权限,那么你就检查基于系统的后门如Rootkit、反弹远程控制木马,检查黑客是否替换程序、克隆管理员账号等。
4、修复漏洞仅仅清除后门是不够的,必须找到漏洞所在,这才是从根本上解决安全问题,这个过程难度是最高的,一般会涉及到开发,需要具有丰富经验的安全人员才能解决。
5、更改原来配置修复漏洞后,我们需要更改一些以前的配置文件,如网站后台密码、数据库连接密码、如果是ACCESS、ASA等格式数据库需要变更路径或者文件名,这样的目的就是防止黑客通过以前的记录信息,再次入侵,同时更改Administrator、Root等管理员密码。
网站的防范措施
答案一:
1. linux系统安装后,启用防火墙,只允许信任源访问指定服务,删除不必要的用户,关闭不必要的服务等。
2. 收集日志,包括系统日志,登录日志,程序日志等,及时发现潜在风险。
3. 针对用户登录实时收集,包括登录时间,密码重试次数以及用户执行命令记录等。
4. 对敏感文件或目录变化进行事件监控,如/etc/passwd、/etc/shadow、/web、/tmp(一般上传文件提权用)等。
5. 进程状态监控,对新增或可疑进程做好记录并通知。
6. 对上线的服务器系统、Web程序进程安全漏洞扫描。
最后,没有绝对的安全,只有尽可能减少攻击面,提供系统防护能力。
答案二:
1、渗透性测试如果有条件可以聘请安全人员进行渗透性测试,或者聘请专业的安全人员维护。
提示:渗透性测试是经过授权后,安全人员模拟黑客攻击,来寻找网络、服务器、网站的脆弱点和漏洞,并且给予相应的安全解决方案。
- 2、加强安全意识假若有层层的安全设备保护网站,并且网站源码通过专业的安全审计,如果网站后台密码或者FTP口令设置成123456,那么再好的防护也是没有用的。
网站安全不容忽视,黑客可以通过网站一个小小的漏洞,控制网站权限,然后在Webshell中通过提权获取服务器权限,甚至可以以该服务器为跳板,通过溢出、嗅探、暴力破解、社会工程学等手段控制整个内部网络,遍历网络资源。从而导致泄密、核心数据破坏等安全事件不断发生。
要想网站不被黑,其实还有其他的办法的,那就是CDN技术,在各地的部署CDN节点,这样就可以避开源网站不被黑客直接攻击,提高源网站的安全性,同时还能加快网站的访问速度。可谓是两全其美。
更多网站安全防范措施请查看以下链接:
http://solin.blog.51cto.com/11319413/1903543
http://os.51cto.com/art/201703/534066.htm
上线一台新服务器搭建LNMP遇到什么问题?
答案一:
会遇到nginx 配置优化和配置和需要进行负载均衡的设置,服务的最基本启动状态,php是否支持mysql数据库,网站访问不到404,访问速度慢等
那个跳板机怎么个原理你知道吗?
答案一:
答:最初跳板机是为了控制运维人员访问服务器而做的用户登录控制服务器,现在发展为可以做运维审计等功能更多的堡垒机。跳板机又是黑客攻击服务器的中间服务器,通过跳板机攻击服务器会让受害服务器很难查到黑客的主机。
binlog日志里面都有些什么?
答案一:
binlog主要是以二进制形式存放SQL语句在磁盘中,主要用于数据恢复和slave端和master同步
sql语句,时间,位置点,server-id,MySQL版本,
不知道存储过程,触发器之类的会是什么情况,还跟binlog模式有关
答案二:
binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。因为有了数据更新的binlog,所以可以用于实时备份,与master/slave复制和binlog有关参数
1、统计nginx日志中20:00至22:00每分钟action请求次数最多的前五个时间点(按请求次数排序)
答案一:
cat access.log |sed -n '/20:00:00/,/22:00:00/p' >12.txt | awk -F: '{count[$2":"$3]++} END {for (minute in count) print minute, count[minute]}' 12.txt | sort -rn|head -5
脚本统计nginx日志访问IP次数最多的前10名
答案一:
awk '{c[$1]++}END{for(i in c) print i,c[i]}' | sort -k2 -nr | head
主从同步怎么来设置那台是主?
答案一:
在要设置的主服务器的mysql上开启binlog,允许日志同步,指定server-id,授权用户与主可以同步然后添加replication slave权限到从服务器,在从服务器上配置要同步的主服务器,然后开启slave功能,start slave。
你们网站的备份是怎么做的?
答案一:
网站程序及数据库所以的文件网站的一些数据,mysql,php,html的后缀名都要做备份,還有一些重要的数据进行备份
主从同步大概怎么实现,简单说下?
怎么来判断主从同步正常工作?
答案一:
查看从服务器的数据库状态 mysql>show slave status\G;,查看下面状态内容slave_IO 和slave_SQL是否都是YES ,如果少一个yes,或者没有yes,那就是同步错误
主从同步,数据必须一致才能同步吗?
答案一:
不是,mysql主从同步会同步主库的更改操作。包括数据的增删改查,也有表结构的变更,例如字段类型更改,字段添加删除等。
如果设置主从同步的时候设置的全库,那么增加一个表也会同步。A机器有一些日子文件,用FTP写脚本放到B服务器怎么写脚本?
答案一:
rsync inotify实时同步,把原理rsync+inotify可以实时的去监测、同步数据
OSI七层模型每一层都是什么协议?
答案一:
第一层物理层:主要是一些电气接口标准,例如RJ45,Ethernet
第二层数据链路层:主要是让数据成帧发送,例如IEEE802.3,802.5,frame
第三场网络层:主要是把数据封装成包然后再传输,例如IP,IPX
第四层传输层:主要是把数据分发给各个端口,例如 TCP,UDP
第五层会话层:主要是建立管理会话进程,负责两端数据同步,例如,RPC,SQL
第六层表示层:主要是把数据解释成可以被程序理解的内容, 例如MPEG JPEG
第七层应用层:主要把内容发送给程序执行,例如HTTP,SNMP
监控都监控什么东西?主要监控什么?报警的话你会怎么做?
答案一:
监控内存,硬盘大小,监控进程服务器性能参数监控,硬件监控数据库服务监控等
使用的是邮箱报警 ,报警的话一般是网路,然后会给机房打电话,把tracert图发给idc
nginx做哪些性能优化?安全优化?
答案一:
(1) 精简模块
(2) GCC编译参数优化
(3) 工作进程数的选择
指令:worker_processes
(4) 是否绑定CPU
指令:worker_cpu_affinity
(5) 打开文件数限制
指令:worker_rlimit_nofile
(6) 惊群问题
指令:accept_mutex
(7) 网络IO模型
指令:use
(8) 连接数
指令:worker_connections
(9) 打开文件缓存
指令:open_file_cache
PHP做什么优化?
答案一:
1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。
2.echo 比 print 快。
3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。
4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。
5.注销那些不用的变量尤其是大数组,以便释放内存。
Apache你知道怎么配置吗,有没有状态码?
答案一:
编译及安装软件包即可
301 重定向
404 错误页
DNS解析原理?
答案一:
DNS主要查询是通过递归方式查询,在自己的服务器内没有的域名和IP的对应关系时,会去跳转到下一个DNS服务器去查询域名对应的IP。
你怎么配置DNS解析?
答案一:
1网卡设置配置文件里面DNS服务器地址设置,
2.系统默认DNS服务器地址设置。
3,hosts文件指定
iptables只允许某个网段访问?
答案一:
更换网段即可
iptables -I INPUT -s 192.168.1.0/24 -p tcp –dport 22 -j ACCEPT
平常shell都写什么脚本?怎么写的说下思路?
答案一:
Lamp一键安装,首先是一些安装包得下载,然后解压安装,还需要测试php是否正常
还写过lamp,lnmp,lvs+keeplived等一键部署脚本,编译及安装软件包,配置文件修改,及服务的状态等
用shell怎么检查网站是否正常?靠什么判断?
答案一:
Curl + 网址 如果报错的话查看错误日志,排查原因
我们公司拉了一条别电信的网线,然后用这台主机访问网站,就可以达到测试的目的了
或者使用站长工具等
比如你监控的服务器硬件出问题,怎么解决?
答案一:
比如cpu坏了就只能更换了,如果是内存坏了,可以更换
如果是硬盘是raid5的话是可以恢复数据的,别的raid是不可以的
keepalived实现原理?
答案一:
Keepalived正常运行时,会启动3个进程,分别是core、check和vrrp。
vrrp模块是来实现VRRP协议的;
check负责健康检查,包括常见的各种检查方式;
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
HAPROXY和NGINX有什么区别?
Lvs只负责负载均衡功能,而haproxy有许多功能可能出现问题,就好比诺基亚和安卓手机一样,
诺基亚从来不会卡,而安卓手机肯定发生过卡机现象,这里做了一个比喻,把lvs比作诺基亚,而haproxy比作lvs。
HAProxy:
提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
让你从nginx访问日志,把一天访问网站次数最多的IP打印出来用什么命令?
答案一:
awk '{print $1}' 日志地址 | sort | uniq -c | sort -n -k 1 -r | head -n 100
mysql慢查询语句怎么优化
答案一:
一 硬件和网络
二 系统
三 架构体系
四 数据库版本控制
五 表设计优化
六 数据库引擎的选择
七 SQL语句优化
八 my.cnf配置文件优化
ELK索引怎么做
答案一:
1)解压到指定目录
(2)在根目录执行bin/kibana直接启动 (3)访问http://IP地址:5601 配置一个ElasticSearch索引 (4)在logstach里面添加数据ELK集群怎么配
答案一:
(1)解压到指定目录
(2)配置elasticsearch.yml里面,集群名字和节点名字,如果不配置默认集群名为elasticsearch,节点名随机生成一个 (3) 在线安装head和bigdisk插件 直接在elasticsearch的根目录下,分别输入: bin/plugin --install mobz/elasticsearch-head 安装head bin/plugin --install lukas-vlcek/bigdesk 安装bigdesk (4)scp分发安装完毕后的elasticsearch (5)依次启动各个机器上的elasticsearchjekins从哪里拉取代码
答案一:
境搭建 a) tomcat JAVA_HOME=C:\Program Files\Java\jdk1.6.0_24 JRE_HOME=C:\C:\Program Files\Java\jre6 b) ant ANT_HOME=C:\apache-ant-1.8.2 c) Jenkins 在网站下载war包,然后放倒tomcat的webapp文件夹中,启动to
你们使用的gitlab是什么版本
答案一:
gitlab-ce-7.14.3-ce.0.el6.x86_64.rpm
7.14.3版本
你在公司负责什么,我说监控等等,流量异常,怎么定位?
答案一:
先查看IP地址在查看这台服务器的带宽和阈值
keepalived原理,vrrp原理,几层协议
答案一:
Keepalived原理 。LVS结合keepalived,就实现了3层、4层、5/7层交换的功能
Keepalived正常运行时,会启动3个进程,分别是core、check和vrrp。
vrrp模块是来实现VRRP协议的;
check负责健康检查,包括常见的各种检查方式;
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
你们公司nginx起几个进程?
答案一:
一个nginx: master 进程,同时会开启,几个nginx: worker process
nginx worker怎么配,为什么这样配?
答案一:
worker_processes 1; events { worker_connections 1024; } http{ upstream myproject { #这里指定多个源服务器,ip:端口,80端口的话可写可不写 server 192.168.43.158:80; server 192.168.41.167; } server { listen 8080; location / { proxy_pass http://myproject; } } }
内网通信怎么做的?
答案一:
Vlan可以,nat,不做限制策略就可以
用户访问某个网站的流程?
答案一:
第一步:用户第一次访问某个 网站域名 ,会从本地hosts文件中查找是否有对应域名的IP,如果没有会去查找DNS服务器。
第二步:DNS会去查找是否有域名对应的IP,如果没有,会去递归查找更深层的DNS服务器
第四步:DNS把域名对应的IP地址返回给用户,用户与IP地址建立连接
第五步:用户与网站的IP建立连接,发送TCP HTTP等请求,网站服务器返回页面,用户看到网站内容
TCP/IP三次握手?
答案一:
1.源地址给目标地址发送请求连接发送SYN同步包 。
2.目标地址接收到源地址的请求SYN返回SYN+ACK 确认包。
3.源地址接收到目标地址的SYN+ACK确认包,返回ACK 确认包,最终确认建立连接。
怎么加入开机自启动的?
答案一:
Chkconfig add 服务名称
chkconfig -leve 启动级别 服务名 on
要考虑到它的启动顺序 先启动rpc 在启动nfs
MHA怎么做过的?
答案一·:
1. MHA manager启动时的校验
2.监控master server
3.侦测到master server异常
4. 开启failover
5. 隔离master server
6. 恢复一个新的master
7. 激活一个新的master
8. 恢复剩余的slave
9. 通知切换结果
答案二:
a、MHA manager启动时的校验阶段
根据配置文件校验复制配置以及识别当前的master 导致监控终止情形:复制配置异常,存在的异常slave,一些需要的脚本脚本异常 MHA manager启动前可以通过masterha_check_ssh以及masterha_check_repl检测
b、监控master server阶段
MHA manager启动成功后,输出日志[info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond.. MHA会定期ping master,缺省的间隔为1秒,直到master死掉 MHA manager不会监控slave的状态,任意的Stopping/Restarting/Adding/Removing slaves不影响当前MHA监控 当添加或移除slave节点时,建议修改配置文件以及重启MHA managerc、侦测到master server异常阶段
3次连续ping master失败,参数secondary_check_script可用于double check
d、开启failover阶段
MHA再次读取配置文件(防止主从配置已更改),校验master以及当前masetr的从库 MHA也会校验诸如复制异常以及是否存在一些从库有不同的主 启动failover(排除上次failover失败或者failover时间间隔太短)
e、隔离master server阶段(可选)
如果配置文件定义了IP漂移脚本则此时会关闭master IP
如果配置文件定义了关闭master脚本,则调用脚本关闭master以避免脑裂
f、恢复一个新的master
从slave节点获取最新的end_log_pos (Read_Master_Log_Pos)位置 从上一步获取的位置开始,读取及保存crashed master全部二进制日志文件(ssh可达) 决定新的master(根据配置文件定义的优先级别) 产生差量的binary/relay log events并且apply到新的master
g、激活一个新的master
如果配置文件定义了IP漂移脚本则此时会将IP漂移到新masteri、恢复剩余的slave
对所有从库并行地产生差量binary/relay log events 并用apply差量binary/relay log events到各从库 启动复制
vip怎么进行切换的?
答案一:
我们用的是lvs+keeplived,可以实时查看节点 是否正常,如果不正常就切换别的vip
怎么查找最进更新的语句?
答案一:
更新也即是修改语句
update 表名set 列名=表达式 ……[where 条件]如update stuset name=‘王’,sex='男'where class=‘二班’;
主从复制原理
答案一:
客户端向web服务器发送一条数据,主服务器收到这条数据,写到binlog日志文件,然后再通过i/o线程读取到这条数据,然后在写到中继日志里,再通过sql线程读取到,然后就实现主从复制的原理了。
答案二:
1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log); (3) slave重做中继日志中的事件,将更改应用到自己的数据上。该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。 SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。 此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。
binlog日志怎么查看?
答案一:
两种,一种是在数据库命令行下直接用show binlog events 直接查看,另外一种是在Linux命令行下用mysqlbinlog命令查看
答案二:
只查看第一个binlog文件的内容
show binlog events;
查看指定binlog文件的内容
show binlog events in 'mysql-bin.000002';
查看当前正在写入的binlog文件
show master status\G
获取binlog文件列表
show binary logs;
CDN是怎么做的?在哪里做?
答案一:
缓存处理服务器,在每个节点上去做
答案二:
互联网公司做CDN,要看他为什么做CDN:CDN能够提升用户体验,降低运维成本,能够减轻源站压力,防止恶意攻击等很多有益的作用;
而互联网公司要做CDN,至少应该看以下几点: 1. 我们公司用户分布情况和当前用户(含竞争对手)体验对比情况。 2. 我们公司技术能力和运维能力。 3. IDC效果和CDN效果,费用和以及双方带来体验所产生的收益差。 4. 公司发展战略和实际预算。 有以上几点以后,就可以选CDN了。主流CDN服务分为:WSA全站加速),动态页面加速产品,静态页面加速产品,下载加速产品,流媒体加速产品(直播、点播),移动(无线)加速产品,防攻击类产品,云加速产品(当前概念炒比较火)。 根据网站实际情况和对应服务情况,可以选择一个比较优的服务了。 而目前国内的CDN公司主要是,网宿、蓝讯、帝联、快网、世纪互联。其服务水平和价格都会有一定差异,网站应该综合考虑。
负载均衡怎么做的?
答案一:
集群如lvs可以做负载均衡,nginx+tomcat也可以做负载均衡,
web服务用的什么环境?
答案一:
Lamp lnmp lvs +keeplived
数据库用的什么?怎么做的?怎么监控?
答案一:
Mysql mysql主从复制 读写分离 zabbix监控的
误操作怎么恢复数据?
答案一:,
可以通过第三方软件恢复数据如extundelete 是可以恢复数据的
一键部署脚本是自己写的么?
答案一:
会的,写过lamp,lnmp,lvs+keeplived等一键部署脚本,编译及安装软件包,配置文件修改,及服务的状态等
全网备份备份什么?
答案一:
网站程序及数据库所以的文件网站的一些数据,mysql,php,html的后缀名都要做备份,還有一些重要的数据进行备份。
zabbix都监控什么?
答案一:
监控内存,硬盘大小,监控进程服务器性能参数监控,硬件监控数据库服务监控等
系统负载、网络流量 ,系统服务等。
NFS存储这里是怎么做的?
答案一:
我们nfs主要做的是数据同步,把每天服务器的数据都写到nfs里面
iptable防火墙的工作原理?
答案一:
iptables主要是内部netfilter模块做过滤控制,netfilter的工作原理是 prerouter→input→forward→output→postrouter。预路由、入接口、转发管理、出接口、后路由
端口映射该怎么做?
答案一:会,先配置外部接口,再配置内部接口,然后
Ip nat inside source static tcp 内部IP 端口 外部IP 端口
配置路由么?
答案一:会,常见的静态静态路由,DHCP ,RIP、nat ,ospf等
会划分网段么?
答案一:
会,是通过vlan还是通过子网掩码。Vlan可以在私网地址划分一个网段。
答案二:
(1)创建VLAN,确定每种业务所属的VLAN。
(2)关联IP子网和VLAN,实现根据数据帧中的源IP地址或指定网段确定VLAN。
(3)以正确的类型把各端口加入对应的VLAN,实现基于IP子网的VLAN通过当前端口。
(4)配置VLAN划分方式的优先级,确保优先选择基于IP子网划分VLAN。然后使能基于IP子网划分VLAN。
云服务了解么?
答案一:
了解,云服务是指通过网络按需按量自助的获得用户想要得到的服务,就像云彩一样,可以自由的获得需求,云服务和物理机的区别是云服务器可以运行的比物理机要稳定,物理机会消耗电量,也可能会硬件问题,断电等总体来说,云服务可以实现物理机的优点,也可以弥补物理机的缺点。
答案二:
通过使计算分布在大量的机上,而非本地计算机或远程服务器中,企业的运行将与互联网更相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和。
好比是从古老的单台发电机模式转向了电厂集中供电的模式。它意味着计算能力也可以作为一种商品进行流通,就像煤气、水电一样,取用方便,费用低廉。最大的不同在于,它是通过互联网进行传输的。
公共云和私有云
简单来说,云服务可以将企业所需的软硬件、资料都放到网络上,在任何时间、地点,使用不同的IT设备互相连接,实现数据存取、运算等目的。当前,常见的云服务有公共云(Public Cloud)与私有云(Private Cloud)两种[3] 。
公共云成本较低
公共云是最基础的服务,多个客户可共享一个服务提供商的系统资源,他们毋须架设任何设备及配备管理人员,便可享有专业的IT服务,这对于一般创业者、中小企来说,无疑是一个降低成本的好方法。公共云还可细分为3个类别,包括Software-as-a-Service, SaaS(软件即服务)、Platform-as-a-Service, PaaS(平台即服务)及Infrastructure-as-a-Service, IaaS(基础设施即服务)。
网络部分
一、三次握手四次挥手1.1 为什么连接的时候是三次握手,关闭的时候却是四次握手?答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。1.2 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?MSL(MaximumSegment Lifetime),TCP允许不同的实现可以设置不同的MSL值。第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。1.3 为什么建立连接是三次握手,关闭连接确是四次挥手呢?建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。1.4 为什么不能用两次握手进行连接?答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。1.5 如果已经建立了连接,但是客户端突然出现故障了怎么办?TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。1.6 为什么要三次握手?保证可靠的核心就是双方都需要确认自己发送和接受信息的功能正常,但因为网络环境的不稳定性,这一秒能收发下一秒可能网络核心就发生严重拥塞,所以世界上不存在完全可靠的通信协议.两次握手会怎样?若建立连接只需两次握手,客户端并没有太大的变化,在获得服务端的应答后进入ESTABLISHED状态,即确认自己的发送和接受信息的功能正常.但如果服务端在收到连接请求后就进入ESTABLISHED状态,不能保证客户端能收到自己的信息,此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。1.7 为什么要四次挥手?TCP连接的释放一共需要四步,因此称为『四次挥手』.我们知道,TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。第一次挥手:若A认为数据发送完成,则它需要向B发送连接释放请求.该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u.此时,A将进入FIN-WAIT-1状态。1,FIN=1表示该报文段是一个连接释放请求.2,seq=u,u-1是A向B发送的最后一个字节的序号.第二次挥手:B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放.此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:ACK=1,seq=v,ack=u+1. ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答.1,seq=v,v-1是B向A发送的最后一个字节的序号.2,ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节.A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求.第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。第三次挥手:当B向A发完所有数据后,向A发送连接释放请求,请求头中包含:FIN=1,ACK=1,seq=w,ack=u+1.随后B进入LAST-ACK状态.第四次挥手:A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态.该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB.当B收到确认应答后,也便进入CLOSED状态,撤销TCB。1.8 为什么TCP客户端最后还要发送一次确认呢?一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。1.9 简述TCP三次握手的过程?答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据简版:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了。三次握手我们先明确两个定义:1,client为数据发送方2,server为数据接收方好,下面进行三次握手的总结:1,client想要向server发送数据,请求连接。这时client想服务器发送一个数据包,其中同步位(SYN)被置为1,表明client申请TCP连接,序号为j。2,当server接收到了来自client的数据包时,解析发现同步位为1,便知道client是想要简历TCP连接,于是将当前client的IP、端口之类的加入未连接队列中,并向client回复接受连接请求,想client发送数据包,其中同步位为1,并附带确认位ACK=j+1,表明server已经准备好分配资源了,并向client发起连接请求,请求client为建立TCP连接而分配资源。3,client向server回复一个ACK,并分配资源建立连接。server收到这个确认时也分配资源进行连接的建立。那么问题来了为什么需要第三次握手?第三次握手失败了怎么办?三次握手有什么缺陷可以被黑客利用,用来对服务器进行攻击?怎么防范这种攻击?接下来进行一一解答。1.9.1 为什么需要第三次握手?答:如果没有第三次握手,可能会出现如下情况:如果只有两次握手,那么server收到了client的SYN=1的请求连接数据包之后,便会分配资源并且向client发送一个确认位ACK回复数据包。那么,如果在client与server建立连接的过程中,由于网络不顺畅等原因造成的通信链路中存在着残留数据包,即client向server发送的请求建立连接的数据包由于数据链路的拥塞或者质量不佳导致该连接请求数据包仍然在网络的链路中,这些残留数据包会造成如下危害危害:当client与server建立连接,数据发送完毕并且关闭TCP连接之后,如果链路中的残留数据包才到达server,那么server就会认为client重新发送了一次连接申请,便会回复ACK包并且分配资源。并且一直等待client发送数据,这就会造成server的资源浪费。1.9.2 第三次握手失败了怎么办?答:当client与server的第三次握手失败了之后,即client发送至server的确认建立连接报文段未能到达server,server在等待client回复ACK的过程中超时了,那么server会向client发送一个RTS报文段并进入关闭状态,即:并不等待client第三次握手的ACK包重传,直接关闭连接请求,这主要是为了防止泛洪攻击,即坏人伪造许多IP向server发送连接请求,从而将server的未连接队列塞满,浪费server的资源。1.9.3 三次握手有什么缺陷可以被黑客利用,用来对服务器进行攻击?答:黑客仿造IP大量的向server发送TCP连接请求报文包,从而将server的半连接队列(上文所说的未连接队列,即server收到连接请求SYN之后将client加入半连接队列中)占满,从而使得server拒绝其他正常的连接请求。即拒绝服务攻击1.9.4 怎么防范这种攻击?1,缩短服务器接收客户端SYN报文之后的等待连接时间,即SYNtimeout时间,也就是server接收到SYN报文段,到最后放弃此连接请求的超时时间,将SYNtimeout设置的更低,便可以成倍的减少server的负荷,但是过低的SYNtimeout可能会影响正常的TCP连接的建立,一旦网络不通畅便可能导致client连接请求失败2,SYNcookie + SYN proxy 无缝集成(较好的解决方案)SYNcookie:当server接收到client的SYN之后,不立即分配资源,而是根据client发送过来的SYN包计算出一个cookie值,这个cookie值用来存储server返回给client的SYN+ACK数据包中的初始序列号,当client返回第三次握手的ACK包之后进行校验,如果校验成功则server分配资源,建立连接。SYNproxy代理,作为server与client连接的代理,代替server与client建立三次握手的连接,同时SYNproxy与client建立好了三次握手连接之后,确保是正常的TCP连接,而不是TCP泛洪攻击,那么SYNproxy就与server建立三次握手连接,作为代理(网关?)来连通client与server。(类似VPN了解一下。)二、路由2.1 填空题。1. 静态 路由设定后,若 网络 拓扑结构发生变化,需由系统 管理员 修改路由的 设置 。2.网络管理的重要任务是: 控制 和 监控 。3.在安装Linux系统中,使用 netconfig 程序对网络进行配置,该安装程序会一步步提示用户输入 主机名 、 域名 、 域名服务器 、 IP地址 、 网关地址 和 子网掩码 等必要信息。4. RIP 协议是最为普遍的一种内部协议,一般称为动态路由信息协议。5. DHCP 可以实现动态IP地址分配。6.网络管理通常由 监测 、 传输 和 管理 三部分组成,其中 管理部分 是整个网络管理的中心。7. Ping 命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用于 测试网络的连通性 。8.进行远程登录的命令是 telnet 。9.DHCP是动态主机配置协议的简称,其作用是: 为网络中的主机分配IP 地址。10.路由选择协议(RIP)的跳数表示到达目的地之前必须通过的网关数,RIP接受的最长距离是 15 跳。11.ping命令用于测试网络的连通性,ping命令通过 ICMP 协议(internet控制信息协议)来实现。2.2 选择题。12.下面的网络协议中,面向连接的的协议是: A 。A 传输控制协议B 用户数据报协议C 网际协议D 网际控制报文协议13.一台主机要实现通过局域网与另一个局域网通信,需要做的工作是 C 。A 配置域名服务器B 定义一条本机指向所在网络的路由C 定义一条本机指向所在网络网关的路由D 定义一条本机指向目标网络网关的路由14.局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是 B 。A route add –net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0metric1B route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.255metric1C route add –net 172.16.1.0 gw 172.16.1.1 netmask 255.255.255.0metric 1D route add default 192.168.1.0 netmask 172.168.1.1 metric 1 15.下列提法中,不属于ifconfig命令作用范围的是 D 。A 配置本地回环地址B 配置网卡的IP地址C 激活网络适配器D 加载网卡到内核中16.在局域网络内的某台主机用ping 命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是 C 。A 主机IP设置有误B 没有设置连接局域网的网关C 局域网的网关或主机的网关设置有误D 局域网DNS服务器设置有误17.下列文件中,包含了主机名到IP 地址的映射关系的文件是: B 。A /etc/HOSTNAMEB /etc/hostsC /etc/resolv.confD /etc/networks18.在TCP/IP 模型中,应用层包含了所有的高层协议,在下列的一些应用协议中, B 是能够实现本地与远程主机之间的文件传输工作。A telnetB FTPC SNMPD NFS19.当我们与某远程网络连接不上时,就需要跟踪路由查看,以便了解在网络的什么位置出现了问题,满足该目的的命令是 C 。A pingB ifconfigC tracerouteD netstat20.DNS域名系统主要负责主机名和 A 之间的解析。A IP地址B MAC地址C 网络地址D 主机别名21.WWW服务器是在Internet上使用最为广泛,它采用的是 B 结构。A 服务器/工作站B B/SC 集中式D 分布式22.网络管理具备以下几大功能:配置管理、 A 、性能管理、安全管理和计费管理等。A 故障管理B 日常备份管理C 升级管理D 发送邮件23.关于代理服务器的论述,正确的是 A 。A 使用internet 上已有的公开代理服务器,只需配置客户端。B 代理服务器只能代理客户端http 的请求。C 设置好的代理服务器可以被网络上任何主机使用。D 使用代理服务器的客户端没有自己的ip 地址。24.实现从IP地址到以太网MAC地址转换的命令为: C 。A pingB ifconfigC arpD traceroute25.在DNS系统测试时,设named进程号是53,命令 D 通知进程重读配置文件。A kill –USR2 53B kill –USR1 53C kill -INT 63D kill –HUP 5326.在DNS配置文件中,用于表示某主机别名的是: B 。A NSB CNAMEC NAMED CN27.为保证在启动服务器时自动启动DHCP 进程,应对 B 文件进行编辑。A /etc/rc.d/rc.inet2B /etc/rc.d/rc.inet1C /etc/dhcpd.confD /etc/rc.d/rc.S2.3 简答题。28.写一条192.168.10.0网段从网关192.168.9.1出去的路由答:routeadd -net 192.168.10.0/24gw 192.168.9.129.给主机host:172.16.0.2增加gateway10.0.0.1答:routeadd 172.16.0.2 gw 10.0.0.1或者网卡配置文件更改30.网站出现500,502,400,403,404都是什么意思,怎么排查和解决答:500:服务器内部错误,因为服务器上的程序写的有问题,需要打开错误日志,查看日志,分析错误信息。502:网关错误,服务器作为网关或代理,从上游服务器收到无效响应。Nginx出现最多,出现502要么是nginx配置的不对,要么是php-fpm资源不够,可以分析php-fpm的慢执行日志,优化php-fpm的执行速度。400:错误请求,服务器不理解请求的语法。这可能是用户发起的请求不合理,需要检查客户端的请求。403:服务器拒绝请求。检查服务器配置,是不是对客户端做了限制。404:未找到请求的资源。检查服务器上是否存在请求的资源,看是否是配置问题。31.TCP有哪些了解,TCP连接状态中“TIME_WAIT”是什么意思,影响什么?答:关于tcp有点复杂,直接上图吧,更直观状态描述:CLOSED:这个没什么好说的了,表示初始状态。LISTEN:这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。SYN_RCVD:这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。SYN_SENT:这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。ESTABLISHED:这个容易理解了,表示连接已经建立了。FIN_WAIT_1:这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。CLOSING:这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。CLOSE_WAIT:这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。LAST_ACK:这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。32.简述DNS进行域名解析的过程。参考答案:首先,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;(3)若没有查到,则将请求发给根域DNS 服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。(4)若没有找到,则返回错误信息。33.什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?参考答案:静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表。动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习 网络的拓朴结构,并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。34.linux下常用的DNS服务软件是什么,举出几种常用的DNS记录,如果域名abc.com配置好了一台邮件服务器,IP地址为202.106.0.20,我该如何做相关的解析?是否了解bind的智能解析,如果了解请简述一下其原理。答案:1)常用的DNS软件是bind2)A记录地址记录MX记录邮件交换记录CNAME记录别名域记录3)修改abc.com 域名的配置文件,增加以下记录INMX 10 mail.abc.com.mailIN A 202.106.0.204)bind根据请求解析客户端的IP地址,做出不同的解析,其原理是在配置文件中,设定了view,在每个view都有客户端的IP地址段,bind服务器根据请求解析客户端的IP地址,匹配不同的view,再根据该view的配置,到相应的配置文件进行查询,将结果返回给请求的客户端。35.AB网络是通的,最少列出五种传输文件的服务nfs,ftp,scp,rsync,samba,http://36.我们都知道,dns既采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计?答:这个题需要理解的东西比较的多,分一下几个方面a,从数据包大小上分:UDP的最大包长度是65507个字节,响应dns查询的时候数据包长度超过512个字节,而返回的只要前512个字节,这时名字解释器通常使用TCP 从发原来的请求。b,从协议本身来分:大部分的情况下使用UDP协议,大家都知道UDP协议是一种不可靠的协议,dns不像其它的使用UDP的Internet应用(如:TFTP,BOOTP和SNMP等),大部分集中在局域网,dns查询和响应需要经过广域网,分组丢失和往返时间的不确定性在广域网比局域网上更大,这就要求dns客户端需要好的重传和超时算法,这时候使用TCP。三、七层模型3.1 说说TCP/IP的七层模型应用层 (Application):网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP表示层(Presentation Layer):数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)格式有,JPEG、ASCll、DECOIC、加密格式等会话层(Session Layer):建立、管理、终止会话。(在五层模型里面已经合并到了应用层)对应主机进程,指本地主机与远程主机正在进行的会话传输层 (Transport):定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层网络层 (Network):进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP数据链路层 (Link):建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。物理层(Physical Layer):是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层。物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。1, 运行 ifconfig -a 的时候提示 command not found ,会是什么原因,应该怎么办?
分析:(1) 查看环境变量是否配置或配置是否正确, whereis ifconfig 来查看所在路径,在通过echo $PATH来查看环境变量是否配置,未配置则vi /etc/profile 进行配置 export PATH=绝对路径: $PATH, 立即生效 source /etc/profile 。(2)查看命令是否安装,yum install ifconfig 试安装。2,文件权限0750是什么意思,还有那些常见的文件权限;目录权限0750是什么意思,有哪些常见的目录权限?
分析:文件权限0750:属主对文件具有最高权限可读可写可执行,属组具有可读可执行权限,其他无权限,无特殊权限;常见的文件权限0644,0500等;3,软连接和硬链接的区别是什么,删除软连接和硬链接对源文件会发生什么?
分析:软链接,以路径的形式存在,类似于Windows操作系统中的快捷方式;硬链接,以文件副本的形式存在但,不占用实际空间;硬链接文件与源文件的inode节点号相同,软链接可以 跨文件系统。删除软链接文件,对源文件及硬链接文件无任何影响;删除文件的硬链接文件,对源文件及软链接文件无任何影响。4, 想要在终端查看个别命令的输出,同时保存输出到文件,应该怎么做?
分析:如 ls | tee file ; ls >> file && cat file ;5,bash 里myar=foo 和 export myar=foo 有什么区别?
分析:myar=foo赋值,export myar=foo 添加环境变量。6,假设一个目录下面有多个访问日志文件,如何统计特定IP在特定时的访问次数。
分析:查看访问日志文件并且用grep过滤特定ip日志追加到一个文件(a.log),在查看a.log用sed 打印特定的时间,最后用wc -l 统计;可写成脚本。7,什么是swap,它有什么用途。
分析:swap是交换分区,作用是物理内存不够用时,把硬盘空间中的一部分空间释放出来,一供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。8,写文件的时候得到“文件系统已满”错误信息,但df显示还有剩余空间。
分析:在磁盘建立文件是需要两个条件(1)磁盘空间 (2)inode ; df显示有剩余空间那就是indoe分配完了,导致报此错误信息 ;可以删除一些不用的文件来释放indoe。9,umount时提示device is busy ,应该如何解决。
分析:查看是否占用进程,fuser检查 ,占用了 kill -9 杀死进程。10,如何获取什么进程在监听特定的端口。
分析:ss -npl | grep 端口11,列出常见的内网网段。
一般的 局域网 用的IP地址就叫内网10.x.x.x 172.16.x.x至172.31.x.x 192.168.x.x12,路由表的作用是什么,如何查看linux系统的路由表?
分析:路由表的主要作用是供路由器查找目标网络,进而确定转发接口及下一跳路由,完成数据包的转发功能;route -n13,尽可能的描述TCP链接的建立过程?
分析:TCP链接的建立就是我们常说的三次握手第一次握手:客户端发送syn包(syn=j)到服务器。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。三次握手完成后,客户端和服务器就建立了tcp连接。14,使用SSH公钥私钥对登录服务器的好处是什么,客户端与服务器端分别需要预先做哪些设置。
分析:公钥认证使登陆变得安全,快捷。客户端生成公钥和私钥(ssh-keygen)将自己的公钥存放到服务器。15,列举常用的DNS记录类型,并以163.com为例说明使用什么命令查看。
分析:A:地址记录(Address),返回域名指南的ip地址 NS:域名服务记录(Name Server),返回保存下一级域名信息的服务地址。该记录只能设置域名不能设置ip地址。 MX:邮件记录(Mail exchange),返回接受电子邮件的服务地址。 CNAME:规范名称记录(Canonical Name),返回另一个域名,及当前查询是另一个域名的跳转。 PTR:逆向查询记录(Pointer Record)只能从ip地址查询域名。DNS工具:dig ,nslookup。16,HTTP与HTTPS的区别是什么。如何在一台服务器上同时部署http://www.163.com与http://game.163.com两个站点。如何进一步给这台服务器上的两个站点添加https支持。
分析:HTTPS和HTTP的区别主要如下:1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。l 用nginx 来定义两个resver站点,https支持要配置ca证书,配置是对443端口和80端口进行监听,443端口要启用ssl。监听443端口的server配置可以仿照上面ca认证页面的nginx配置示例进行配置。再通过rewrite方式把所有http请求也转成了https请求。17,数据库领域的ACID是什么意思,它的作用是什么。
分析:ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。18,列出常见的MySql存储引擎并说明其主要特点。
分析:MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。InnoDB和BDB存储引擎提供事务安全表。EXAMPLE存储引擎是一个“存根”引擎,它不做什么。CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。19,从开启电源到得到登录提示,尽可能详细的描述Linux的启动过程。
分析:开启电源–> BIOS自检(检查硬件设备)寻址–> MBR分区 (/boot/grub,grub2 引导系统启动流程的管理工具)–>加载内核 (检查周边环境,加载驱动程序)–> 系统初始化(启动第一个进程/etc/inittab)–>启动用户进程20,有用户反映访问http://www.163.com很慢,假如你是这个网站的管理员如何解决这个问题。
分析:首先核实是用户问题还是服务器的问题,可以自己登录测试是否存在用户反映的问题,如果也存在则是网站服务器的问题;可能的原因(1)服务器出口带宽不够用 (2)服务器负载过大忙不过来 (3)网站的开发代码不具优化 (4)数据库瓶颈解决方案:先利用浏览器的调试功能看看各种数据加载的速度,确定那块加载耗时;然后查看服务器负载情况(网络带宽、CPU、内存)可以采用nginx ,lvs进行负载均衡优化;再是到数据库可以用memcached进行缓存。21,如何管理大量的Linux服务器。
分析:运用ansible自动化运维工具,实现批量系统配置、批量程序部署、批量运行命令等功能。22,描述一个你巧妙地使用Linux解决的实际问题。
分析:用Linux开发了属于自己的情侣空间,因为只有两个人知道的网站没有运用负载均衡,反向代理,数据库缓存等知识,主要是在页面美感上做了功夫,运用到了Apache+PHP+Mysql。面试问题记录
1、flannel通讯原理(https://www.cnblogs.com/aguncn/p/10548009.html)
2、zabbix告警3、docker的命名空间(https://www.jianshu.com/p/f04418e217cb)4、jvm堆栈5、python对象(封装、继承、多态)6、redis哨兵和集群区别(集群是糟位)7、break与continue的区别8、nginx ip_hash 监控9、MySQL分库分表(https://blog.csdn.net/weixin_38399962/article/details/80108079)10、进程cpu占用高,top -> strace11、mysql优化 a. 硬件优化 oracle T7-4(IO密集型不能用虚拟机) b.软件优化 操作系统X86_64 软件、mysql编译安装 c.配置文件优化d.SQL语句优化
索引优化 慢sql优化 分库分表 e.架构优化f.流程制度优化
12、java如何优化内存 a、代码优化 b、配置优化,-Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize):指定JVM的初始和最大堆内存大小,两值可以设置相同,以避免每次垃圾回收完成后JVM重新分配内存。-Xmn:设置年轻代大小。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。-Xss:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。-XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath:让JVM在发生内存溢出时自动的生成堆内存快照(堆内存快照文件有可能很庞大,推荐将堆内存快照生成路径指定到一个拥有足够磁盘空间的地方。)-XX:OnOutOfMemoryError:当内存溢发生时,我们甚至可以可以执行一些指令,比如发个E-mail通知管理员或者执行一些清理工作($ java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:OnOutOfMemoryError ="sh ~/cleanup.sh" MyApp)-XX:PermSize and -XX:MaxPermSize:设置永久代大小的初始值和最大值(默认:最小值为物理内存的1/64,最大值为物理内存的1/16,永久代在堆内存中是一块独立的区域,这里设置的永久代大小并不会被包括在使用参数-XX:MaxHeapSize 设置的堆内存大小中)-XX:PretenureSizeThreshold :令大于这个设置值的对象直接在老年代分配。这样做的目的是避免在Eden区及两个Survivor区之间发生大量的内存复制
13、MySQL日常维护(https://blog.csdn.net/daxiangqqcom/article/details/77942684)
14、MySQL主从复制问题(https://blog.csdn.net/hao_yunfeng/article/details/82392261)15、MySql数据库集群、hadoop集群、spark集群、orientdb集群、flume集群、kafka集群、cdh系统的配置、部署、运维经验者优先16、kube-proxy的iptables与ipvs比较(https://cloud.tencent.com/developer/article/1470033)--iptables 的连接处理算法复杂度是 O(n),而 IPVS 模式是 O(1)17、TCP三次握手和四次挥手(https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc)18、kafka的复制原理19、k8s的特性(https://www.kubernetes.org.cn/3709.html)20、shell中()与(())区别(https://blog.csdn.net/Michaelwubo/article/details/81698307)21、nginx location 匹配顺序22、防cc,ddos,sql注入(https://www.cnblogs.com/superleedo/p/11043780.html)23、iptables四表五链24、nginx进程25、redis的发布订阅监控常用命令
发表评论
最新留言
关于作者
