1)拓扑如下和实现目标



写操作:都在master

读操作:在slave1上

当master1挂了,写操作自动切换到master2上

当master2挂了,写操作自动切换到master1上

2)Mycat环境安装jdk:省略

3)下载安装MyCAT

wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local

4)配置web服务器连接MyCAT的用户名,密码和数据名

#vim /usr/local/mycat/conf/server.xml    这是web服务器连接mycat的用户名和密码,以及schemas文件对应的名字
<user name="root">
<property name="password">123456</property>
<property name="schemas">testdb</property>
</user>
注释以下内容
<!--
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
-->

4)配置MyCAT连接后端数据库相关信息

schema name = testdb 是web服务器连接Mycat看见的数据库

database=“testdb”是真正数据库名

我这里环境是双主一从

:验证后端服务是否可用

<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="dbpool" database="testdb" />
<dataHost name="dbpool" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="master1" url="192.168.1.31:3306" user="mycat" password="Mycat@123">
<readHost host="slave1" url="192.168.1.33:3306" user="mycat" password="Mycat@123" />
</writeHost>
<writeHost host="master2" url="192.168.1.32:3306" user="mycat" password="Mycat@123">
<readHost host="slave1" url="192.168.1.33:3306" user="mycat" password="Mycat@123" />
</writeHost>
</dataHost>
</mycat:schema>
  • balance属性
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 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
  • write type属性
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost。
writeType="2",没实现。
  • switch type属性
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost。
writeType="2",没实现。

5)在master1上给Mycat创建用户

mysql> grant all on testdb.* to mycat@'192.168.1.%' identified by 'Mycat@123';
mysql> flush privileges;

6)启动Mycat

  • 测试mycat上使用能用master创建的账号登录到mysql
mysql -umycat -h192.168.1.31 -pMycat@123
  • 启动mycat
/usr/local/mycat/bin/mycat start
  • 验证
ps -ef | grep mycat
ss -anltup | grep 8066



7)测试读写分离

  • slave开启查看日志
mysql>show variables like 'general_log%';
mysql>set global general_log = ON;
  • 在web服务器上连接MyCAT
mysql -h192.168.1.30 -uroot -p123456 -P8066
  • 执行查询语句
mysql> select * from testdb.t1;
  • 在slave1上查看查询日志:/var/lib/mysql/localhost.log



    说明读在从上面执行

    当slave1挂机,读会自动切换到主上面查询

    当slave1恢复,读会自动切换到从上面查询

8)测试主主切换

  • master开启查询日志
mysql>show variables like 'general_log%';
mysql>set global general_log = ON;
  • 在web服务器上执行insert语句
mysql> insert into testdb.t1 values(16,'16');

master1上面有看到插入语句

  • 把master1停止mysql服务
systemctl stop mysqld
  • 在web服务器执行insert语句
mysql> insert into testdb.t1 values(17,'17');

发现插入语句自动切换到master2上面执行



总结:master1由停止服务到正常提供服务又自动加入到mycat监控中

最新文章

  1. JavaScript(三) 正则表达式 以及实现的功能
  2. css 设置圆角
  3. NGUI缓动函数
  4. 使用Dezender对zend加密后的php文件进行解密
  5. ubuntu 12.04 安装Docker 实战
  6. python 使用*args 和**kwargs
  7. css 包含的图片和style=&quot;display:none&quot;可以避免图片加载,可以节省网络流量
  8. EffectiveC#17--装箱和拆箱的最小化
  9. iOS 请求数据 error
  10. [HNOI 2013]比赛
  11. InnoDB基本特性
  12. Python基础之列表深浅复制和列表推导式
  13. 用PIL库进行图像处理
  14. 2018谷歌I/O开发者大会8大看点汇总 新品有哪些
  15. sleep() 和 wait() 区别
  16. scala-jdbc-scalike操作jdbc数据库
  17. Java中this和super关键字
  18. 算法笔记_227:填写乘法算式(Java)
  19. linux shell 脚本攻略学习1
  20. ELK日志分析系统简单部署

热门文章

  1. PhalApi 1.4.2 经典封存版 - 码云
  2. 弹框中的elment-form在弹框重新打开后,怎么初始化验证信息
  3. 从pthread 到QThread
  4. javascript string对象方法replace
  5. 安装与配置JDK
  6. 使用Kibana
  7. POJ2406 Power Strings 【KMP 或 后缀数组】
  8. 理解[].forEach.call()
  9. linux bash学习(一)
  10. yaf学习网站