架构优化

103 阅读6分钟

主从复制的原理是什么?主从复制中断了怎么办?主从复制出现延迟怎么处理?主库崩溃了怎么办?Mha 原理: 原理:主从复制一共有三个进程,从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中; 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog; SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致; 主从复制出现错误? 错误一: 错误原因:从库用来连接主库的用户权限或者密码不对 解决方法:首先在主库上检查用来主从复制的用户权限,如果没有问题在检查从库使用的密码是否正确。 错误二: 错误原因:这个可能是从库的master.info文件有损坏。 解决方法:reset slave 错误三: 错误原因:可能是从库的约束比主库更多写造成的。 解决方法: Mysql > stop slave; Mysql > set global sql_slave_skip_counter =1 ; Mysql > start slave; 错误四: 错误原因:slave上缺少错误中的表。 解决方法:在slave上添加上对应的表,然后start slave。 错误五: 错误原因:从库上对应的表上缺少字段。 解决方法:根据主库上表结构,在从库对应表上添加缺少的字段,然后start slave。 错误六: 错误原因:主库删除的表在从库中不存在,导致从库在遇到删除不存在表的错误时无法继续同步。 解决方法:利用slave-skip-errors参数,跳过对于的1146错误(这个参数是一个只读的,需要在配置文件中修改,并重启从库) 1、在my.cnf的[mysqld]下面添加slave_skip_errors=1146 2、重启从库 service mysq jhl restart 3、在从库上启动同步 4、去掉my.cnf中的slave_skip_errors=1146 5、重启从库 6、启动从库复制`1​ 中断: Show slave status\G;查看错误原因 1.show slave status\G,提示中继日志损坏,按以往的做法,根据提示重新指定合适的日志文件以及pos点。 2. 从MySQL5.5.X版本开始,增加了relay_log_recovery参数,这个参数的作用是:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且 重新从master上获取日志,这个参数是默认关闭的。做主从的时候没有开启这项参数。修改my.cnf,添加这两项。(skip-slave-start ,mysql服务启动跳过自动启动主从复制,以免产生新的问题),relay_log_recovery不支持动态修改。所以修改配置文件,重启MySQL服务,启动主从复制线程 a、主从同步延迟与系统时间的关系,查看主从两台机器间系统 时间差
c、主从同步延迟与lock锁的关系(myisam表读时会堵塞写),尽量避免使用myisam表。一个实例里面尽量减少数据库的数量。 d、主从复制发生异常而中断,过很久之后才发现复制异常。可通过查看master与slave的status估算相差的日志。如果相差太大,则可以考虑重做从库。 产生的原因:当主库的并发量比较大的时候,产生的DDL数量,超过线程所承受的范围,延时就产生了,还有可能是与slave的大型query语句产生了锁等待; 解决办法:在架构上做优化,尽量让主库的DDL快速执行,因为从库只是读取数据,不需要那么高的安全性,所以可以将sync_binlog设置为0,或者关闭binlog日志,或者是使用比主库更好的硬件设备作为slave 可以暂时存缓存里 从库不能执行大量写入(5.6是支持库的并发,5.7支持了一个库多个表的并发执行) www.cnblogs.com/gomysql/p/3… MHA :原理 (1)从宕机崩溃的master保存二进制日志事件(binlog events); (2)识别含有最新更新的slave; (3)应用差异的中继日志(relay log)到其他的slave; (4)应用从master保存的二进制日志事件(binlog events); (5)提升一个slave为新的master; (6)使其他的slave连接新的master进行复制; 2. Redis有哪些数据类型? String ,hash,set,zset, list 3. Redis和memcache的区别是什么? 从存储大小 Memcached单个key-value大小有限,一个value最大只支持1MB,key 最大250个字符,而Redis最大支持512MB 从可靠性 Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高 区别: 1:memcache和redis都是将数据存储到内存中,都是内存数据库,不过memcache还可以缓存其他东西,图片视频等。 2:存储类型不同,memcache只支持k-v结构,redis支持五种数据类似,字符串,链表,哈希,集合,有序集合。 3:虚拟内存,当redis物理内存使用完后,可以将一些很久没有使用过的value交换到磁盘、 4:分布式设定memcache集群,利用magenta做一主多从,redis可以做一主多从,也可以一主一从。 5:存储数据redis持久化,memcache关机后数据消失 6:数据恢复,memcache挂掉后,数据不可恢复,redis数据丢失后可以通过AOF日志恢复。 7:应用场景不同,redis除啦作为数据库使用之外,还能做消息队列,数据堆栈和数据缓存等,memcache适用于缓存sql语句,数据集,用户临时性数据,延迟查询数据 session等

  1. Redis在项目中怎么用的? 查询数据多的页面做缓存比如页面缓存首页

  2. Mysql数据库优化做过哪些工作 1:建表时选择适合字段的数据类型,合适的长度 2:查询多的字段加索引 sql语句优化 3:分页优化 4:分区分表 5:主从复制,读写分离

  3. Myisam和innodb的区别是什么? innodb写操作快、支持事务、数据行锁、 支持外键, InnoDB的主键范围更大,最大是MyISAM的2倍。 MyISAM不支持事务和外键,读操作快、 支持数据锁表、 GIS数据 、全文索引(因为它不支持中文分词,所以 MyISAM的全文索引其实没啥用)。

  4. 你了解哪些数据结构?

  5. 你了解哪些算法? 冒泡,快速,二分,归并

  6. 负载均衡怎么搭建的?nginx属于第几层负载均衡?nginx对于请求的分配有哪些策略模式? 反向代理 第7层 轮询,加权轮询,IP负载均衡,cdn负载均衡

  7. 你们的项目用了几台服务器?怎么分配的? 6

  8. 处理过高并发吗?请说明业务场景和解决办法 秒杀 ,文件锁

  9. 请说一下你所处理过的最复杂的业务逻辑

  10. 在之前的开发过程当中你碰到过的最困难的问题是什么?怎么解决的?

  11. 网络七层协议有哪些? 物理层,数据链路层,网络层,传输层,