服务器-节点: 4台

  • mysql-主: 192.168.2.40
  • mysql-从-node-0: 192.168.2.41
  • mysql-从-node-1: 192.168.2.42
  • mycat: 192.168.2.45

操作过程

  • 1.搭建mysql主从节点
  • 2.搭建mycat中间件节点
  • 3.mycat服务配置
  • 4.测试读写分离,读的分发

1.搭建mysql主从节点

Mysql-高可用集群主从单一模式-binlog

2.搭建mycat中间件节点

# 2-1.基础环境搭建: 安装jdk
# 下载页面:  https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
rpm -ivh jdk-8u201-linux-x64.rpm# 2-2.下载安装 mycat:
wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -P /usr/local/src/
tar xvf /usr/local/src/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local
# 配置: 写入环境变量,增加相应用户
echo export PATH=$PATH:/usr/local/mycat/bin >>/etc/profile
echo export MYCAT_HOME=/usr/local/mycat >> /etc/profile
source /etc/profile
# 增加相应用户
groupadd mycat -g 910
useradd  mycat -g 910
chown -R mycat:mycat /usr/local/mycat

3.mycat服务配置

3-1.读写数据库配置

vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><!-- 声明一个逻辑表, 表名为TESTDB, 和server.xml中的对应 --><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema><!-- 通过dataHost定义的数据库: database="xh"(真实数据库) --><dataNode name="dn1" dataHost="dataHost01" database="xh" /><dataHost name="dataHost01" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><!-- 写入节点(主节点) --><writeHost host="serverM1" url="192.168.2.40:3306" user="myuser" password="Aa123456"><!-- 读取节点(从节点) --><readHost host="serverS0" url="192.168.2.41:3306" user="myuser" password="Aa123456"/><readHost host="serverS1" url="192.168.2.42:3306" user="myuser" password="Aa123456"/></writeHost></dataHost>
</mycat:schema>

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

  • 0: 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
  • 1: 全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡
  • 2: 所有读操作都随机的在writeHost、readhost上分发。
  • 3: 所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
    switchType指的是切换的模式,目前的取值也有4种:
  • -1: 表示不自动切换
  • 1: 默认值,表示自动切换
  • 2: 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
    writeType值:
  • 0: 所有请求,分发到第一个: dataHost
  • 1: 所有请求,分发到所有的: dataHost
  • 2: 不执行写操作

3-2.mycat服务,用户配置

vim /usr/local/mycat/conf/server.xml
....
# 服务端口
<property name="serverPort">8066</property>
....
// 管理员配置,读写
<user name="root" defaultAccount="true"><property name="password">123456</property><property name="schemas">TESTDB</property>
</user>
// 普通用户配置,只读
<user name="user" defaultAccount="true"><property name="password">123456</property><property name="schemas">TESTDB</property><property name="readOnly">true</property>
</user>
....

3-3.开启日志debug,启动服务:

vim /usr/local/mycat/conf/log4j2.xml
....
# 开启debug日志
<asyncRoot level="info" includeLocation="true">    改为    <asyncRoot level="debug" includeLocation="true">
....
# 启动服务
mycat start
# 启动防火墙规则
firewall-cmd --permanent --add-port=8066/tcp && firewall-cmd --reload

4.测试读写分离

// 4-1.分发测试
// 4-1-1.先将 schema.xml 中的配置为:  balance=0,不进行分发操作,【读写】全部在【主库-192.168.2.40】
....
<dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
....
// 客户端链接mycat
![](https://s1.51cto.com/images/blog/201904/06/d69dfb492c47a1f35dda3e7d4621d46c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
// 分别查看: 数据库(【主-192.168.2.40】,【从0-192.168.2.41】,【从1-192.168.0.42】)查询次数,写入次数:
// 查询次数
show global status like 'Com_select';
// 写入次数
show global status like '%Com_in%';// 【客户端】执行查询: 10次,注意:工具可能不能直接打开表进行操作,只能运行sql语句
SELECT * FROM `user` limit 1;
INSERT `user`(name) VALUES('王五1');
INSERT `user`(name) VALUES('王五2');
INSERT `user`(name) VALUES('王五3');
// 分别查看: 数据库(主,从0,从1)查询次数,应该只有【主库-192.168.2.40】有明显的增加
//// 4-1-2.更改schema.xml 中的配置为:  balance=3,读在从库,写在主库
// 客户端】执行查询: 10次
//  分别查看: 数据库(主,从0,从1)查询次数,应该只有【从0-192.168.2.41】,【从1-192.168.0.42】有明显的增加

5.遗留问题:

  • 主库-宕机后,查询语句也无法执行
  • 从库-有一台宕机后,查询语句也无法执行

转载于:https://blog.51cto.com/3168834/2374749

Mysql-高可用集群[MyCat中间件使用](三)相关推荐

  1. heartbeat+DRBD+mysql高可用集群实战

      heartbeat+DRBD+mysql高可用集群实战 四台主机 主机名                 IP地址             用途 dbm128                    ...

  2. mysql1.7(mysql优化,mysql-mmm软件介绍,mysql高可用集群。)

    一,mysql优化. 1. 1mysql服务工作过程 mysql服务由8个功能组件组成: 1,管理工具  把软件包安装后,提供的命令. #mv /etc/my.cnf   /etc/my.cnf.ba ...

  3. 企业主流MySQL高可用集群

    选型 10款常见MySQL高可用方案选型解读 MYSQL(高可用方案) 目前最流行的是:主从复制.基于Galera的方案 企业主流MySQL高可用集群 了解 MySQL 集群之前,先看看单节点数据库的 ...

  4. 双vip的MySQL高可用集群

    目录 一.mysql集群的搭建 IP地址规划: 使用ansible给从服务器安装mysql 1.使用master与所有从服务器建立SSH免密通道,然后添加到mysqld组到hosts文件里面 2.使用 ...

  5. nfs mysql_heatbeat-gui实现基于nfs的mysql高可用集群

    一.简述HA高可用集群 高可用集群就是当集群中的一个节点发生各种软硬件及人为故障时,集群中的其他节点能够自动接管故障节点的资源并向外提供服务.以实现减少业务中断时间,为用户提供更可靠,更高效的服务. ...

  6. 企业中MySQL高可用集群架构三部曲之MM+keepalived

    各位老铁们,老张与大家又见面了.看到各位在博客里面给我的留言和访问量的情况,我很是欣慰,也谢谢大家对我的认可.我写这些博客,就是想把自己对于MySQL数据库的一些看法和自己平时的实战经验分享出来,我们 ...

  7. MYSQL高可用集群架构——MHA架构

    MHA高可用集群 文章目录 一.MHA 简介: 二.部署 MHA: 第一步:三台主从服务器安装 mysql 第二步:修改 mysql 的主配置文件:/etc/my.cnf ,注意三台服务器的 serv ...

  8. gelera mysql_基于Galera的MySQL高可用集群

    MySQL的高可用方案 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据 ...

  9. mysql高可用集群MHA,PXC

    MHA+MYSQL主从同步结构 MHA由日本dena公司youshimaton开发 是一套优秀的实现mysql高可用的解决方案 数据库的自动故障切换操作能做到在0-30秒内完成 MHA能确保在故障切换 ...

最新文章

  1. Python 3.x print 小结
  2. boost::posix_time模块实现本地时间和 UTC 之间的转换的测试程序
  3. 每天一道LeetCode-----将间隔集中有重叠的间隔合并
  4. vue --- [全家桶]vue-router
  5. 2020蓝桥杯省赛---java---B---8(数字三角形)
  6. 发生一个未处理的异常 脚本调试 错误号2912
  7. c语言定义学生结构体类型,C语言中结构体的三种定义方式
  8. 阮兄弟的致远OAa8v5移动端增加功能和OEM实例
  9. 程序猿周末副职业_早上,晚上和周末:我如何改变职业并成为程序员
  10. java字符串第一个字母表达_取一个字符串的第一个字母
  11. 腾讯开放平台 集成qq登录
  12. CTF学习(二)——信息泄露、密码口令、SQL注入、文件上传
  13. Windows系统下的CMD Route路由配置
  14. 千万流量秒杀系统-过载保护:如何通过熔断和限流解决流量过载问题?
  15. Java问题——can not be represented as java.sql.Date 错误解决
  16. 【Python爬虫】Python+Selenium爬取百度圣卡/网易白金卡手机靓号
  17. React styled-components TypeScript 的最佳实践
  18. js计算出来的文件md5值跟java计算出来的不一致
  19. Mysql 使用【information_schema.COLUMNS】批量修改表字段注释
  20. Linux c fopen() 与fclose() 使用

热门文章

  1. 2020mysql安装教程_2020MySQL安装图文教程
  2. Docker-compose 安装与基本使用(四)
  3. xd可以用ui动效效果吗_通过动画使UI设计栩栩如生:Adobe XD和After Effects
  4. ui边框设计图_UI设计形状和对象基础知识:填充和边框
  5. MySQL修改字符集
  6. 列出所有K个元素的子集-----2013年1月26日
  7. IBM连续两年大数据市场占有率全球第一
  8. 新0-Day漏洞或将给Linux桌面发行版带来浩劫
  9. epoll socket 服务端中read和write的返回值讨论
  10. VSAN见证虚拟设备