mysql+mycat读写分离
2017-12-04 21:42
232 查看
环境
192.168.2.118 mysql-master/mycat
192.168.2.119 mysql-slave
配置jdk
配置环境变量并生效
查看java版本,有内容则表示java安装成功
mycat部署
mycat参数配置
1)在/usr/local/mycat/conf/server.xml下设置如下参数
lee1和lee2分别设置密码,用于连接mycat,lee1用于读写,lee2用于只读,testdb是逻辑库
2)在/usr/local/mycat/conf/schema.xml下(先备份cp schema.xml schema.xml.bak)
其中
schema name名称需要与server.xml设定的库名testdb一致,设置数据节点dn1
dataHost即数据节点名称,database为真实数据库名称,即discuz的后台数据库ultrax
balance
0表示不开启读写分离,都在master上执行读写操作
1表示都参与select
2表示所有读请求随机在readhost和writehost分担
3表示所有读请求对应到readhost里去
writeType
0,所有写操作发送到配置的第一个writeHost
1,所有写操作都随机的发送到配置的writeHost
2,不执行写操作。
switchType
-1,不自动切换
1,默认值,自动切换
2,基于MySQL 主从同步的状态决定是否切换
3,基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’
writeHost和readHost分别配置对应后台的mysql主从真实用户密码
3)在mysql主从服务器授权
mycat服务启动并查看启动情况(注意数据库端口的映射)
其中
8066是管理端口,web连接mycat
9066是连接后端db的端口,默认是9066,登录该端口后直接用show @@datasource;语句即可查询主从库的读写状态
端口都是在server.xml里设置的,如果要修改则加入语句改对应的端口
登陆mycat的8066,此处是查看web连接mycat后的数据库等
上面的testdb就是mycat的逻辑库,对应的是真是数据库mysql里的ultrax库
mycat常用命令
进入9066连接端口
1)查看节点状态
name表示datanode名称,即dn1,
datahost数据节点名称
active表示活跃连接数量
idle表示空闲连接数
size表示连接总数量
2)查看心跳状态
3)查看前端连接状态,然后可以根据获得的id直接杀掉连接kill @@connection id,id
4)查看后端连接状态
5)查看数据库资源
其他相关指令包括
测试mycat
1) 在上述的schema.xml设置balance=”0”
A.测试读
登陆mycat的9066端口查看数据库资源
可以看到read_load列是master在增加
登陆mycat的8066端口
然后做查询操作
再登陆9066后可以看到read_load列,master一直在增,而slave一直为0
也就是说balance=”0”的情况下,读都在master上
B.测试写
接着上面的操作,登陆8066端口的mycat,在testdb下创建表
然后登陆9066端口查看
可以看到write_load下master在增加
也就是说balance=”0”的情况下,写都在master上
2)在schema.xml设置balance=”1”
A.测试读
登陆9066查看数据库资源
登陆8066后读取数据
可以看到都在slave上读操作
也就是说balance=”1”的情况下,读都在slave上
B.测试写
登陆8066端口插入数据
可以看到在master上写操作(注意:即使是因为类似语法问题导致的写操作失败,这里的write_load数值也会一直增加,比如insert之类,因为本身是在写操作,所以上面从0直接到了2,而不是1,因为语法错误操作了写一次)
也就是说balance=”1”的情况下,写都在master上
3)在创建表的时候,如果从库没有同步进来,则在118的mycat查询mycattest的时候会提示不存在,然后直接把从库的mysql服务停止,再重新查询就可以查询出来刚插入表的内容
通过上述测试,实现了读写分离功能
备注:
1)启动mycat时候,查看wrapper.log时可能会遇到因为jvm的问题导致mycat启动不了,需要在/usr/local/mycat/conf/wrapper.conf下把Xmx等值调低
如:wrapper.java.additional.10=-Xmx4G
192.168.2.118 mysql-master/mycat
192.168.2.119 mysql-slave
配置jdk
tar -zxf jdk-8u151-linux-i586.tar.gz mv jdk1.8.0_151 /usr/java/
配置环境变量并生效
vim /etc/profile export JAVA_HOME=/usr/java/ export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin source /etc/profile
查看java版本,有内容则表示java安装成功
[root@leeclient java]# java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) Client VM (build 25.151-b12, mixed mode)
mycat部署
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz mv mycat /usr/local/
mycat参数配置
1)在/usr/local/mycat/conf/server.xml下设置如下参数
<user name="lee1"> <property name="password">123456</property> <property name="schemas">testdb</property> </user> <user name="lee2"> <property name="password">123456</property> <property name="schemas">testdb</property> <property name="readOnly">true</property> </user>
lee1和lee2分别设置密码,用于连接mycat,lee1用于读写,lee2用于只读,testdb是逻辑库
2)在/usr/local/mycat/conf/schema.xml下(先备份cp schema.xml schema.xml.bak)
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="localhost1" database="ultrax" /> <dataHost name="localhost1" maxCon="2000" minCon="1" balance="0" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.2.118:3306" user="root" password="123456"> <readHost host="hostS1" url="192.168.2.119:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema>
其中
schema name名称需要与server.xml设定的库名testdb一致,设置数据节点dn1
dataHost即数据节点名称,database为真实数据库名称,即discuz的后台数据库ultrax
balance
0表示不开启读写分离,都在master上执行读写操作
1表示都参与select
2表示所有读请求随机在readhost和writehost分担
3表示所有读请求对应到readhost里去
writeType
0,所有写操作发送到配置的第一个writeHost
1,所有写操作都随机的发送到配置的writeHost
2,不执行写操作。
switchType
-1,不自动切换
1,默认值,自动切换
2,基于MySQL 主从同步的状态决定是否切换
3,基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’
writeHost和readHost分别配置对应后台的mysql主从真实用户密码
3)在mysql主从服务器授权
主从:grant all on *.* to 'root'@'192.168.2.118' identified by'123456'; 主:grant all on *.* to 'root'@'192.168.2.119' identified by'123456'; 或者 主从:grant all on *.* to 'root'@'192.168.2.%' identified by'123456';
mycat服务启动并查看启动情况(注意数据库端口的映射)
/usr/local/mycat/bin/mycat start tail -f /usr/local/mycat/logs/wrapper.log
tail -f /usr/local/mycat/logs/mycat.log
[root@mysqlm logs]# netstat -tunl | grep -E "8066|9066" tcp 0 0 :::8066 :::* LISTEN tcp 0 0 :::9066 :::* LISTEN
其中
8066是管理端口,web连接mycat
9066是连接后端db的端口,默认是9066,登录该端口后直接用show @@datasource;语句即可查询主从库的读写状态
端口都是在server.xml里设置的,如果要修改则加入语句改对应的端口
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
登陆mycat的8066,此处是查看web连接mycat后的数据库等
mysql -h 192.168.2.118 -P8066 -ulee1 -p123456
mysql> show databases; +----------+ | DATABASE | +----------+ | testdb | +----------+ 1 row in set (0.04 sec) mysql>
上面的testdb就是mycat的逻辑库,对应的是真是数据库mysql里的ultrax库
mycat常用命令
进入9066连接端口
mysql -h 192.168.2.118 -P9066 -ulee1 -p123456
1)查看节点状态
show @@datanode;
name表示datanode名称,即dn1,
datahost数据节点名称
active表示活跃连接数量
idle表示空闲连接数
size表示连接总数量
2)查看心跳状态
show @@heartbeat;
3)查看前端连接状态,然后可以根据获得的id直接杀掉连接kill @@connection id,id
show @@connection\G;
4)查看后端连接状态
show @@backend\G;
5)查看数据库资源
show @@database;
其他相关指令包括
show @@help; show @@version;
测试mycat
1) 在上述的schema.xml设置balance=”0”
A.测试读
登陆mycat的9066端口查看数据库资源
mysql -h 192.168.2.118 –P9066 -ulee1 -p123456 show @@datasource;
可以看到read_load列是master在增加
登陆mycat的8066端口
mysql -h 192.168.2.118 -P8066 -ulee1 -p123456
然后做查询操作
use testdb; select * from pre_common_member;
再登陆9066后可以看到read_load列,master一直在增,而slave一直为0
也就是说balance=”0”的情况下,读都在master上
B.测试写
接着上面的操作,登陆8066端口的mycat,在testdb下创建表
use testdb; create table myc a61c atlee (id int,name varchar(20)); insert into mycatlee values (1,'lee1');
然后登陆9066端口查看
show @@datasource;
可以看到write_load下master在增加
也就是说balance=”0”的情况下,写都在master上
2)在schema.xml设置balance=”1”
A.测试读
登陆9066查看数据库资源
show @@datasource;
登陆8066后读取数据
use testdb; select * from pre_common_member;
可以看到都在slave上读操作
也就是说balance=”1”的情况下,读都在slave上
B.测试写
登陆8066端口插入数据
insert into mycatlee values(2,'lee2'); insert into mycatlee values(3,'lee3');
可以看到在master上写操作(注意:即使是因为类似语法问题导致的写操作失败,这里的write_load数值也会一直增加,比如insert之类,因为本身是在写操作,所以上面从0直接到了2,而不是1,因为语法错误操作了写一次)
也就是说balance=”1”的情况下,写都在master上
3)在创建表的时候,如果从库没有同步进来,则在118的mycat查询mycattest的时候会提示不存在,然后直接把从库的mysql服务停止,再重新查询就可以查询出来刚插入表的内容
通过上述测试,实现了读写分离功能
备注:
1)启动mycat时候,查看wrapper.log时可能会遇到因为jvm的问题导致mycat启动不了,需要在/usr/local/mycat/conf/wrapper.conf下把Xmx等值调低
如:wrapper.java.additional.10=-Xmx4G
相关文章推荐
- Mycat学习笔记 第二篇. MySql 读写分离与日志分析——主从多结点
- 推荐:Mycat配置MySQL主从模式(1主1从)下读写分离和自动切换
- mycat 实现mysql读写分离及主从切换
- Mycat学习笔记 第一篇. MySql 读写分离与日志分析——主从单结点
- 实战mycat读写分离和分库分表(2)-本地mysql主从配置
- MyCAT实现MySQL的读写分离
- Mycat在MySQL主从模式(1主1从)下读写分离和及自动切换模式的验证
- MyCAT实现MySQL的读写分离
- Mycat实现mysql读写分离及故障切换
- 变形虫做mysql的负载均衡 读写分离
- 实战mycat读写分离和分库分表(1)-本地mysql多实例搭建
- mysql+mmm+proxy实现mysql读写分离及HA
- spring+mybatis,mysql读写分离操作笔记
- Mysql读写分离方案-Amoeba环境部署记录
- Mysql通过配置主从,读写分离简单实现数据备份,负载均衡
- mysql 读写分离工具
- RDS通过Mysql-Porxy实现读写分离
- 采用Atlas mysql 读写分离工具
- MySQL主从同步、读写分离配置步骤
- springmvc+mybatis+mysql 实现读写分离