文章目录
nginx优化
修改用户和组
网页压缩
防盗链
隐藏版本号
修改缓存时间
日志切割
设置连接超时机制
更改进程数
i/o事件配置中使用epoll
- nginx支持https的访问的配置:需要ssl服务器证书支持,可以使用ssl模块生成,生成完后编辑nginx配置文件,新增server节点,监听443端口,编辑完后重启nginx服务
nginx前端页面/图片加载不出来,如何排查
查看网络是否通畅
服务是否启动,端口是否被占用
Nginx配置文件
图片格式是否匹配—>配置文件中指定的默认首页目录下,首页文件是否存在,首页文件中是否有内容
查看配置文件中location查询路径是否正确,rewrite跳转路径是否正确,编辑完配置文件后是否重载了服务等
nginx+keepalived脑裂是什么
脑裂是在高可用集群中,当联系着的两个节点的断开联系时,本来时一个整体的系统,分裂为两个独立的节点,这时两个节点开始争抢共享资源,就会导致系统混乱,数据损失。
预防手段,可以脚本,正常vip在master上,如果出现在爱backup上,就会输出告警信息
解决手段:写脚本正常vip在master上,如果出现在backup上,就输出告警信息
解决方法:借助keepalived的配置文件增加check配置,或者自己写脚本定时ping自己的网关,如果ping不通,自动关闭keepalived服务,最容易的是借助keepalived提供的vrrp_script及track_script实现
nginx和lvs,haproxy有什么区别
目前常见的web集群调度器分为软件和硬件
软件通常使用开源的LVS、Haproxy、Nginx
lvs性能最好,但是搭建相对复杂,nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,高并发并没有haproxy好
Nginx:
支持正则;
只支持基于端口的健康检查;
不支持session的直接保持,但是能通过ip_hash来解决
对网络稳定性能不搞
反向代理能力强
lvs
只能基于四层端口转发
尽在四层做分发作用,扛负载能力强
应用范围广
haproxy
支持八种负载均衡策略
仅作负载均衡软件使用,在高并发情况下性能优于nginx
支持url检测,支持session保持
tomcat优化
tomcat的优化
总的来说,Tomcat的优化大致分为两类,具体如下:
一.tomcat的优化
1.tomcat的自身调优
采用动静分离
调优Tomcat线程池
调优Tomcat的连接器Connector
通过修改Tomcat的运行模式
禁用AJP连接器
2.JVM的调优
内存调优
垃圾回收策略调优
sql语句优化
1、选择合适的字段类型
2、尽量设置为not null
3、使用join连接代替子查询
4、为合适的字段设置索引
参数优化
1、设置最大连接数
硬件优化
1、内存加大,内存的速度比磁盘I/O快得多,使增加系统缓冲区容量减少磁盘I/O
2、配置高速磁盘系统,提高响应速度
3、合理分配磁盘I/O,减少资源竞争
4、配置多处理器,mysql是多线程的数据库,多处理器可同时执行多个线程。
mysql架构(有哪几种、每种原理)
MySQL主从复制、读写分离
主MySQL服务器做的增删改,都会写入自己的二进制日志(Binary log),然后从MySQL服务器打开自己的I/O线程连接主服务器,进行读取主服务器的二进制日志,备份写入到从服务器的中继日志(Relay log)当中,然后从服务器打开SQL线程,将中继日志中的数据重放到自己的服务器中,复制完成。
读写分离基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
mysqlMHA高可用集群
解决mysql单点故障的问题,
故障切换备选主库的算法:
1、一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
2、数据一致的情况下,按照配置文件顺序,选择备选主库。
3、设定有权重(candidate_master=1),按照权重强制指定备选主。
默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主。
mysql左联右联(左查询右查询)
- left join(左联接)
返回包括左表中所有记录和右表中联接字段相等的记录
语法:SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;
- right join(右联接)
返回包括右表中的所有记录和左表中联接字段相等的记录
语法:SELECT 字段 FROM 表1 RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;
mysql死锁(死锁现象、怎么解决、怎么预防)悲观锁、乐观锁
所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。实现方式:乐一般会使用版本号机制或CAS算法实现。
myisam表锁:不会出现死锁,发生锁冲突几率高,并发低。
innodb默认行锁:会出现死锁,发生锁冲突几率低,并发高。
mysql主从复制如果io、sql线程为非running状态,可能是哪些情况
1、网络不通畅
2、slave未开启
3、连接master未成功
4、防火墙未关闭
5、没有授权
6、主配置文件写错
7、偏移量和二进制日志名输入有误
8、server-id有冲突
redis三种集群模式,redis持久化方式有哪些
主从复制、哨兵、集群
rdb、aof
rdb分为手动触发、自动触发
手动触发主要靠save和bgsave命令生成rdb文件,save命令会阻塞服务器,直到文件创建完成为止,在此期间服务器不能处理任何请求,bgsave会生成一个子进程,在生成子进程的瞬间会阻塞服务器,之后由子进程负责创建rdb文件,主进程处理请求
自动触发redis也会选择bgsave而不是save
aof
与RDB持久化相对应,AOF的优点在于支持秒级持久化、兼容性好,缺点是文件大、恢复速度慢、对性能影响大。
ELK中logstash有哪三部分组成、logstash如何做格式转化
E:Elasticsearch
L:Logstash
K:Kibana
1、将日志进行集中化管理
2、将日志格式化(Logstash)并输出到Elasticsearch
3、对格式化后的数据进行索引和存储(Elasticsearch)
4、前端数据的展示(Kibana)
LogStash
由三个组件组成:Input、Output、Filter Plugin
Input:获取日志
Output:输出日志
Filter Plugin:过滤日志、格式处理