mycat
- 数据库集群搭建
- 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.cnf
vi 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中创建组,添加同步用户
-
新建用户
CREATE USER 'chen'@'%' IDENTIFIED BY 'chen'
-
授权
GRANT replication SLAVE ON *.* TO 'chen'@'%'
-
刷新授权
FLUSH PRIVILEGES
-
查看主状态
SHOW master STATUS
-
搭建从
-
创建文件夹/db/mysql/s1
-
s1中新建文件夹 conf和data
-
更改权限chmod 777 *
-
在conf中新建配置文件my.cnf
-
[mysqld] server-id=2
-
-
创建并启动容器,如果发现已经有了需要stop之后再执行下面
-
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
-
-
配置从,在s1创建查询
-
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
-
-
启动从库
- START SLAVE
-
查看主从状态,两个都是yes,如果有不是yes的重新配就好了,慢慢来
- SHOW SLAVE STATUS
- SHOW SLAVE STATUS
-
测试数据同步
- 在主库去增删改数据
- 避免在从库写入数据,会破坏同步功能
mycat
是一个数据库的中间件,能够实现读写分离。简化数据库集群带来的开发难度。
下载mycat
-
下两个文件(配置模板+核心jar包)
配置mycat
-
将上面两个文件上传到服务器
-
解压
-
unzip mycat2-install-template-1.21.zip解压zip文件,[没有下载的先yum install一下]
-
将核心jar移动到上一步解压后的lib文件夹中
mv mycat2-1.21-release-jar-with-dependencies.jar mycat/lib/
-
查看mycat/bin目录
-
目录中是可执行文件,但是缺少执行权限,需要
chmod +x bin/*
-
编辑数据源
- vi /db/mycat/mycat/conf/datasources/prototypeDs.datasource.json
- 修改datasources/prototypeDs.datasource.json的密码为之前集群的数据库的主数据库密码root,url为主数据库连接的ip
mycat2初体验
- 启动mycat2
- 查看运行状态
./mycat status
- 如果失败,检查jdk是否安装:java -version
- 通过Navicat工具连接mycat
- 通过mycat插入一条数据,观察是否插入到主库中了。
- 查看运行状态
读写分离配置
为了减轻主库压力,我们可以部署多台从库实现读写分离,分担主库的读的压力
- 进入mycat的conf目录的datasources目录下,复制文件另存
cp prototypeDs.datasource.json prototypeREAD.datasource.json
vi prototypeREAD.datasource.json
- 配置集群:vi conf/clusters/prototype.cluster.json
- 重启mycat服务
读写分离测试
-
主库数据如下
1.
-
从库数据如下
-
通过Navicat连接mycat查询数据:发现有时是主库的数据,有时是从库的数据
- 这就说明有时候读取是主库,有时是从库,这就说明做到了读的分离。
- 然后可以去测试在mycat中插入数据,只会插入主库,然后同步到从库中。