【MyCat】 读写分离

【MyCat读写分离】

  当我们的网站访问量很大时,为了高可用性,我们就需要搭建mycat集群来应对高访问量,mycat应对高访问量采用了读写分离机制,即读数据库访问的是A数据库,写数据库访问的是B数据库,(之所以这样做是因为正常情况下,Insert SQL就是几十个毫秒的时间内写入完成,而系统中的大多数Select SQL则要几秒到几分钟才能有结果,很多复杂的SQL,其消耗服务器CPU的能力超强,不亚于死循环的威力。在没有读写分离的系统上,很可能高峰时段的一些复杂SQL查询就导致数据库服务器CPU爆表,系统陷入瘫痪,严重情况下可能导致数据库崩溃。因此,从保护数据库的角度来说,我们应该尽量避免没有主从复制机制的单节点数据库)其实标准的读写分离是主从复制,一个写节点Master后面跟着一个或多个读节点,读节点的数量取决于系统的压力,通产是1~3个读节点配置

  mycat读写分离和自动切换机制,需要mysql的主从分离机制配合


【主从复制的拓扑关系】

  通常我们不会采用双向主从同步以及环状的拓扑:

  详细讲解:

    https://blog.csdn.net/liqfyiyi/article/details/50978298

【MySQL主从复制机制】

  从字面上理解,要实现主从复制至少2台服务器,一台主服务器,一台从服务器,当主服务器写入更新内容后,会将更改的内容写入到从服务器;复制是指复制二进制文件,二进制文件中记录了所有数据库的更改,将更改的语句复制过来,执行到从服务器上

【注意的地方】

  • 主DB server和从DB server数据库的版本一致
  • 主DB和从DB的数据库名称和表名要一致
  • 主DB server和从DB server数据库数据一致(这里就会可以把主的备份在从上还原,也可以直接将主的数据目录拷贝到从的相应数据目录)
  • 主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一

【Mysql主服务器配置】

  第一步:修改my.cnf文件,在[mysqld]节点下添加:

# 同步的数据库名
binlog-do-db=db1
#无需开启二进制日志文件的数据库
binlog-ignore-db=mysql
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,一般取IP最后一段
server-id=134

  【注】

  1、如果同步多个数据库,不能用写为下面形式,这样写mysql会把它们认为是一个数据库

  2、binlog-do-db和binlog-ignore-db=mysql为互斥关系,只设置其中一项即可,一般设置binlog-do-db

# 同步的数据库名
binlog-do-db=db1,db2,db3

  应该分开写:

# 同步的数据库名
binlog-do-db=db1
binlog-do-db=db2
binlog-do-db=db3

  第二步:重启mysql服务:service mysqld restart
  第三步:建立帐户并授权slave

//创建用户
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
//授权用户
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456'; 

  【注】:
  1、一般不用root帐号,
  2、“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替192.168.145.226或客户端ip段192.168.145.* 加强安全。
  3、backup是用户名,从服务器连接主服务器用的连接名,123456该用户名对应的密码

  第四步:刷新权限:mysql> FLUSH PRIVILEGES;
    这时查看数据库所有的用户:select user,host from mysql.user;,可以看到多了一个backup用户,并且全蝎是%,即允许任何用户连接

   第五步:查看master的状态

【Mysql从服务器配置】

  第一步:修改my.cnf文件,在[mysqld]节点下添加一个唯一的server-id

[mysqld]
server-id=191

  第二步:配置从服务器,在从服务器中执行以下命令,关联主服务器

mysql>change master to master_host='192.168.25.134',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1061

  【注】:
  1、master_host为主服务器的ip地址,带引号
  2、master_port为mysql主服务器的端口号,不带引号
  3、master_user为执行同步操作的数据库账号,带引号
  4、master_password为对应账号密码,带引号
  5、master_log_file为在主服务器中执行show master status中看到的的file
  6、master_log_pos为在主服务器中执行show master status中看到的的position
  第三步:启动从服务器复制功能Mysql>start slave; 关闭是:Mysql>stop slave;
  第四步:检查从服务器复制状态mysql> show slave status,在linux中显示如下:

  特别乱,可以在navicat中的从服务器中执行该语句,显示如下:

【Mycat配置】

  Mycat 1.4 支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠,修改mycat的schema.xml,配置如下:

1、balance

  • 0:所有读操作都发送到当前可用的writeHost上
  • 1:所有读操作都随机的发送到readHost
  • 2:所有读操作都随机的在writeHost、readhost上分发

2、writeType

  • 0:所有写操作都发送到可用的writeHost上
  • 1:所有写操作都随机的发送到readHost
  • 2:所有写操作都随机的在writeHost、readhost分上发

3、switchType

  • -1:表示不自动切换
  • 1:默认值,自动切换
  • 2:基于mycal主从同步的状态决定是否切换(如果同步状态正常,就按配置的,如果不正常,读写就自动切换到能用的一者了)

4、switchType
  这个具体是指什么没有查看,在官网权威指南之也没查到,只是说MyCAT心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType=“2” 与 slaveThreshold=“100”,此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制,Mycat心跳机制通过检测 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master>slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是否为0,为0时则表示主从同步,可以安全切换,否则不会
切换。

5、readHost是从属于writeHost的
  即意味着它从那个writeHost获取同步数据,因此,当它所属的writeHost宕机了,则它也不会再参与到读写分离中来,即“不工作了”,这是因为此时,它的数据已经“不可靠”了。基于这个考虑,目前mycat 1.3和1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在Mycat里配置为两个writeHost并设置banlance=1。


配置读写分离后会遇到的问题

  1. mysql写入的时候,没有办法立马同步到写库,写完成立马跳转查看写入信息页面,发现写入的数据没有查询出来。这时的解决方案就是:本地缓存标记法,具体参见https://blog.csdn.net/wb_zjp283121/article/details/89159402
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 73
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 73
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值