Mysql-Mycat集群

读写分离基本概念

MySQL 虽然是世界上使用最广泛的免费数据库,但是并不能满足实际的一个需求,在高并发高可用等方面。我们主要是通过主从复制来同步数据,再通过读写分离来提升数据库的并发能力。

工作原理

  • 主数据库上执行写操作,并将写操作的结果同步到所有从数据库
  • 从数据库上只处理读请求,不处理写请求。应用程序根据负载均衡算法将读请求路由到从数据库上,并将写请求路由到主数据库上。
  • 主从数据库之间通过异步复制或同步复制等方式进行数据同步

读写分离的意义

  1. 降低主数据库负载:读操作通常比写操作频繁,将它们分开可以将主数据库的读负载分散到多个从数据库上,减轻主数据库的负载压力,从而提高系统的性能。

  2. 提高系统的吞吐量:读写分离可以将读操作分散到多个从数据库上,从而提高系统的吞吐量,满足高并发访问的需求。

  3. 提高系统的可伸缩性:读写分离可以根据实际的负载情况动态地增加从数据库的数量,以提高系统的可伸缩性,保障系统的稳定性。

  4. 提高系统的可用性:读写分离可以实现多个从数据库的自动切换,从而提高系统的可用性,确保系统的稳定性。

实现读写分离的方式

应用层实现

中间件实现

Mycat 中间件

基本概念

  1. 项目地址: Mycat2 github
  2. 由来
    • Cobar:阿里巴巴 B 2 B 开发的关系型分布式系统,管理将近 3000 个 MySQL 实例。在阿里经受住了考验,后面由于作者的走开的原因 cobar 没有人维护了,阿里也开发了 tddl 替代 cobar。
    • MyCAT: 社区爱好者在阿里 cobar 基础上进行二次开发,解决 cobar 当时存在的一些问题,并且加入了许多新的功能在其中。目前 MyCAT 社区活跃度很高,目前已经有一些公司在使用 MyCAT。总体来说支持度比较高,也会一直维护下去,
  3. 优势
  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代 MySQL 的加强版数据库
  • 一个可以视为 MySQL 集群的企业级数据库,用来替代昂贵的 Oracle 集群
  • 一个融合内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
    image.png

部署 mycat

拓扑图

image.png

基础环境准备

  1. [[10-MySQL Replication Structure#环境准备]]
  2. 三台主机绑定 hosts
vim /etc/hosts
192.168.45.10 mysql-0
192.168.45.11 mysql-1
192.168.45.12 mysql-2
  1. 完成一主多从搭建:[[10-MySQL Replication Structure#一主一从M-S|参考]]

安装 mycat

  1. 上传软件包,配置 Java 环境
     
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_171 
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
export PATH JAVA_HOME CLASSPATH
source /etc/profile
java -version

 
2. Mycat 初始化 

tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local/
ln -s /usr/local/mycat/bin/* /usr/local/bin/

Mycat 配置文件调整

调整 Server.xml

在调整配置文件前需备份配置文件

cd /usr/local/mycat/conf/
cp server.xml server.xml.bak
vim server.xml

image.png

这里是配置 mycat 的两个用户及其密码。

<property name="schemas">TESTDB</property>

逻辑库名: 是登录 mycat 后显示的库名,切换这个库之后,显示的就是代理的真实 mysql 数据库的表

调整 schema.xml

  1. 相关名词
  • Schema 逻辑数据库设置,名字与 server.xmlschema 对应。
  • DataNode  分片信息,也就是分库相关配置。
  • DataHost   物理数据库,真正存储数据的数据库。
  1. 文件调整
cp schema.xml schema.xml.bak
vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'>
        </schema>
        <dataNode name="dn1" dataHost="dn1" database="learn" />
        <dataHost name="dn1" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="mysql-0" url="192.168.45.10:3306" user="root" password="123456">
                </writeHost>
                <writeHost host="mysql-1" url="192.168.45.11:3306" user="root" password="123456">
                </writeHost>
                <writeHost host="mysql-2" url="192.168.45.12:3306" user="root" password="123456">
                </writeHost>
        </dataHost>
</mycat:schema>

参数解释

log4j2.xml 日志文件

vim log4j2.xml

image.png

<asyncRoot level="trace" includeLocation="true">

赋权所有 MySQL 服务器登陆权限

利用 xshell 统一发送命令
image.png

grant all on *.* to root@'192.168.45.%' identified by '123456';
flush privileges;

开启 mycat

自检

mycat console

^a98e01

image.png

  • 报错

Caused by: org. Xml. Sax. SAXParseException; lineNumber: 5; columnNumber: 80; 必须为元素类型 "schema" 声明属性 "datanode"。

  • 原因
    image.png

N 字母必须为大写

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode='dn1'>
  • 重新执行[[11-MySQL 读写分离&mycat#^a98e01|检测]]命令,检测 OK
    image.png

启动 mycat

  1. Root 用户测试
mycat start
ss -antup | grep 8066
mysql -uroot -p123456 -P 8066 -h 192.168.45.10 -e "show databases;"
  1. Usesr 用户测试

mysql -uroot -p123456 -P 8066 -h 192.168.45.10 -e "show databases;"

#### 模拟故障测试
- 关闭 Master 服务,查看能否正常读
- 关闭 Slave 服务,查看能否正常读写
posted @   L_Hang  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示