1.数据库如何自动备份
写一个备份脚本,把日期和备份路径设置为变量,通过mysqldump命令进行数据库备份工作,然后用crontab命令做计划任务定时执行
2.监控平台zabbix做过哪些操作
绑定agentd主机到zabbix上,监控服务器的CPU,内存,磁盘IO等基础项目
3.三次握手和四次挥手过程
第一次握手,就是客户机发送一个报文给服务器,然后客户机进入SYN_SENT状态
第二次握手,就是服务器端收到客户端发送的报文,然后发送确认连接请求的报文给客户端,然后服务器进入SYN_RCVD状态
第三次握手,客户端接收到报文后,检查报文标志位是否正确,正确的话把标志位+1再发送给服务器,服务器检查标志位正确后,进入连接状态,就可以传输数据了
第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
第三次挥手:服务器发送一个FIN,用来关闭Server到客户端的数据传送,Server进入LAST_ACK状态。
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的.
为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。
4.mysql的sql语句怎么优化
1.把常用字段设为索引
2.字段种类尽可能用int或者tinyint,尽可能用NOT null
3.select * 尽量少用,用什么字段就select什么字段
4.不要轻易使用order by rand()
5.只有一行数据尽量使用limit 1
5.NGINX负载均衡模式
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
6.工作中遇到的问题
数据库主从中断,从数据库平时当热备份不去管它,但是一次偶然发现从数据库的数据有五六天没更新了,然后show slave status 发现错误信息是连不上主服务器,然后ping了一下果然不通了,检查了一下iptables,也没特别的问题,最后重启了一下网络,突然就网络正常了,然后立即stop slave和start slave。
7.LVS算法
静态调度
RR(Round Robin):轮询调度
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
WRR( Weighted Round Robin ):加权轮询
由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
DH(Destination hashing):目标地址散列。
目标地址散列调度算法是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
SH(Source Hashing):源地址散列。
源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。
动态调度
LC(Least-Connection):最少连接
最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。
简单算法:active*256+inactive(谁的小,挑谁)
WLC(Weighted Least-Connection Scheduling):加权最少连接。
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
简单算法:(active*256+inactive)/weight(活动的连接数+1)/除以权重(谁的小,挑谁)
SED(Shortest Expected Delay):最短期望延迟
简单算法:(active+1)*256/weight (活动的连接数+1)*256/除以权重
举例:ABC三台机器分别权重1、2、3 ,活动连接数也分别是1、2、3。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C 。
NQ(never queue):永不排队(改进的sed)
无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。
LBLC(Locality-Based Least Connection):基于局部性的最少连接
基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为Cache集群中客户请求报文的布标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个太服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。
基 于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接
带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
8.IPTABLES拉黑某个IP
iptables -A INPUT -s 172.16.1.0/24 -j DROP
9.解释一下什么是Nginx
Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以其高性能、稳定性、丰富的功能、简单的配置和低资源消耗而闻名。
也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行Http服务处理,也可以作为反向代理服务器 、负载均衡器和HTTP缓存。
10.nginx的url跳转
server {
listen 80;
listen 443 ssl;
server_name www.alibaba.cn;
#全跳转
#rewrite ^(.*)$ http://www.baidu.com/ permanent;
#部分跳转
if ($request_uri ~* “^/adminhx/.*”) {
set KaTeX parse error: Expected 'EOF', got '}' at position 13: flag '1'; }̲ if (flag !~ ‘1’) {
rewrite ^/$ http://www.baidu.com/ last;
}
11.NGINX的防盗链
location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked www.benet.com benet.com;
if ($invalid_referer) {
#return 302 http://www.benet.com/img/nolink.jpg;
return 404;
break;
}
access_log off;
12.数据库主从复制
1.主服务器创建一个复制用的账号REPLICATION并赋予权限,然后再主服务器上数据库的my.cnf里配置节点ID以及开启log-bin并指定位置
2.配置从节点的my.cnf,节点ID和主数据库不同,也可以开启log-bin,最好开启只读
3.主数据库执行show master status查看当前的bin-log日志的位置点
4.从服务器连接到数据库,执行数据库复制的语句,然后start slave即可
13.nginx优化
1.Nginx运行工作进程个数,一般我们设置CPU的核心或者核心数x2
2.worker_processes和worker_cpu_affinity可以按照服务器的CPU核心数和线程数进行修改,不过worker_cpu_affinity不要超过8个,8个以上性能不会提升,还可能不稳定
3.multi_accept开启,每个woker进程可以同时接受所有新的网络连接
4.work_connections是单个worker进程允许客户端最大连接数,一般改成65535足够了
5.nginx采用epoll事件模型,处理效率高
6.accept_mutex on由各个worker轮流处理新请求,默认设置比较影响性能
7.keepalived_timeout 客户端连接保持会话超时时间改为60s左右,超出则断开连接
8.连接超时时间的一系列调优
9.fastcgi调优
10.gzip调优
11.最大打开文件数limit从默认的1024改成65535
14.磁盘空间太满了怎么处理
1.df -h查看挂载情况,是哪个目录太满了
2.du -sh 一层层排查是哪里占用了太多的磁盘空间
3.确认大文件是否可以删除,如果是没用的日志文件的话可以和开发人员确认后进行删除操作
4.如果删除文件后磁盘空间还是没有释放,那说明还有进程打开了这个文件没有释放掉,通过sudo lsof -w| grep deleted 找到进程,然后kill掉即可
15.LVS三种工作模式
基于NAT的LVS模式负载均衡,用户访问的是LVS提供的VIP虚拟地址,而用户以外访问的则是真实的地址,LVS得到访问后会根据算法选择后端的真实服务器
基于DR的LVS负载均衡,LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的
16.部署发布Java项目
1.安装jdk1.8,并配置环境变量以及source生效
2.安装配置tomcat
3.把war包放到webapps目录下并重启tomcat即可
17.Nginx、HAProxy、LVS三者的优缺点
Nginx优点
1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。
3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。
4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS小。
5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。
6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。LNMP也是近些年非常流行的Web架构,在高流量环境中稳定性也很好。
7、可作为中层反向代理使用。
8、可作为静态网页和图片服务器。
9、Nginx社区活跃,第三方模块非常多,相关的资料在网上比比皆是。
Nginx缺点:
1、适应范围较小,仅能支持http、https、Email协议。
2、对后端服务器的健康检查,只支持通过端口检测,不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
二、LVS优点:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。
3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived。
4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
5、应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等。
LVS的缺点:
1、软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了,特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。
三、HAProxy优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段)
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
5、HAProxy负载均衡策略非常多
HAPorxy缺点:
-
不支持POP/SMTP协议
-
不支持SPDY协议
-
不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
-
重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
-
多进程模式支持不够好
本文介绍了数据库备份脚本的编写与cronjob的设置,Zabbix监控平台的使用,TCP/IP的三次握手和四次挥手过程。还探讨了MySQL的SQL优化策略,如索引、字段类型选择和查询优化。同时讲解了Nginx的负载均衡模式,如轮询、权重、IP哈希等,并分享了解决数据库主从复制中断问题的经验。此外,涉及了iptables防火墙规则、Nginx的URL跳转配置和防盗链策略,以及磁盘空间管理和LVS负载均衡的工作模式。最后,讨论了Java项目部署、Nginx、HAProxy、LVS三者的特点和优缺点。
2565

被折叠的 条评论
为什么被折叠?



