主从架构说明
1、一主一从(可用)
- 不是为了提供程序的性能,而是为了提高可用性,做热备的,容灾。一旦master机器出现问题,可以切换到slave。
- 不用考虑数据的一致性,程序只会从master中读取数据,slave只用于热备。
- 不能代替数据的备份,如果master中不小心执行了drop,那么也会同步到slave去执行drop。所以我们还需要按照定时任务备份数据。
2、一主多从(可用)
- 一般是 2~4个slave节点,太多的话对master性能影响太大。
- 其中一个用于特殊业务处理,比如一些耗时比较长的查询,比如报表统计等,专门从这个节点查询。还有可以给开发人员进行线上数据的查询排查。这样是对数据进行有效的隔离。
- 选取一个节点作为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 -P9066 。
- 连接数据端口
- 通过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通过心跳检测,自主切换数据库,保证高可用性,无须手动切换。