一、安装mycat
MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用 了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。 环境准备 1) JDK 下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 注:必须 JDK7 或更高版本. 2)Mysql下载安装
这个就正常的安装就行没有特殊说明
3) MyCAT 项目主页 https://github.com/MyCATApache/
下载1.4 release
wget https://github.com/MyCATApache/M ... 230038-linux.tar.gz
4)Mycat安装
useradd dba
useradd -g dba mycat
tar xzvf Mycat-server-1.4-release-20151019230038-linux.tar.gz
mv mycat /alidata/cat/
设置环境变量
vim /home/mycat/.bash_profile
export MYCAT_HOME=/alidata/cat/mycat
PATH=$PATH:$MYCAT_HOME/bin
source /home/mycat/.bash_profile
测试下环境变量有没有生效
echo $MYCAT_HOME
因为我是配置读写分离,暂时没有做分片的配置
找到 mycat/conf 配置文件目录
vim server.xml添加一段
1
2
3
4
| <user name="test">
<property name="password">test</property>
<property name="schemas">testdb</property>
</user>
|
这里的testdb就是对外访问的数据库名,test一个是登录用户一个是密码
然后编辑 vim schema.xml文件 这里要说明下初次使用可能会被里面的默认配置看的有点头晕,我这里直接贴出读写分离的配置,供参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="snsfun" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="testdb" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="10.0.0.9:3306" user="root" password="test">
<readHost host="hostS1" url="10.0.0.8:3306" user="root" password="test" />
<readHost host="hostS2" url="10.0.0.7:3306" user="root" password="test" />
</writeHost>
</dataHost>
</mycat:schema>
|
MyCAT的读写分离机制如下:
- 事务内的SQL,默认走写节点,以注释/*balance*/开头,则会根据balance=“1” 或“2” 去获取 .
- 自动提交的select语句会走读节点,并在所有可用读节点中间随机负载均衡,默认根据balance=“1” 或“2” 去获取,以注释/*balance*/开头则会走写,解决部分已经开启读写分离,但是需要强一致性数据实时获取数据的场景走写
- 当某个主节点宕机,则其全部读节点都不再被使用,因为此时,同步失败,数据已经不是最新的,MYCAT会采用另外一个主节点所对应的全部读节点来实现select负载均衡。
- 当所有主节点都失败,则为了系统高可用性,自动提交的所有select语句仍将提交到全部存活的读节点上执行,此时系统的很多页面还是能出来数据,只是用户修改或提交会失败。
dataHost的balance属性设置为: - 0,不开启读写分离机制
- 1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
- 2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡。
一个dataHost元素,表明进行了数据同步的一组数据库,DBA需要保证这一组数据库服务器是进行了数据同步复制的。writeHost相当于Master DB Server,而旗下的readHost则是与从数据库同步的Slave DB Server。当dataHost配置了多个writeHost的时候,任何一个writeHost宕机,Mycat都会自动检测出来,并尝试切换到下一个可用的writeHost。
注意:mycat并不负责读写之间的数据同步,需要自己开启数据库级别的读写同步。
|