暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

MySQL分布式架构(一)mycat(mysql双主)部署

原创 冯晓宇 2023-10-27
692

适用范围

Mycat 发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几个典型的
适用场景:

  • 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;
  • 分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片;
  • 多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;
  • 报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计;
  • 替代 Hbase,分析大数据;
  • 作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选择。

原理概述

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了
一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
image.png

方案概述

两台虚拟机 10.0.0.51(db01)、10.0.0.52(db02)
每台创建四个mysql实例:3307 3308 3309 3310

服务器 端口 端口 端口 端口
10.0.0.51 3307 3308 3309 3310
10.0.0.52 3307 3308 3309 3310

主从节点规划(–> 指向为主节点)

10.0.0.52:3307 <-----> 10.0.0.51:3307
10.0.0.52:3309 -------> 10.0.0.52:3307
10.0.0.51:3309 -------> 10.0.0.51:3307

10.0.0.52:3308 <-----> 10.0.0.51:3308
10.0.0.52:3310 -------> 10.0.0.52:3308
10.0.0.51:3310 -------> 10.0.0.51:3308

实施步骤

一. 基础环境配置

1. 实例搭建:略
2. 配置主从环境
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "create user root@'10.0.0.%' identified with mysql_native_password by '******'; grant all on *.* to root@'10.0.0.%';"
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3307, MASTER_AUTO_POSITION=1,MASTER_USER='repl', MASTER_PASSWORD='123';" 
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "start slave;" 
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "show slave status\G"|grep Running: 

参照主从节点规划配置

3. 检测主从状态
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "show slave status\G"|grep Yes 

二. MyCAT安装

1. 预先安装Java运行环境
[root@mysql local]#yum install -y java 
2. 下载mycat
http://dl.mycat.org.cn/ 
Mycat-server-xxxxx.linux.tar.gz 
3. 解压文件并查看软件目录结构
[root@mysql local]#tar xf Mycat-server-*
[root@mysql local]#ls

bin catlet conf lib logs version.txt 
4. 启动和连接
配置环境变量
vim /etc/profile 
export PATH=/data/app/mycat/bin:$PATH 
source /etc/profile 
启动
[root@mysql local]#mycat start
连接
[root@mysql local]#mysql -uroot -p123456 -h 127.0.0.1 -P8066

注:Mycat中使用的是MySQL 5.1版本驱动,连接8.0时将会失败。

解决方案:

(1)下载更新客户端程序
https://downloads.mysql.com/archives/c-j/

(2)连接时添加auth=mysql_native_password参数

mysql -uroot -p123456 -h10.0.0.52 -P8066 --default-auth=mysql_native_password

(3)更新MySQL客户端命令为8.0之前版本

三. 配置文件介绍

1. bin

程序目录

2. conf
配置文件目录 
autopartition-long.txt :分片相关
auto-sharding-long.txt :分片相关
auto-sharding-rang-mod.txt :分片相关
cacheservice.properties :缓存配置
dbseq.sql
dbseq - utf8mb4.sql
Dnindex.properties :当前节点切换情况
ehcache.xml
index_to_charset.properties
log4j2.xml :日志系统
migrateTables.properties
myid.properties
partition-hash-int.txt
partition-range-mod.txt
rule.xml :分片策略使用方法
schema.xml :配置文件
sequence_conf.properties
sequence_db_conf.properties
sequence_distributed_conf.properties
sequence_http_conf.properties
sequence_time_conf.properties
server.xml :mycat运行模式相关
sharding-by-enum.txt
wrapper.conf
Zkconf :zookeeper相关功能,zookeeper就是集中管理
Zkdownload :zookeeper相关功能
3. schema.xml

主配置文件:节点信息、读写分离、高可用设置、调用分片策略…

4. rule.xml

分片策略的定义、功能、使用用方法

5. server.xml

mycat服务有关配置: 用户、网络、权限、策略、资源…

6. xx.txt文件

分片参数定义文件

7. log4j2.xml

Mycat 相关日志记录配置

8. logs

wrapper.log : 启动日志
mycat.log :工作日志

四. schema.xml配置文件基本结构

1. 配置模板介绍
[root@mysql local]#cd /data/mycat/conf/ 
[root@mysql local]#mv schema.xml schema.xml.bak 
[root@mysql local]#vim schema.xml 
# 逻辑库: 
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> 
schema name="TESTDB" :逻辑库名
checkSQLschema="false" :是否检查数据库,最好先进入库再查询表
sqlMaxLimit="100" :分表才有用,只做读写是没有用的,将结果集限制为100行,减少结果集,mycat有自己的缓存机制,减少缓存压力
dataNode="dn1:默认访问节点(未分片部分)
#需做拆分的表
<table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
table name="travelrecord,address" :指定做分片的表
dataNode="dn1,dn2,dn3" :要拆分为这三个分片
rule="auto-sharding-long" :分片策略
splitTableNames ="true":
# DN数据节点(逻辑分片):数据节点(逻辑分片): 
<dataNode name="dn1" dataHost="localhost1" database= "world" /> 
dataNode name="dn1" :分片节点名称
dataHost="localhost1" :节点名称(建议改成不同名称)
database= "world":后端数据库库名

image.png
image.png
作用:垂直和水平拆分及高可用和读写分离

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论