一:软件环境
Window7
Mycat-server1.6
JDK1.8
Mysql5.62台
二:读写分离的好处增加了冗余(备份数据)。
读写分开,减轻机器压力,提高数据库并发。
Mycat自身不提供主从复制的功能,也不做数据备份,因此应用Mycat做读写分离,主从复制还得使用Mysql的机制。
mysql主从复制配置详见:http://blog.csdn.net/qq_33556185/article/details/52958083读写分离架构图:
三:读写分离配置
(1)配置连接信息
Mycat的server.xml配置逻辑库的名称访问的账号密码
digdeep
TESTDB
user
TESTDB
true
配置说明:
配置中name是应用连接中间件逻辑库的用户名。
mycat中password是应用连接中间件逻辑库的密码。
schemas中可以配置一个或多个。
readOnly是应用连接中间件逻辑库所具有的权限。true为只读,false为读写都有,默认为false。
(2)配置数据库信息
修改schema里面的配置
仅仅主从读写分离的配置:
show slave status
主挂掉之后自动切换到从的配置:
show slave status
配置说明:
name属性唯一标识dataHost标签,供上层的标签使用。
maxCon属性指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的
writeHost、readHost标签都会使用这个属性的值来实例化出连接池的最大连接数。
minCon属性指定每个读写实例连接池的最小连接,初始化连接池的大小。
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及其以后版本有,1.3没有。
writeType属性负载均衡类型,目前的取值有3种:
1.writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties.
2.writeType="1",所有写操作都随机的发送到配置的writeHost,1.5以后废弃不推荐。
3.writeType="2",不执行写操作
switchType属性
-1 表示不自动切换
1 默认值,自动切换
2 基于MySQL主从同步的状态决定是否切换
3 基于MySQLgalarycluster的切换机制(适合集群)(1.4.1)
心跳语句为show status like‘wsrep%’
dbType属性
指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用
JDBC连接的数据库。例如:mongodb、oracle、spark等。
dbDriver属性指定连接后端数据库使用的
Driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb。其他类型的数据库则需要使用JDBC驱动来支持。从1.6版本开始支持postgresql的native原始协议。如果使用JDBC的话需要将符合JDBC 4标准的驱动JAR包放到MYCAT\lib目录下,并检查驱动JAR包中包括如下目录结构的文件:
META-INF\services\java.sql.Driver。在这个文件内写上具体的Driver类名,例如:com.mysql.jdbc.Driver。
heartbeat标签这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL可以使用select user(),Oracle可以使用select 1 from dual等。这个标签还有一个
connectionInitSql属性,主要是当使用Oracla数据库时,需要执行的初始化SQL
语句就这个放到这里面来。例如:altersession set nls_date_format='yyyy-mm-dd hh24:mi:ss'
1.4主从切换的语句必须是:showslave status
writeHost标签、readHost标签
这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,
writeHost指定写实例、readHost指定读实例,组着这些读写实例来满足系统的要求。
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost
指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。
(3)启动mycat
在mycat的lib包下面丢入mysql的驱动包,然后在mycat\bin目录下找到startup_nowrap.bat双击运行。
双击没有一闪而退,就启动成功了。如果启动不成功,仔细检查配置信息。
将mycat启动起来后,用jdbc的方式连接,默认端口是8066,逻辑库名和账号密码就是在server里配置的信息。
将mycat的日志输出级别改完debug,在conf/log4j2.xml里配置
然后去查询去添加数据在/logs/mycat.log日志文件里查看sql被路由到了哪个服务器上
特别注意:
查询语句不要加事务,否则读操作会被分发到写服务器上。