配置文件简单介绍
逻辑库:schema
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> 逻辑库将来访问的时候定义到dn1节点上 登入MyCAT [root@db01 ~]# mysql -uroot -p123456 -h 127.0.0.1 -P8066 mysql> show databases; +----------+ | DATABASE | +----------+ | TESTDB | +----------+
数据节点:datanode
<dataNode name="dn1" dataHost="localhost1" database= "world" />
数据主机:datahost(w和r)
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> <heartbeat>select user()</heartbeat> <writeHost host="db1" url="10.0.0.200:3307" user="root" password="123"> <readHost host="db2" url="10.0.0.200:3309" user="root" password="123" /> </writeHost> </dataHost>
读写分离结构配置
vim schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="localhost1" database= "world" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mys ql" dbDriver="native" switchType="1"> <heartbeat>select user()</heartbeat> <writeHost host="db1" url="10.0.0.200:3307" user="root" password="123"> <readHost host="db2" url="10.0.0.200:3309" user="root" password="123" /> </writeHost> </dataHost> </mycat:schema> 重启mycat mycat restart 读写分离测试 mysql> use TESTDB mysql -uroot -p -h 127.0.0.1 -P8066 show variables like 'server_id'; begin; show variables like 'server_id'; 总结: 以上案例实现了1主1从的读写分离功能,写操作落到主库,读操作落到从库.如果主库宕机,从库不能在继续提供服务了。
配置读写分离及高可用
[root@db01 ~]# cd /data/mycat/conf/ [root@db01 conf]# mv schema.xml schema.xml.rw [root@db01 conf]# vim schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="sh1"> </schema> <dataNode name="sh1" dataHost="db" database= "world" /> <dataHost name="db" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbD river="native" switchType="1"> <heartbeat>select user()</heartbeat> <writeHost host="db1" url="10.0.0.200:3307" user="root" password="123"> <readHost host="db2" url="10.0.0.200:3309" user="root" password="123" /> </writeHost> <writeHost host="db3" url="10.0.0.201:3307" user="root" password="123"> <readHost host="db4" url="10.0.0.201:3309" user="root" password="123" /> </writeHost> </dataHost> </mycat:schema> 真正的 writehost:负责写操作的writehost standby writeHost :和readhost一样,只提供读服务 当写节点宕机后,后面跟的readhost也不提供服务,这时候standby的writehost就提供写服务, 后面跟的readhost提供读服务 测试:三读一写 mysql -uroot -p123456 -h 127.0.0.1 -P 8066 mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 19 | +-------------+ mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 9 | +-------------+ mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 17 | +-------------+ mysql> begin;select @@server_id;commit; +-------------+ | @@server_id | +-------------+ | 7 | +-------------+ 对db01 3307节点进行关闭,测试读写高可用操作,一写一读 [root@db01 conf]# systemctl stop mysqld3307 17为写节点,19为读节点 对db01 3307节点进行启动,测试读写高可用操作,一写三读 17为写节点,7,9,19为读节点
配置中的属性介绍
balance属性
负载均衡类型,目前的取值有3种: 1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。 2. balance="1",全部的readHost与standby writeHost参与select语句的负载均衡,简单的说, 当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。 3. balance="2",所有读操作都随机的在writeHost、readhost上分发。
writeType属性
负载均衡类型,目前的取值有2种: 1. writeType="0", 所有写操作发送到配置的第一个writeHost, 第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为主,切换记录在配置文件中:dnindex.properties . 2. writeType=“1”,所有写操作都随机的发送到配置的writeHost,但不推荐使用
switchType属性
-1 表示不自动切换 1 默认值,自动切换 2 基于MySQL主从同步的状态决定是否切换 ,心跳语句为 show slave status
datahost其他配置
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> maxCon="1000":最大的并发连接数 minCon="10" :mycat在启动之后,会在后端节点上自动开启的连接线程 tempReadHostAvailable="1" 这个一主一从时(1个writehost,1个readhost时),可以开启这个参数,如果2个writehost,2个readhost时 <heartbeat>select user()</heartbeat> 监测心跳