linux环境下,mysql读写分离详细配置步骤


前言

上一节讲到了mysq的主从复制,本节主要是将读写分离,去解决数据库性能的问题,减轻主从数据库的压力,进而提高每个数据库读写的性能。
本过程是我亲自操作和实验的,我将详细的过程进行了整理和记录。


一、使用mycat的能做什么

1、数据库的读写分离

通过Mycat可以自动实现写数据时操作主数据库,读数据时操作从数据库,这样能有效地减轻数据库压力,也能减轻IO压力。
实现读写分离,当主出现故障后,Mycat自动切换到另一个主上,进而提供高可用的数据库服务,当然我需要部署多主多从的模式。
在这里插入图片描述
如果有了Mycat,客户端直接连接Mycat,可以实现读写分离,如果主出现问题,会自动切换到从服务器上

2、数据库分库分表

分库分表指的是对数据库数据的拆分,分为两种:水平拆分和垂直拆分

1、水平切分(横向切分)

根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上面

2、垂直切分(纵向切分)

按照不同的表来切分到不同的数据库服务器之上

3、结论

1、性能有瓶颈了,可以读写分离
2、数据库容量有瓶颈了,可以分库分表

二、下载mycat

下载地址

三、解压

因为是使用Java语言开发的,所以直接解压即可使用。

tar –zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

在这里插入图片描述

在这里插入图片描述
解压后的目录
在这里插入图片描述

四、操作命令

切换到mycat的bin路径下

#启动命令
./mycat start
#停止命令
./mycat stop

五、配置mycat

1、server.xml

主要用于配置mycat需要的服务器信息
常用配置:
配置序列生成方式
配置mycat逻辑数据库
配置mycat的访问账户和密码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <!--1为开启实时统计、0为关闭 -->
        <property name="useSqlStat">0</property>
        <!-- 1为开启全加班一致性检测、0为关闭 -->
        <property name="useGlobleTableCheck">0</property>
        <property name="sequnceHandlerType">2</property>
        <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
        <property name="processorBufferPoolType">0</property>
        <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(
                如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
        <property name="handleDistributedTransactions">0</property>
        <!--off heap for merge/order/group/limit      1开启   0关闭-->
        <property name="useOffHeapForMerge">1</property>
        <!--单位为m-->
        <property name="memoryPageSize">1m</property>
        <!--单位为k-->
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <!--单位为m-->
        <property name="systemReserveMemorySize">384m</property>
        <!--是否采用zookeeper协调切换  -->
        <property name="useZKSwitch">true</property>
    </system>
    <!--设置连接mycat时的用户名和密码, 逻辑库-->
    <user name="mycat">
        <property name="password">123456</property>
        <property name="schemas">mycatdb</property>
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">mycatdb</property>
        <property name="readOnly">true</property>
    </user>

2、schema.xml

用于配置的逻辑数据库的映射、表、分片规则、数据结点及真实的数据库信息;

常用配置:
配置逻辑库映射
配置垂直切分的表
配置真实的数据库
配置读写结点

2.1、配置schema

2.1.1、作用

schema用于配置逻辑库

2.1.2、配置说明

只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table
给schema标签加上属性dataNode,配置dataNode的名字(name)

2.1.3、具体配置
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>

2.2、配置dataNode

2.2.1、作用

dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库

2.2.2、配置说明

name
定义数据节点的名字,这个名字需要是唯一的,这个名字在schema里面会使用到;
dataHost
用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性
database
用于对应真实的数据库名,必须是真实存在的;

2.2.3、具体配置
<dataNode name="dn1" dataHost="localhost1" database="test" />

2.3、配置dataHost

2.3.1、作用

定义具体的数据库实例、读写分离配置和心跳语句;

2.3.2、配置说明

balance属性
负载均衡类型,目前的取值有4种:
balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上;
balance=“1”,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
balance=“2”,所有读操作都随机的在writeHost、readhost上分发
balance=“3”,所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
推荐balance设置为1
writeType
已过时,1.6版本就不用了
switchType属性
用于指定主服务器发生故障后的切换类型
-1 表示不自动切换
1 默认值,自动切换(推荐)
2 基于MySQL主从同步的状态决定是否切换
3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1)
通常情况下,我们MySQL采用双主双从的模式下,switchType为1即可。因为双主从模式下,主从同步关系很复杂,不能根据MySQL的状态来切换。只需要在一个主出问题后,切换到另外的主。
heartbeat标签
用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行
当switchType为1时,mysql心跳检查语句是select user()
当switchType为2时,mysql心跳检查语句是show slave status
当switchType为3时,mysql心跳检查语句是show status like ‘wsrep%’
writeHost与readHost标签
这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例,组合这些读写实例来满足系统的要求。
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。

2.4、最终配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table,给schema标签加上属性dataNode,配置dataNode的名字(name)-->
    <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
    <!-- database 是MySQL数据库的库名 -->
    <dataNode name="dn1" dataHost="localhost1" database="workdb" />
    <!--
    dataNode节点中各属性说明:
    name:指定逻辑数据节点名称;
    dataHost:指定逻辑数据节点物理主机节点名称;
    database:指定物理主机节点上。如果一个节点上有多个库,可使用表达式db$0-99,     表示指定0-99这100个数据库;

    dataHost 节点中各属性说明:
        name:物理主机节点名称;
        maxCon:指定物理主机服务最大支持1000个连接;
        minCon:指定物理主机服务最小保持10个连接;
        writeType:指定写入类型;
            0,只在writeHost节点写入;
            1,在所有节点都写入。慎重开启,多节点写入顺序为默认写入根据配置顺序,第一个挂掉切换另一个;
        dbType:指定数据库类型;
        dbDriver:指定数据库驱动;
        balance:指定物理主机服务的负载模式。
            0,不开启读写分离机制;
            1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡;
            2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡;
-->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- 可以配置多个主从 -->
        <writeHost host="hostM1" url="192.168.111.132:3306" user="root" password="123456">
            <!-- 可以配置多个从库 -->
            <readHost host="hostS2" url="192.168.111.132:3307" user="root" password="123456"/>
        </writeHost>
    </dataHost>
</mycat:schema>

六、测试读写分离

1、启动

将修改好的配置文件上传到Mycat的conf目录下
配置好MySQL主从复制并启动主从MySQL3306和3307
启动Mycat
执行命令:

/usr/local/soft/mycat/bin/mycat start

在这里插入图片描述

2、验证

首先在mycatdb中添加一条数据
在这里插入图片描述
然后在主库3306和从库中3307都可以看到这条数据了,说明写入和同步完成。
因为3307是从库,现在将3307中新加的这条数据更改一下
在这里插入图片描述
然后再通过mycatdb查询
在这里插入图片描述
此时说明查询的是3307的从库。

总结

以上就是今天要讲的内容,如有任何问题,可以留言。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半路出身程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值