目录
一、读写分离
1.1、什么是读写分离
1.2、为什么要用读写分离
1.3、使用mycat读写分离
1.3.1安装mycat
1.3.2、配置mycat
简单的理解,mycat就是一个数据中间件,可以让开发人员直接访问mycat,然后由mycat去访问具体的数据库服务器,进行数据库的相关操作。而关于读写分离和分库分表,只需要在mycat中进行配置,然后就都由mycat去操作。
一、读写分离
1.1、什么是读写分离
其实就是将数据库分为了主库和从库,主库用于写入数据,从库完成读取数据的操作,主库和从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。
1.2、为什么要用读写分离
大多数的互联网的应用都是读取大于写入操作的,所以,读取的性能就会首先成为数据库服务器的瓶颈问题。读写分离把数据的读取和写入分开多个服务器,很好的解决了数据读取的负载问题。
1.3、使用mycat读写分离
使用mycat进行读写分离,默认是mysql服务器已经做好主从复制,具体可以参考:https://blog.csdn.net/vatxiongxiaohui/article/details/95195046
1.3.1安装mycat
下载mycat:http://www.mycat.io/
下载linux压缩包,解压,可以看到目录结构如下:主要配置都在conf文件夹中
1.3.2、配置mycat
要做读写分离,首先找到conf下的server.xml文件,配置用户(添加下面代码):
<user name="root" defaultAccount="true"><property name="password">root</property><!-- mycat的逻辑数据库 --><property name="schemas">mycatdb</property>
</user>
- 此配置表示我注册了一个账号为root,密码也为root的用户
- 使用的逻辑数据库为mycatdb
然后配置schema.xml文件(我这里是双主双从模式,3307,3308为主服务器,3309,3310为从服务器):
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><!-- 作用:配置逻辑数据库 --><schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100"><!-- 只做读写分离,不做分库分表,schema标签下不用配置table --></schema><!-- 分片配置 作用:dataNode定义了mycat中的数据节点,也就是我们通常说的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库 --><dataNode name="dn1" dataHost="localhost1" database="test01" /><!-- 物理数据库配置 --><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><!-- 心跳语句,根据此判断mysql是否宕机 --><heartbeat>select user()</heartbeat><!-- 配置主库,写入节点 --><writeHost host="hostM3307" url="localhost:3307" user="root" password="root"><!-- 配置从库,读取节点 --><readHost host="host3308" url="localhost:3308" user="root" password="root" /><readHost host="host3309" url="localhost:3309" user="root" password="root" /></writeHost><!-- 配置主库,读取节点 --><writeHost host="hostM3308" url="localhost:3308" user="root" password="root"><!-- 配置从库,读取节点 --><readHost host="host3307" url="localhost:3307" user="root" password="root" /><readHost host="host3310" url="localhost:3310" user="root" password="root" /> </writeHost> </dataHost>
</mycat:schema>
标签 | 说明 |
schema | 逻辑数据库,与server.xml中的schema对应 |
dataNode | 分片信息 |
dataHost | 物理数据库,真实存储数据的数据库 |
schema属性:
属性 | 说明 |
name | 逻辑数据库名,与server.xml中的schema对应 |
checkSQLschema | 建议看文档,false |
sqlMaxLimit | select 时默认的limit,避免查询全表 |
dataNode属性:
属性 | 说明 |
name | 定义数据节点的名字,这个名字需要是唯一的 |
dataHost | 用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性。 |
database | 用于定义该分片属性哪个具体数据库实例上的具体库 |
dataHost属性:
属性 | 说明 |
name | 唯一标识 dataHost 标签,供上层的标签使用。 |
maxCon | 指定每个读写实例连接池的最大连接。 |
minCon | 指定每个读写实例连接池的最小连接 |
balance | 负载均衡类型,具体看文档,此处选1 |
writeType | 负载均衡类型 |
dbType | 指定后端连接的数据库类型 |
dbDriver | 指定连接后端数据库使用的 Driver, |
switchType | 自动切换模式 |
至此,读写分离已经配置好了,可以直接登录mycat(默认端口8066,连接方式和普通数据库一样,如:jdbc:mysql://192.168.0.2:8066/)进行试验。