用mycat做读写分离:基于 MySQL主从复制
2017-05-15 00:00
776 查看
本文基于MySQL主从复制利用mycat实现读写分离。
mycat在应用当中的作用可以看下图:
mycat可以让程序员只需要关心业务代码的编写,而不用担心后端数据库集群的负载均衡,读写分离,分库分表的数据分片逻辑的编写,只要直接连接mycat就可以了。
首先我们准备一台干净的centos机器,安装好jdk
解压mycat的安装包到/user/local/下
设置mycat的环境变量
使配置文件立即生效
修改配置文件
先配置server.xml
这里配置了两个可以来连接的用户
用户1 user1 密码root 给予了此用户pcx_schema数据库的权限
用户2 user2 密码root 给予了此用户pcx_schema数据库的只读权限
注意这里的pcx_schema 不一定是你数据库上的真实库名.可以任意指定.只要和接下来的schema.xml的配置文件中的库名统一即可
接下来配置schema.xml
一, <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
这里TESTDB 就是我们对外声称的我们有数据库的名称 必须和server.xml中的用户指定的数据库名称一致
添加一个dataNode="dn1" 是指定了我们这个库只在dn1上.没有进行分库
二, <dataNode name="dn1" dataHost="localhost1" database="db1" />
这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名 .
根据你自己的数据库名进行修改.
三,<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
这里只需要配置三个地方 balance="1"与writeType="0" ,switchType=”1”
a. balance 属性负载均衡类型,目前的取值有 4 种:
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 及其以后版本有, 1.3 没有。
b. writeType 属性
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
3. writeType="2",没实现。
c. switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL 主从同步的状态决定是否切换
四,<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />
</writeHost>
这里是配置的我们的两台读写服务器IP地址访问端口和 访问用户的用户名和密码
启动mycat
我们可以使用mysql客户端连接或者navicat来连接mycat
测试一下读写分离
测试一下读操作
我们连接到mycat发送一句select *命令试试
进入mycat的日志目录
查看日志
可以看到select 操作被路由到了192.168.1.7也就是我们的slave节点
接下来我们测试一下写操作
可见插入被路由到了master节点
mycat在应用当中的作用可以看下图:
mycat可以让程序员只需要关心业务代码的编写,而不用担心后端数据库集群的负载均衡,读写分离,分库分表的数据分片逻辑的编写,只要直接连接mycat就可以了。
首先我们准备一台干净的centos机器,安装好jdk
解压mycat的安装包到/user/local/下
设置mycat的环境变量
vi /etc/profile
使配置文件立即生效
source /etc/profile
修改配置文件
先配置server.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <system> <!-- 这里配置的都是一些系统属性,可以自己查看mycat文档 --> <property name="defaultSqlParser">druidparser</property> <property name="charset">utf8mb4</property> </system> <!-- 用户1,对应的MyCat逻辑库连接到的数据节点对应的主机为主从复制集群 --> <user name="user1"> <property name="password">root</property> <property name="schemas">pcx_schema</property> </user> <!-- 用户2,只读权限--> <user name="user2"> <property name="password">root</property> <property name="schemas">pcx_schema</property> <property name="readOnly">true</property> </user> </mycat:server>
这里配置了两个可以来连接的用户
用户1 user1 密码root 给予了此用户pcx_schema数据库的权限
用户2 user2 密码root 给予了此用户pcx_schema数据库的只读权限
注意这里的pcx_schema 不一定是你数据库上的真实库名.可以任意指定.只要和接下来的schema.xml的配置文件中的库名统一即可
接下来配置schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <!-- 定义MyCat的逻辑库 --> <schema name="pcx_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema> <!-- 定义MyCat的数据节点 --> <dataNode name="pcxNode" dataHost="dtHost" database="pcx" /> <!-- 定义数据主机dtHost,连接到MySQL读写分离集群 ,schema中的每一个dataHost中的host属性值必须唯一--> <!-- dataHost实际上配置就是后台的数据库集群,一个datahost代表一个数据库集群 --> <!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡--> <!-- writeType="0",所有写操作发送到配置的第一个writeHost,这里就是我们的hostmaster,第一个挂了切到还生存的第二个writeHost--> <dataHost name="dtHost" maxCon="500" minCon="20" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> <!--心跳检测 --> <heartbeat>show slave status</heartbeat> <!--配置后台数据库的IP地址和端口号,还有账号密码 --> <writeHost host="hostMaster" url="192.168.1.6:3306" user="root" password="root" /> <writeHost host="hostSlave" url="192.168.1.7:3306" user="root" password="root" /> </dataHost> </mycat:schema>
一, <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
这里TESTDB 就是我们对外声称的我们有数据库的名称 必须和server.xml中的用户指定的数据库名称一致
添加一个dataNode="dn1" 是指定了我们这个库只在dn1上.没有进行分库
二, <dataNode name="dn1" dataHost="localhost1" database="db1" />
这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名 .
根据你自己的数据库名进行修改.
三,<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
这里只需要配置三个地方 balance="1"与writeType="0" ,switchType=”1”
a. balance 属性负载均衡类型,目前的取值有 4 种:
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 及其以后版本有, 1.3 没有。
b. writeType 属性
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
3. writeType="2",没实现。
c. switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL 主从同步的状态决定是否切换
四,<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />
</writeHost>
这里是配置的我们的两台读写服务器IP地址访问端口和 访问用户的用户名和密码
启动mycat
cd /usr/local/mycat/bin/ ./mycat start
我们可以使用mysql客户端连接或者navicat来连接mycat
测试一下读写分离
测试一下读操作
我们连接到mycat发送一句select *命令试试
进入mycat的日志目录
cd /usr/local/mycat/logs/
查看日志
可以看到select 操作被路由到了192.168.1.7也就是我们的slave节点
接下来我们测试一下写操作
可见插入被路由到了master节点
相关文章推荐
- 用mycat做读写分离:基于 MySQL主从复制
- 利用mycat实现基于mysql5.5主从复制的读写分离
- 用mycat做读写分离:基于 MySQL主从复制
- 用mycat做读写分离:基于 MySQL主从复制
- 利用mycat实现基于mysql5.5主从复制的读写分离
- 用mycat做读写分离:基于 MySQL主从复制
- 用mycat做读写分离:基于 MySQL主从复制
- 利用mycat实现基于mysql5.5主从复制的读写分离
- 10041---用mycat做读写分离:基于 MySQL主从复制
- 用mycat做读写分离:基于 MySQL主从复制
- 用mycat做读写分离:基于 MySQL主从复制
- 用mycat做读写分离:基于 MySQL主从复制
- 基于mysql的主从复制之Mycat简单配置和高可用
- 基于MYCAT的MYSQL主从与读写分离配置详解与示例
- 分布式架构学习之:035--MyCat在MySQL主从复制基础上实现读写分离
- 基于MYCAT的MYSQL主从与读写分离配置
- mysql主从复制及mycat读写分离
- 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离
- 分布式架构学习之:MyCat在MySQL主从复制基础上实现读写分离
- Mycat之——Mycat在MySQL主从复制基础上实现读写分离