1.如何提高服务器安全性?

  •  防火墙规则

  •  关闭不必要端口

  •  禁止root登录

  •  降低web程序运行权限

  • 系统跟应用定期打补丁

  • 上waf(web应用防火墙)


2.raid:

raid0 :两块硬盘以上,合成一块,提高读写速度

raid1:两块硬盘,又称为镜像方式,数据冗余,只有一半磁盘空间有效,另一半用来冗余,相比raid0,容量减半,速度不变,

raid5:raid0月raid1的折中方案,主流,至少三块硬盘,读取速度≈raid0 写入速度<单个磁盘,但是raid5的磁盘利用率大于raid1,数据写入时,按照一块硬盘的方式直接写入这块硬盘,

同时写入校验信息,读取写入的时候,分别从三块硬盘上读取数据,再通过校验信息进行校验,一块硬盘顺坏,其他两块会计算出那一块的硬盘内容,raid5:只允许一块硬盘损坏

当顺坏时候,替换上去新硬盘,raid自动利用奇偶校验信息重建此硬盘上的数据,保持raid5的高可靠性

存储:只占用一个磁盘容量,应该三块硬盘一样大,否则以最小为准。

raid0+1:又称raid10,至少4块硬盘,简单的理解,多个磁盘组成raid0阵列,再进行冗余


3.linux启动过程:

power on ---->BIOS加电自检,根据引导顺序启动---->MBR---->grub(stage2 ) --->/boot/grub/grub.conf ----->加载内核和ramfs文件系统--->init ---->读取/etc/inittab , 执行/etc/rc.sysinit等脚本文件------>根据/etc/inittab里的运行级别进入/etc/rc*.d目录,启动里面的服务(s开头的为要启动的) ------->启动登录程序

     0:关机模式

    1:单用户模式<==破解root密码

    2:无网络支持的多用户模式

    3:有网络支持的多用户模式(文本模式,工作中最常用的模式)

    4:保留,未使用

    5:有网络支持的X-windows支持多用户模式(桌面)

    6: 重新引导系统,即重启

查看开机运行级别:runlevel 或者 who -r

修改运行级别:修改/etc/inittab default后面的数字就是默认的运行级别

忘记密码

a、重启系统,在GRUB界面,选取忘记密码的系统,按e键进入编辑模式

b、选项Kernel.....按e键进行编辑

c、在编辑界面rhgb quiet后加空格,然后输入"single"或"1" 回车

d、按b启动 进入单用户模式

f、进入系统后passwd回车输入新密码(如果有selinux,先暂时关闭 setenforce 0)


4.mysql优化:

  •  项目立项后,设计表 结构:慢查询、低效的查询语句、没有适当建立索引、数据库堵塞(死锁)等。

  •  考虑高可用性,可采用mysql主从复制+keepalived做双机热备。

  •  数据库配置优化:连接数,缓冲区,共享表空间等。

  •  操作系统的一些参数 也会影响Mysql性能。sysctl.conf进行内核优化:time_wait时间、连接数、文件句柄等。

  • 加大物理内存,提高文件系统性能。linux内核会从内存中分配出缓存区(系统缓存和数据缓存)来存放热数据,通过文件系统延迟写入机制,等满足条件时(如缓存区大小到达一定百分比或者执行sync命令)才会同步到磁盘。也就是说物理内存越大,分配缓存区越大,缓存数据越多。

  •  SSD硬盘代替SAS硬盘,将RAID级别调整为RAID1+0,相对于RAID1和RAID5有更好的读写性能(IOPS),毕竟数据库的压力主要来自磁盘I/O方面。

  • 架构扩展:一主多从,读写分离等。

  •  给数据库增加缓存系统,把热数据缓存到内存中,如果缓存中有要请求的数据就不再去数据库中返回结果,提高读性能。缓存实现有本地缓存和分布式缓存,本地缓存是将数据缓存到本地服务器内存中或者文件中。分布式缓存可以缓存海量数据,扩展性好,主流的分布式缓存系统有memcached、redis,memcached性能稳定,数据缓存在内存中,速度很快,QPS可达8w左右。如果想数据持久化就选择用redis,性能不低于memcached。

  • 分库:根据业务不同把相关的表切分到不同的库中,避免单个库压力过大。

  • 分表:数据量大的表拆分成多个小表,避免单个表压力过大,来减轻单个表的压力,提高处理效率。

  • 监控数据库性能:qps 、tps


5.LVS:

keepalived:高可用,保持存活,防单点故障。keepalived主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。

VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议:实现路由器高可用的协议

一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

ipvs---(IP Virtual server ):lvs下提供负载均衡的一种技术,是lvs的核心。

lvs负载均衡的三种director方式:NAT DR TUN

DR模式又称直接路由模式,lvs和real-server必须在相同网段,它是通过改写请求报文中的MAC地址来实现的

NAT模式下所有real-server网关指向directory(调度服务器),调度服务器有瓶颈,节点数不能多

TUN是ip隧道模式,把客户请求包封装在一个IP tunnel里面,然后发送给realserver,节点服务器接收到之后解开IP tunnel,进行响应处理。

推荐LVS-DR架构:减少LVS负载,RS直接将结果返回给客户端;因为如果nat, 那么你的性能瓶颈就是在那个nat主机上面, dr的话, 只有第一次调度需要经过, 调度器, 后面都是直接和客户端建立连接

LVS调度算法:

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

静态不考虑后端服务器连接和负载情况直接转发。


6.MySQl主从复制:

(1)、Slave上面的IO线程连接上Master,并且请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

(2)、Master接收到来自Slave的IO线程请求后,通过负责复制的IO线程根据请求的信息指定日志指定位置后的日志信息,返回给Slave端的IO线程,返回的信息当中除了日志所有包含的信息外,还包括本次返回信息在Master段的Binary log(二进制)文件名称以及Binary log(二进制)的位置.

(3)、Slave的IO 线程接收到master返回的信息后,将接收到的日志内容一次写入slave端的Relay log文件,(mysql-relay-bin.xx)的最末端,并且将读取到的Master端的bin-log的文件和位置记录,纪录到 master-info文件当中,以方便下一次读取的时候能够清楚的告诉Master 我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我。

(4)、Slave的SQL线程检测到Relay Log中心增加了内容后,会马上解析Master 二进制日志文件中的内容执行里面的Query语句。

MySQL的replication是一个异步的复制过程,在master和slave之间实现整个复制过程主要由3个线程来完成,在slave端有IO和SQL线程,这两个线程的状态必须是yes。

mysql主从架构中其实就一个主在工作,而从就相当于一个备份机器,从通过日志监测的方式来备份主库上的数据而保证主库的数据安全。在这种架构中如果从上的数据做了改变,主数据是不会发生任何变化的。

一般通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力


7.数据库系统工作原理:

  1. . 用户向数据库发起连接;

  2. . MySQL数据库验证权限。如果权限不够,直接拒绝 ,权限ok进入下一步;

  3. . 用户开始发起SQL语句;

  4. . MySQL数据库解析器开始解析SQL语句;

  5. . MySQL开始查询自己的本地缓存,有的话直接反馈给用户,没有的话,进入下一步;

  6. . 经过解析器。对SQL语句进行定位,最后找到所需要的数据,在本地缓存一份,然后反馈给用户。


8.DNS相关 :

DNS -----Domain name system--------域名系统

DNS 的作用:

正向解析:根据域名解析为IP

反向解析:根据IP解析为域名

FQDN:(Fully qualified Domain Name)完全合格域名,是指主机名加上全路径

www.baidu.com -----主机名 www -----  域  baidu.com

全球共有13台根逻辑域名服务器 -------  端口号  53

----DNS排错:

1>.日志:tail –f /var/log/messages

2>.检查文件有没有错

     /etc/resolv.conf  放dns服务器的地方

     [root@lnmp software]# cat /etc/resolv.conf

     nameserver 114.114.114.114

     /etc/hosts        域名对应IP

常用的dns软件 bind

-----为什么要主从?

1. 起到一个备份的作用

2. 负载均衡,访问量大的时候忙不过来

-----DNS解析过程:

  1.  客户机先查看本机DNS 缓存

  2. 查看/etc/hosts  文件

       172.17.0.8  www.zdj.com

  3. 向本地dns服务器发送域名解析的请求

  4. 本地dns查询缓存,如果有直接返回给客户机,如果没有,查询自己的dns数据库文件,如果有就直接返回给客户机,如果还没有就向根域.查询,发送请求给根服务器

  5. 根域告诉本地DNS服务器找com的服务器

  6. 本地dns服务器向.com的服务器查询,com服务器告诉本地dns,baidu这个域的dns服务器ip

  7. 本地dns服务器找到baidu.com域的dns服务器,查询到www这台主机的IP

  8. 同时放到自己的缓存里面

  9. 告诉客户机www.baidu.com的域名对于的IP

  10. 客户机将IP放到缓存里

[root@lnmp software]# cat /etc/resolv.conf

nameserver 114.114.114.114


9.三次握手四次挥手:

time_wait过多可以修改系统参数/etc/sysctl.conf

net.ipv4.tcp_syncookies = 1

// 表示开启SYN cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭

net.ipv4.tcp_tw_reuse = 1

//表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1

//表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

net.ipv4.tcp_fin_timeout = 30

//修改系統默认的 TIMEOUT 时间

/sbin/sysctl -p   //保存后生效

第一次握手:

客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

第二次握手:

服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。

第三次握手.

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1

TCP 四次挥手:

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

口述版j_0007.gif

假如有一台客户机和一台服务器,现在客户机想要和服务器通信,那么首先客户机就会发送一个同步位等于1确认序列号有效位等于0的数据包给服务器,(syn(同步位)等于1表示请求建立链接)同时会随机产生一个sequence number(序列号),假如是100,当服务器接受到客户机发来的数据后,客户机从SYN(同步位)=1可知客户机是想要建立连接,第一次握手完成

第二次握手:服务器收到消息后肯定要进行确认,就像我和你打招呼的时候我说hello你肯定要回一个给我,所以这时候服务器就会向客户机发送一个确认报文ACK(确认序列号有效位)=1,SYN(同步位)=1,Acknowledge number=101,(确认序列号等于序列号+1)同时还会随机产生一个序列号sequence number假如等于200,这样就告诉了客户机可以进行连接,二次握手完成

第三次握手:当客户机收到服务器的确认信息后,客户机会检查Acknowledge number(确认序列号)是否等于序列号+1即101,以及ACK(确认序列号有效位)是否为1,若为1,客户机会发送一个ACK=1.Acknowledge number=201的确认报文,告诉服务器你的请求连接已经被确认,连接可以建立,客户机进入ESTABLISHED状态,TCP连接建立。三次握手完成

1.天下没有不散之宴席,数据传输结束后,现在服务器和客户机都处于ESTABLISHED状态,客户机想要和服务器断开连接,就会向服务器发送一个标志位FIN=1的报文(FIN=1表示请求断开连接)这时客户机就处于FIN—WAIT—1状态

2.当服务器收到请求断开的数据包以后立即发出确认,确认号acknowledge number等于序列号加一,标志位ACK=1,此时服务器进入CLOSE_WAIT状态

当客户机得到服务器的确认后,就进入FIN—WAIT—2状态,等待服务器发出连接断开报文

3.若服务器已经没有要向客户机发送的数据。那么服务器就向客户机发送一个标志位FIN=1的报文,表示自己也将关闭连接,此时服务器进入LAST—ACK状态

4.当客户机收到请求断开的报文以后,必须对此发出确认,于是就发送一个标志位ACK=1的报文给服务器,然后进入到TIME—WAIT状态,这时TCP连接还没有断开,必须经过时间等待计时器设置的时间之后,客户机才会进入到CLOSED状态


10.CDN原理

CDN是一种组合技术,主要包含以下3个方面:

① 源站

源站指发布内容的原始站点。添加、删除和更改网站的文件都是在源站上进行的另外缓

存服务器所抓取的对象也全部来自于源站。

② 缓存服务器

缓存服务器是直接提供给用户访问的站点资源有一台或数台服务器组成当用户发起访问

时他的访问请求被智能DNS定位到离他较近的缓存服务器。如果用户所请求的内容刚好在

缓存里面则直接把内容返还给用户如果访问所需的内容没有被缓存则缓存服务器向邻

近的缓存服务器或直接向源站抓取内容然后再返还给用户。

③ 智能DNS

智能DNS是整个CDN技术的核心它主要根据用户的来源将其访问请求指向离用户比较近的缓存服务器如把广州电信的用户请求指向到广州电信IDC机房中的缓存服务器。通过智能DNS解析让用户访问同服务商下的服务器消除国内南北网络互相访问慢的问题达到加速作用。智能DNS的出现颠复了传统的一个域名对应一个镜像的做法让用户更加便捷的去访问网站。

缓存服务器中有访问内容:

客户端请求 ==> 智能DNS解析到最近的缓存服务器 ==> 缓存服务器返回请求资源

缓存服务器中无访问内容:

客户端请求 ==> 智能DNS解析到最近的缓存服务器 ==> 缓存服务器发现没有客户端请求

资源,向源站请求 ==> 源站返回资源到缓存服务器 ==> 缓存服务器返回客户端请求资源