Mycat2原理介绍
Mycat 核心配置
Scheam.xml 逻辑数据库和节点对应关系配置 Server.xml mycat的连接配置 Rule.xml. 分片规则
自动分片auto-sharding-long,比如0-10000节点1 ,10001-20000节点2 枚举分片sahrding-bt-intfile ,比如beijing节点1,shanghai节点2 取模分片mod-long, 按日期分片
操作(水平分库)
可以用数据库工具直接连接Mycat的逻辑数据库。 在Mycat上创建逻辑表,就会在对应的节点上创建真实的物理表(这里会有多个节点)。 执行插入语句,如果是自动分片,那么Mycat就会根据Id存到对应的物理数据库中。
Mycat乱码问题
dbDriver="native" url="192.168.52.10:3306"
全局序列号问题(分库分表后主键没办法用自增主键)
Server.xml里sequnceHandlerTypes设为0,表示使用本地文件sequence_conf.properties的配置当前全局Id
Mycat读写分离
为什么需要读写分离?
性能提升:在高并发的情况下,数据库的读操作往往远多于写操作。通过读写分离,可以将读请求分散到多个从数据库上,只将写请求发送到主数据库。这样可以显著减轻主数据库的压力,提升整个数据库系统的处理能力。 可扩展性:随着业务量的增加,数据库的负载会逐渐增大。读写分离允许动态地添加更多的从数据库来应对读负载的增加,从而实现数据库的水平扩展。 高可用性:在Mycat的读写分离模式下,如果主数据库发生故障,可以迅速切换到从数据库进行读操作,保证业务的连续性。同时,也可以通过配置多个从数据库来提高系统的容错能力。 资源优化:读写分离可以根据数据库的负载情况,优化硬件资源的使用。例如,读操作通常不需要太高的CPU性能,但需要更多的I/0资源和网络带宽。可以针对性地为读服务器配置更优的I/0设备和更宽的带宽,而为写服务器配置更强的CPU。
为什么有的必须要从主节点查询?为什么不是所有的查询都放到从节点上?
对事务一致性要求高的查询,为了保证事务的一致性,必须从主节点查询。 主从复制架构
主从复制用途
原理
把主服务器上的binlog复制到从服务器上执行一遍,这样主从服务器的数据就相同了
其实主节点上会有一个dump线程读取binlog的数据发送给从节点的IO线程 如果有两个从节点,主节点就会有两个dump线程与之对应 为什么需要dump线程?
因为数据安全性考虑,主节点的binlog肯定不能备外部直接访问
造成主从延迟的原因?及解决方案?
延迟1:binlog写入延迟
每个事务提交时会把数据都写入到缓存里,在由fsync线程统一刷到磁盘 这里我可以调整sync_binlog的值,来提高效率
延迟2:sqlThread处理慢的问题
Mysql5.6往后把现有的sql线程 替换成了coordinator组件 coordinator负责读取realylog的数据,分发给多个worker线程去执行,每个worker线程都会有一个队列(如何保证队列里的事务时有序的? 逻辑时钟算法,每个事务在提交的时候都会生成一个时间戳的id,可以排序 ) 分配策略(如何保证不同worker之间的事务有序? ):1. 更新同一行数据的两个事务,必须发到一个worker上 2. 同一个事务的也不能备拆开,必须分配到一个work中。 解决了原先sql Thread单线程的瓶颈。
搭建步骤
准备主从两个mysql服务器,在主库上创建数据库,表,并插入数据 修改vim /etc/my.cnf配置文件
lower_case_table_names=1 忽略大小写 log-bin=mysql-bin 开启binlog功能 server-id=1 binlog-do-db=test 只备份test数据库 binlog_ignore_db=dev忽略dev数据库 不加binlog-do-db和binlog_ignore_db表示备份全部数据库 重启mysql 在主服务器上创建一个从服务器访问的用户账户,用replication slave赋权 在从库上创建数据库,表,导入现有主库的数据 修改从库的my.cnf的server-id,并重启 配置从数据库访问主库的连接参数 保证主从服务的auto.cnf配置的uuid不相同 启动从服务器的复制进程,start slave (注意slave就是从服务访问主服务器的账户)
Show slave status查看状态,保证slave_io_running和slave_sql_running都是yes 如果不是yes,就用show slave status \G进行排查 在主库进行插入删除更新,看从库有无同步成功
实现读写分离
在Scheam.xml 逻辑数据库和对应的节点,(这里节点应该是一个) 设定balance=1和writeType=0,比如保证从库读,主库写,并设定主从数据库的连接参数 在mycat上创建逻辑库,这样在mycat读其实就是读的从节点的数据库,写就是写的主节点的数据库
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126383.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!