mysql-主从、读写分离

主从架构说明

1、一主一从(可用)

  1. 不是为了提供程序的性能,而是为了提高可用性,做热备的,容灾。一旦master机器出现问题,可以切换到slave。
  2. 不用考虑数据的一致性,程序只会从master中读取数据,slave只用于热备。
  3. 不能代替数据的备份,如果master中不小心执行了drop,那么也会同步到slave去执行drop。所以我们还需要按照定时任务备份数据。

2、一主多从(可用)

  1. 一般是 2~4个slave节点,太多的话对master性能影响太大。
  2. 其中一个用于特殊业务处理,比如一些耗时比较长的查询,比如报表统计等,专门从这个节点查询。还有可以给开发人员进行线上数据的查询排查。这样是对数据进行有效的隔离。
  3. 选取一个节点作为master节点的备份,一旦master挂掉,选取这个节点继续为程序服务。

3、其他架构(不用)

 双主

  • 业务中大量写并发,那么可以搞两个主,主于主之间相互同步。插入数据的时候可以按照id进行取模,单数往master1节点查询,多数往master2节点插入。
  • 用的非常少,因为一个节点挂了,整个数据库体系就不可用了。

级联同步

  • 因为master压力大,只让他同步给一个slave节点,能减少master的io压力。
  • 还一个好处,一旦master挂了,后面的三个节点就是天然的一主多从结构。

环形多主

  • 早期电商公司用的时候,mysql还没有那么强大,就用过这个架构。

mycat: 

作为一个数据库中间件存在的,独立于应用程序之外。

读写分离

1、mycat基本说明

应用程序基于mycat进行读写分离。

主服务器负责增删改的操作,增删改相对于读是比较耗时的。

从服务器分担了读的操作,分摊了主服务器的压力。

mycat和数据库有心跳检测。

 2、mycat支持读写分离的实际操作

配置server.xml

  • 配置root(用于读写db的)的密码、逻辑数据库名称。
  • 配置user(用于读db的)密码、逻辑数据库名称。

配置schema.xml

  • 里面的table是实现分库分表的。
  • heartbeat是心跳检测。
  • datahost标签中balance值说明
    • balance = 0, 所有读操作都发送到当前可用writeHost上。
    • balance = 1,所有读操作都随机发送到readHost上。
    • balance = 2, 所有读操作都随机的发送到writeHost、readHost上。
    • balance = 3, 所有读请求随机的分发到writeHost对应的readHost执行,writeHost不负担读压力,注意balance=3只在1.4及其以后版本有。

 启动mycat

  • 通过 ./mycat start console 即可。通过 netstat -ntlp 能查看到41304、9066(管理端口)、8066(数据端口)被占用。
  • 登陆到mycat的管理端口
    • 通过 mysql -uroot   -p123456 -h127.0.0.1 -P9066 。
      • show @@help;查看帮助手册。
      • 通过show @@datasource;能看到读写数据源的配置。
      • 通过show @@heartbeat; 能看到心跳情况。
  • 连接数据端口
    • 通过mysql -uroot -p123456 -h127.0.0.1 -P8066
    • 通过navicat客户端可以连接mycat

测试读写分离

  • 原理: 开启日志,当我们支持insert、select操作的时候再去看日志打印情况,日志里面会展示每条sql执行时访问的具体mysql主机地址。
  • 准备:
    • 修改日期打印级别,重启mycat。
    • 查看日志,tail -f wrapper.log
  • 创建两个会话,一个连接mycat数据端口,即mysql -uroot -p123456 -h127.0.0.1 -P8066,用于执行insert和select两个sql。一个用于查看日志,看看sql执行时走的哪台mysql机器。
  • 执行 insert into user values(null, b), 去查询日志,能看到这条语句走的那个数据节点, 是master。
  • 执行 select,去查询日志,能看到这条语句走的slave节点。

3、总结 

1、mycat目前有哪些功能与特性

  • 支持SQL 92标准
  • 支持 Mysql 集群,可以作为Proxy使用
  • 支持JDBC连接多数据库
  • 支持NoSQL数据库
  • 支持galera for mysql,percona-cluster或者mariadb for cluster,提供高可用性数据分片集群
  • 自动故障切换,高可用性
  • 支持读写分离,执行Mysq双主多从,以及一主多从的模式。
  • 支持全局表,数据自动分片到多个节点,用于高效表关联查询。
  • 支持一致性Hashf分片,有效解决分片扩容难题。
  • 多平台支持,部署和实施简单
  • 支持Catelet 开发,类似数据库存储过程,用于跨分片复杂SQL的人工智能编码实现,143行Demo完成跨分片的两个表的JOIN查询。
  • 支持NIO与AIO两种网络通信机制,windows下建议AIO,Linux下目前建立NIO。
  • 支持Mysql存储过程调用
  • 以插件方式支持SQL拦截和改写
  • 支持自增长主键、支持Oracle的Sequence机制

2、Mycat除了Mysql还支持哪些数据库?

答:mongodb、oracle、sqlserver、hive、db2、postgresql。

3、Mycat支持集群么?

答:目前Mycat没有实现对多Mycat集群的支持,可以暂时使用haproxy来做负载,或者使用硬件负载。

4、Mycat多主切换需要人工处理么?

答:Mycat通过心跳检测,自主切换数据库,保证高可用性,无须手动切换。

  

猜你喜欢

转载自blog.csdn.net/songtaiwu/article/details/125249197
今日推荐