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