Mycat 需要安装JDK 1.7 或者以上版本 第一步:下载jdk-8u131-linux-x64.tar.gz文件 http://haixi.sfkcn.com:8080/201704/tools/jdk-linux-x64.tar.gz 第二步:新建/usr/java文件夹,将jdk-8u131-linux-x64.tar.gz放到该文件夹中,并解压到当前目录下 第三步:配置环境变量 在/etc/profile底部加入如下内容: JAVA_HOME=/usr/java/jdk1.8.0_131 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar export PATH JAVA_HOME CLASSPATH[root@Slave java]# source /etc/profile #使环境变量生效 查看java –version
服务启动与启动设置 MyCAT在Linux中部署启动时,首先需要在Linux系统的环境变量中配置MYCAT_HOME,操作方式如下: 1)vi /etc/profile,在系统环境变量文件中增加 MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH 2) 执行 source /etc/profile 命令,使环境变量生效。 如果是在多台Linux系统中组建的MyCAT集群,那需要在MyCAT Server所在的服务器上配置对其他ip和主机名的映射,配置方式如下: vi /etc/hosts 例如:我有3台机器,配置如下: IP 主机名: 192.168.12.110 Master.cn 192.168.12.111 Slave.cn 192.168.12.112 Slave-2.cn 编辑完后,保存文件。 (mycat的用户账号和授权信息是在conf/server.xml文件中配置 Vim /usr/local/mycat/conf/server.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <system> <property name="defaultSqlParser">druidparser</property> </system> <user name="root"> <property name="password">123456</property> <property name="schemas">ha</property> </user> <user name="user"> <property name="password">user</property> <property name="schemas">ha</property> <property name="readOnly">true</property> </user> </mycat:server> 编辑MyCAT的配置文件schema.xml,关于dataHost的配置信息如下: Vim /usr/local/mycat/conf/schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="ha" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'> </schema> <dataNode name="dn1" dataHost="dthost" database="ha"/> <dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="Slave.cn" url="localhost:3306" user="root" password="123456"> </writeHost> <writeHost host="Slave.cn" url="192.168.12.111:3306" user="root" password="123456" /> </dataHost> </mycat:schema> 有两个参数需要注意,balance和 switchType。 其中,balance指的负载均衡类型,目前的取值有4种:
- balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
- balance="2",所有读操作都随机的在writeHost、readhost上分发。
- balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力 switchType指的是切换的模式,目前的取值也有4种:
- switchType='-1' 表示不自动切换
- switchType='1' 默认值,表示自动切换
- switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
- switchType='3'基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'。 经过以上两个步骤的配置,就可以到/usr/local/mycat/bin 目录下执行: ./mycat start 即可启动mycat服务!
配置MYSQL主从 SLAVE上创建数据库和表,用于实现写操作: [root@Slave ~]# mysql -uroot -p123456 mysql> create database ha; mysql> use ha; mysql> create table test(id int,name varchar(20)); mysql> insert into test values(1,’man’); 授权给mycat登陆数据库使用的帐号 mysql> GRANT ALL PRIVILEGES ON . TO 'mycat'@"%" IDENTIFIED BY "123456"; mysql> grant replication slave on . to slave@"10.10.10.%" identified by "123456"; mysql>flush privileges; mysqldump –uroot –p123456 -B ha>ha.sql #导出给从库 关闭密码强度审计,在my.cnf添加validate-password=off SLAVE-2上导入数据库和表,用于实现读操作: [root@Slave-2 ~]# mysql -uroot -p123456<ha.sql 授权给mycat登陆数据库使用的帐号 mysql> grant all on db.* to mycat@'%' identified by '123456'; mysql>flush privileges; mysql>stop slave; #停止slave mysql> change master to master_host='192.168.12.111',master_user='slave',master_password='123456'; mysql> start slave; #启动slave mysql> show slave status\G 查看状态 ,有两个yes主从同步成功! 启动服务MYCAT服务 [root@Master ~]# /usr/local/mycat/bin/mycat start 测试读写分离 当我们SLAVE挂掉后咋样呢 模拟故障:从服务器挂掉了 [root@Slave-2 ~]# systemctl stop mysqld 在客户端上测试读写 [root@Master ~]# mysql -uroot -p123456 -h 192.168.12.110 -P8066 mysql> use ha; mysql> select * from t1;
模拟故障:主服务器挂掉了 [root@Slave ~]# systemctl stop mysqld 在客户端上测试读写 [root@Master ~]# mysql -uroot -p123456 -h 192.168.12.110 -P8066 mysql> create table t3(id int); ERROR 1184 (HY000): 拒绝连接 #主数据库停止了,是无法写操作的,但不影响读. mysql> use ha; mysql> select * from t1;