搭建Mycat实现读写分离

                  image.png                     

环境

mycat   192.168.43.160 

master  192.168.43.109 

slave   192.168.43.200 

 

1 服务安装与配置

(1)

 [root@CO10 ~]# tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

[root@CO10 ~]# ls /usr/local/

bin  etc  games  include  lib  lib64  libexec  mycat  sbin  share  src

[root@CO10 ~]# ll /usr/local/mycat/

image.png

 

 

(2)Mycat 需要安装JDK 1.7 或者以上版本

[root@CO10 ~]# rpm -ivh jdk-8u60-linux-x64.rpm

[root@CO10 ~]# rpm -pql jdk-8u60-linux-x64.rpm

/usr/java/jdk1.8.0_60/

3)调用环境变量

[root@CO10 ~]# vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_60/

export JAVA_BIN=/usr/java/jdk1.8.0_60/bin

export PATH=${JAVA_HOME}bin:$PATH

export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar

export MYCAT_HOME=/usr/local/mycat

export PATH=$MYCAT_HOME/bin:$PATH

image.png 

[root@CO10 ~]# source /etc/profile  #使环境变量生效

image.png

image.png

 (4)编写hosts文件

[root@CO10 ~]# vim /etc/hosts

192.168.43.160  mycat.cn

192.168.43.109  master.cn

192.168.43.200  slave.cn

2 服务启动与启动设置

1mycat的用户账号和授权信息是在conf/server.xml文件中配置

[root@CO10 mycat]# vim conf/server.xml

image.png

(2)编辑MyCAT的配置文件schema.xml,关于dataHost的配置信息如下:

[root@CO10 conf]# cp -rp schema.xml schema.xml.bak

Vim /usr/local/mycat/conf/schema.xml

image.png

(3)启动服务

[root@CO10 conf]# mycat star

[root@CO10 conf]# mycat status

Mycat-server is running (7225).

监听端口8066

image.png[

root@CO10 ~]# mysql -h192.168.43.160 -uroot -p501524 -P8066

测试登入成功

image.png 

配置Mysql主从参考链接:http://blog.51cto.com/13719714/2107950


master上创建数据库和表,用于实现写操作:

[root@CO11~]# mysql -uroot -p

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 "Ggrr50152412!";

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上导入数据库和表,用于实现读操作:

[root@CO12~]# mysql -uroot -p123456<ha.sql

授权给mycat登陆数据库使用的帐号

mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "Ggrr50152412!";

mysql>flush privileges;

mysql>stop slave;    #停止slave

mysql> change master to master_host='192.168.43.109',master_user='slave',master_password='123456';

mysql> start slave;    #启动slave

mysql> show slave status\G  查看状态 ,有两个yes主从同步成功!

 

重新启动服务mycat服务

测试读写分离

 

(1)模拟故障:从服务器挂掉了

image.png

说明读操作的路由切换到master上了,对外没有任何影响!

(2)模拟故障:主服务器挂掉了

在客户端上测试读写,拒绝连接,主数据库停止了,是无法写操作的,但不影响读.

 

有两个参数需要注意,balance和 switchType。

其中,balance指的负载均衡类型,目前的取值有4种:

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不负担读压力

switchType指的是切换的模式,目前的取值也有4种:

1. switchType='-1' 表示不自动切换

2. switchType='1' 默认值,表示自动切换

3. switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status

4. switchType='3'基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'。

 


猜你喜欢

转载自blog.51cto.com/13719714/2115134