mycat

发布时间 2023-04-18 21:45:40作者: Liku007
  1. 数据库集群搭建
  2. mycat2中间件

为什么会有数据库集群

首先什么是集群呢?搭建多台数据库对外提供服务,数据库之间有着主从,一台数据库假如能承受2000并发,3台理论6000并发。考虑到读比写更多,设计一个主2个从,去实现读写分离。

集群架构

我们选择percona产品,去搭建集群环境。

Percona Server为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。

搭建主

  • 创建文件夹/db/mysql/m1

    • mkdir -p /db/mysql/m1
  • m1中新建文件夹 conf和data mkdir conf data

  • 更改权限chmod 777 *

  • 在conf中新建配置文件my.cnfvi conf/my.cnf

    • [mysqld]
      log-bin=mysql-bin # 开启二进制日志记录
      server-id=1 # 服务id,不可重复
      
  • 创建并启动容器

    • docker run -dti --name percona-m1 -v /db/mysql/m1/data:/var/lib/mysql -v /db/mysql/m1/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
      

  • 在navicat中创建组,添加同步用户

    1. 新建用户CREATE USER 'chen'@'%' IDENTIFIED BY 'chen'

    2. 授权GRANT replication SLAVE ON *.* TO 'chen'@'%'

    3. 刷新授权FLUSH PRIVILEGES

    4. 查看主状态SHOW master STATUS

搭建从

  1. 创建文件夹/db/mysql/s1

  2. s1中新建文件夹 conf和data

  3. 更改权限chmod 777 *

  4. 在conf中新建配置文件my.cnf

    1. [mysqld]
      server-id=2
      
  5. 创建并启动容器,如果发现已经有了需要stop之后再执行下面

    1. docker run -dti --name percona-s1 -v /db/mysql/s1/data:/var/lib/mysql -v /db/mysql/s1/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
      
  6. 配置从,在s1创建查询

    1. CHANGE MASTER TO
      master_host='192.168.226.69',
      master_user='chen',
      master_password='chen',
      master_port=3306,
      master_log_file='mysql-bin.000003',
      master_log_pos=739
      
  7. 启动从库

    1. START SLAVE
  8. 查看主从状态,两个都是yes,如果有不是yes的重新配就好了,慢慢来

    1. SHOW SLAVE STATUS
  9. 测试数据同步

    1. 在主库去增删改数据
    2. 避免在从库写入数据,会破坏同步功能

mycat

是一个数据库的中间件,能够实现读写分离。简化数据库集群带来的开发难度。

下载mycat

  1. 打开官网:http://www.mycat.org.cn/

  1. 下两个文件(配置模板+核心jar包)

    1. http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
    2. http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar

配置mycat

  1. 将上面两个文件上传到服务器

  2. 解压

  3. unzip mycat2-install-template-1.21.zip解压zip文件,[没有下载的先yum install一下]

  4. 将核心jar移动到上一步解压后的lib文件夹中

    1. mv mycat2-1.21-release-jar-with-dependencies.jar mycat/lib/
  5. 查看mycat/bin目录

    1. 目录中是可执行文件,但是缺少执行权限,需要chmod +x bin/*

    2. 编辑数据源

      1. vi /db/mycat/mycat/conf/datasources/prototypeDs.datasource.json
      2. 修改datasources/prototypeDs.datasource.json的密码为之前集群的数据库的主数据库密码root,url为主数据库连接的ip

mycat2初体验

  1. 启动mycat2
    1. 查看运行状态
      1. ./mycat status
      2. 如果失败,检查jdk是否安装:java -version
    2. 通过Navicat工具连接mycat
    3. 通过mycat插入一条数据,观察是否插入到主库中了。

读写分离配置

为了减轻主库压力,我们可以部署多台从库实现读写分离,分担主库的读的压力

  1. 进入mycat的conf目录的datasources目录下,复制文件另存cp prototypeDs.datasource.json prototypeREAD.datasource.json
  2. vi prototypeREAD.datasource.json
  3. 配置集群:vi conf/clusters/prototype.cluster.json
  4. 重启mycat服务

读写分离测试

  1. 主库数据如下

    1.

  2. 从库数据如下

  3. 通过Navicat连接mycat查询数据:发现有时是主库的数据,有时是从库的数据

    1. 这就说明有时候读取是主库,有时是从库,这就说明做到了读的分离。
    2. 然后可以去测试在mycat中插入数据,只会插入主库,然后同步到从库中。