mysql 双主 mycat_mycat +mysql双主高可用负载均衡

背景:w大学进行全面升级,对数据库进行重新设计。要求:数据安全冗余,故障切换,比原数据库要更高并发。

初步方案:keep alive +MySQL 双主。后改为mycat+MySQL双主读写分离自动切换。

于是在虚拟机上以与该大学较像的某项目进行初步测试。

Mycat   192.168.193.136   windows服务器

MySQL1 192.168.193.137   centos7.5

MySQL2 192.168.193.135   centos7.5

1 首先要在137与135上安装MySQL,并且使其互为主从。简单更改下MySQL配置文件

135

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

137

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在135上创建一个用于复制的账号

grant replication slave on *.* to'rep'@'192.168.193.%' identified by 'hh123';

然后再137上 改变它的主服务器为135

change master to

master_host='192.168.193.135',master_user='rep',master_password='hh123',master_log_file='xxxx',master_log_pos=123;

启动slave 查看状态,show slave

status\G,如下图,两个yes表示设置主从成功,如果没有根据实际情况排错,特别注意下防火强端口要开放,selinux如果不会配置,要改成permissive或者disabled才行。临时更改selinux,setenforce 0 (查看getenforce)重启即失效。永久更改vim /etc/selinux/config 重启有效。

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

137 同样执行上述步骤。互为主从成功后,安装mycat,安装(略)

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

更改配置文件

Server.xml

Mycat 登录用户 密码 schemas 逻辑库名(要与schemas.xml中相同)

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Schemas.xml

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

需要注意的事项

1

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

checkSQLschema

当该值设置为 true 时,如果我们执行语句**select * from TESTDB.travelrecord;**则MyCat 会把语句修改为**select * from travelrecord;**。即把表示 schema 的字符去掉,避免发送到后端数据库执行时报**(ERROR1146 (42S02): Table ‘testdb.travelrecord’ doesn’t exist)。**不过,即使设置该值为 true ,如果语句所带的是并非是 schema 指定的名字,例如:**select * fromdb1.travelrecord;** 那么 MyCat 并不会删除 db1 这个字段,如果没有定义该库的话则会报错,所以在提供SQL语句的最好是不带这个字段。

sqlMaxLimit

当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行**select* from TESTDB.travelrecord;**的效果为和执行**select * from TESTDB.travelrecord limit 100;**相同。设置该值的话,MyCat 默认会把查询到的信息全部都展示出来,造成过多的输出。所以,在正常使用中,还是建议加上一个值,用于减少过多的数据返回。当然 SQL 语句中也显式的指定limit 的大小,不受该属性的约束。需要注意的是,如果运行的 schema 为非拆分库的,那么该属性不会生效。需要手动添加 limit 语句。

2

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

dataNode 标签定义了MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。

dataHost 属性

该属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性。

database 属性

该属性用于定义该分片属性哪个具体数据库实例上的具体库,因为这里使用两个纬度来定义分片,就是:实例+具体的库。因为每个库上建立的表和表结构是一样的。所以这样做就可以轻松的对表进行水平拆分。

3

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

balance 属性

负载均衡类型,目前的取值有 3 种:

1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。

2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

3. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。

4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,

注意 balance=3 只在 1.4 及其以后版本有.

writeType 属性

负载均衡类型,目前的取值有 3 种:

1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,

重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties.

2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

switchType 属性

-1 表示不自动切换

1 默认值,自动切换

2 基于 MySQL 主从同步的状态决定是否切换

心跳语句为show slave status

3 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)

心跳语句为show status like ‘wsrep%’

heartbeat 标签

这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL可以使用 select user(),Oracle 可以使用 select 1 from dual 等。

这个标签还有一个 connectionInitSql 属性,主要是当使用 Oracla 数据库时,需要执行的初始化 SQL 语句就这个放到这里面来。例如:alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'

1.4 主从切换的语句必须是:show slave status

在管理接口查看rs_code 1 表示连接成功 -1表示无法连接,如果某个MySQL显示为-1,但是服务正常,防火墙也开着。说明该MySQL没有权限,给账号赋予权限即可

Grant allon *.* to root@’%’ identified by ‘xxxxx’用户名密码一定和datahost 设置的一样。

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

经过简单的增删改查、宕机测试,没有问题。但是如果部署在生产环境需要进一步测试。

如何查看mycat是否读写分离了呢,我们需要测试一下

首先更改一下mycat 日志,把info改成debug,重启mycat

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

然后执行查询语句

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

发现在135上

然后进行删除更改和插入操作

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

发现在137上

读写分离没有问题

然后验证宕机自动切换,把137MySQL停止

112d5b08568d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

网站依然可以访问,增删改查也没有问题,但是mycat日志却没有显示135的ip,大概问题已找到,需要验证。

启动137mysql服务,再次执行增删改查。此时服务正常,但是mycat日志依然没有太明确的显示,无法确认是否读写分离。所以当主mysql修复好加入后,最好重启下从MySQL,确保读写分离生效。或者,mycat配置文件中再修改下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值