Mysql主从复制
M
主从复制原理
两个日志(binlog、relay log)、三个线程(I/O、SQL、log dump)配合使用
1)从库生成两个线程,一个I/O线程,一个SQL线程;
2)i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志)文件中;
3)主库会唤醒 log dump 线程,用来给从库i/o线程传binlog;
4)SQL线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据致;
主从复制同步方式
全同步:全同步复制(Fully synchronous replication)
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
追求的是至少有一个slave已经同步完成,即最终一致性。
半同步:半同步复制(Semisynchronous replication)
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。
相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
追求的是至少有一个slave已经同步完成,即最终一致性、好处是备份、容灾
异步:异步复制(Asynchronous replication)
MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,
这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
默认同步形式,为的是更快速
1.最终一致性和强一致性
最终一致性:即不管过程如何,但是最终的数据是一致的
强一致性:不仅要保证最终一致,而且要保证过程一致,每一步过程都完美的保存下来,如果服务器因为压力导致卡顿或者宕机,强一致性可以让你能接上去。
2.主从复制会特性是在压力大的情况下,有数据不一致的情况,所以在这里可以使用rsync远程同步
rsync是把文件对比,看差异部分的数据,然后备份差异部分的数据,对这部分数据先压缩再传输。在带宽不是很大的情况下,先压缩再传输会更快。
mysql日志记录方式
(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制
OSl七层模型和TCP/IP五层模型
OSI七层模型协议
OSI的七层协议主要包括:
物理层(physical layer)
数据链路层(data link layer)
网络层(network layer)
运输层(transport layer)
会话层(session layer)
表示层(presentation layer)
应用层(application layer)
每一层的协议
物理层:RJ45、CLOCK、IEEE802.3(中继器、集线器),ISO2110,光导纤维,双绞线
数据链路层:wi-fi, ATM, DTM,令牌环,以太网,PPPoE ,PPP、FR、HDLC、VLAN、MAC(网桥、
交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(交换机)
传输层:TCP(T/TCP · Fast Open) UDP DCCP SCTP RSVP PPTP TLS/SSL
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:DHCP(v6) DNS FTP Gopher HTTP(SPDY、HTTP/2) IMAP4 IRC NNTP XMPP POP3
SIP SMTP SNMP SSH TELNET RPC RTCP RTP RTSP SDP SOAP GTP STUN NTP SSDP
TCP和UDP的区别
TCP是面向有连接型,UDP是面向无连接型;
TCP是一对一传输,UDP支持一对一、一对多、多对一和多对多的交互通信;
TCP是面向字节流的,即把应用层传来的报文看成字节流,将字节流拆分成大小不等的数据块,并添加TCP首 部;UDP是面向报文的,对应用层传下来的报文不拆分也不合并,仅添加UDP首部;
TCP支持传输可靠性的多种措施,包括保证包的传输顺序、重发机制、流量控制和拥塞控制;UDP仅提供最基本的数据传输能力
TCP对应的应用层协议有哪些?UDP对应的应用层协议有哪些?
TCP对应的典型的应用层协议:
FTP:文件传输协议;
SSH:远程登录协议;
HTTP:web服务器传输超文本到本地浏览器的超文本传输协议。
UDP对应的典型的应用层协议:
DNS:域名解析协议;
TFTP:简单文件传输协议;
SNMP:简单网络管理协议
ping命令是基于网络层的命令,是基于ICMP协议工作的。
运维核心 :管理、控制、优化L1-L4层
TCP/IP 三次挥手、四次断开
第一次握手,客户端:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手,服务端:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手,客户端:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
三次握手
因为TCP是面向连接传输,客户端向服务器发送SYN同步请求,请求与服务器建立连接,服务器收到此SYN同步请求后,会针对客户端的SYN同步请求进行ACK响应的同时也会发送一个SYN同步请求,当客户端收到服务器发过来的SYN同步请求时,会给予一个ACK响应。
四次握手
客户端向服务器发送FIN断开请求,服务器接收到此请求后,回复一个ACK。服务器向客户机发送FIN断开请求,客户机收到此请求后,回复一个ACK。
为什么握手三次,而不是两次或者四次
为什么不两次:因为TCP是可靠的传输层协议,它在传输数据前,会建立双向数据通信通道,当保证双向数据传输的通道没有问题时,才会发送数据,如果是两次的话,客户端向服务端发送请求连接,服务的回复客户端ACK,假设客户端向服务端发送SYN请求,但是由于网络原因,很卡,所以单方面断开了请求,但是因为网络延迟问题,服务器端延迟了几秒才收到,认为是新的请求,就给ACK回应,但是服务端不知道客户端断开了SYN请求,就会一直将此端口打开,不会给别人用,会一直占用直到时间超时,超时后才会被动关闭。这就会造成资源浪费。
为什么不四次:已经可以正常连接再做四次,就没有必要,造成资源浪费。同时也会增加带宽压力。
为什么挥手四次
因为可能有半关闭状态, 客户机向服务器发送了FIN请求,服务器也给予了ACK响应。但是,服务器和客户机之间还有数据要传输,因此服务器没有向客户机立即发送FIN请求, 数据传输方向是双向的,一个方向的数据通道关闭需要一次请求和一次确认,因此需要断两次,而我们有两个数据方向,因此需要断四次。
http1.0和1.1区别http1.0与1.1有什么区别
①缓存处理 ②带宽优化及网络连接的使用 ③错误通知的管理 ④ Host头处理 ⑤长连接
访问百度的流程
1、域名解析成IP:先查找本地缓存,/etc/hosts ,如果没有再查找DNS客户端中的配置文件/etc/resolve.conf中找nameserver对应的地址,这个地址就是DNS服务端的地址,DNS服务端中有很多域名解析记录,如果server端没有,则进行迭代查询,先找根域,再找顶级域,再找二级域,知道返回主机对应的ip逻辑地址。
2、按照协议进行通信,确定端口号(二层转发原理是靠mac地址,三层转发原理是靠ip和端口号)通过域名解析已经知道ip地址了,想确定端口号则通过协议确定,http协议是80,https是443,接下来就是三次握手了
3、与目的主机进行TCP连接(三次握手)
http是应用层协议,tcp是传输层,所以发送http请求之前,开始我们常说的三次握手。Http请求是使用TCP进行传输的,可以保证可靠传输,并且有序,需要建立连接,才能进行数据传输。
4、http传输,发送和接收数据
5、与目的主机断开TCP连接(四次挥手)
访问百度(细节版)
socket套接字概念
socket用于描述IP地址和端口
socket是一个抽象层,其意义是将公司外网和内网的端口,进行桥接。
nginx中一个线程接待一个socket
Nginx部分如何监听端口
nginx有一个master进程管理子进程,支持服务开启,master不会参与接待,而是让woker接待,其中的一个worker就会在80端口等,
等捕捉到本地ip加上80端口后,woker接收到请求后,交给任务分配器,
任务分配器先查看自己的配置文件,例如访问的是80端口里面的根,则配置文件中的location /根就被匹配到了,
然后找到nginx内部的页面内容,然后再将页面内容翻译成浏览器的形式,返回去。
nginx主要处理静态页面
如何查看Nginx当前服务器的连接数
ss -antp|wc -l 查看连接数,一个链接数是一个socket
Nginx 特点
nginx是一款高性能轻量级WEB服务器
并发请求理论值并发量3~5w,实际上生长环境中就两万左右
受本地资源性能影响、
nginx服务器中是不是跑了其他东起、
网络带宽影响、
队列影响、
最大进程工作数影响、
开启的最大工作进程数影响、
配置文件中配置的 worker_connections
Nginx优化有哪几种
防盗链
日志分割
网页压缩
隐藏nginx版本号
更改进程数
连接超时
缓存时间
epoll机制优化(提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,若工作进程数为 8,每个进程处理 4096 个连接,则允许 Nginx 正常提供服务的连接数已超过 3 万个(4 096×8=32 768))
数据流向内部分为三个层面
Tomcat由哪三部分组成
- Web 容器:完成 Web 服务器的功能。
- Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
- JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码