mysql的主从复制读写分离
ps -ef|grep nginx ps命令查看启动进程的信息。Nginx 是查看的关键字
上图的流程:从windows的浏览器访问Nginx代理,监听80 ,manage.jt.com转发到windows的maven工程,hosts文件把manage.jt.com指向Nginx。
mysql主从复制
从之前的内容,知晓Nginx+tomcat 集群可以完成高并发。
但是高并发会导致数据库的访问压力过大,数据库也需要配置“集群”
目的:减少单个数据库的 读写 压力
作用:提高数据库集群的性能,可以使用读写分离的集群。
步骤:
将数据库安装到主机上(2台数据库)
一台master负责写操作;一台slave负责读操作
配置主从结构; 主服务器负责写数据,从服务器负责读数据,从服务器实时备份主服务器的数据
主从复制的原理:
master 的所有客户端写操作 都会被记录到一个开启的二进制文件中(不开启,不能完成主从复制)
slave启动io线程监听master的二进制文件判断是否有更新(与其中的position属性值有关),抓取最新的操作,写入本地的中继日志,
slave启动sql线程监听中继日志,有更新的操作,直接启动客户端读取日志信息,客户端完成sql语句的执行。
保证了主从数据保持一致。
其中:中继的原理就是为了解决本地的执行sql失败后,无需重新占用网络带宽,内部解决回滚等操作,本地持久化的中继日志的意义非常大。
在主从结构中,没有禁止slave数据库的写入操作,如果客户直接连接主从节点,可能会导致主从结构失效。引入amoeba数据库代理完成主从结构 读写分离 的控制
amoeba完成代理数据库操作,实现读写分离 变形虫:基于mysql的一个代理,现在已经很少用了,可以对mysql数据库的连接和操作进行过滤拦截等
amoeba实现的功能:
1读写分离 2负载均衡 3分库分表操作(代理都能实现分库分表)
数据库数据太大,都写在同一个数据库的所有表中,会打造成某个表格失效时,整个数据库不可用;
分表,分库;实际应用场景:查询银行历时账单;
amoeba实现分库分表的参数封装的函数,直接完成底层调用分库分表的sql语句