一、mycat简介
MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度
具体介绍请参考: mycat官方网站
二、环境准备
OS: CentOS Linux release 7.9.2009 (Core)
关闭系统SELINUX 功能:
执行命令如下:
sed -i '/^SELINUX=.*/ s//SELINUX=disabled/' /etc/selinux/config
或vi 编辑/etc/selinux/config 文件,更改SELINUX=disabled
更改后,执行命令:reboot 重启系统生效
重启后,运行:getenforce 检查selinux状态是否为Disabled状态
*mysql数据库服务器关闭SELINUX
*运行在Linux下的mysql,需要配置 lower_case_table_names=1 不区分大小写
添加到mysql配置文件中 /etc/my.cnf
配置完成后,重启mysql数据库生效
二、主备库搭建
2.1 node1主库配置
# 编辑mysql配置文件,在[mysqld]下加入以下参数
vim /etc/my.cnf
enforce_gtid_consistency=ON
gtid_mode=ON
log_bin=mysql-bin
log_bin_index=mysql-bin.index
binlog_format=row
relay_log=reay-log
relay_log_index=relay-log.index
server-id=1
# 重启mysql服务
systemctl restart mysqld
# 备份mysql
mysqldump --all-databases --single-transaction --triggers --routines --set-gtid-purged=OFF --host=127.0.0.1 --port=3306 --user=root --password > backup.sql
# 创建同步账号
create user 'repl'@'192.168.56.110' identified by 'Musen123!@#';
grant replication slave on *.* to 'repl'@'192.168.56.110';
flush privileges;
2.2 node2备库配置
# 编辑mysql配置文件,在[mysqld]下加入以下参数
vim /etc/my.cnf
enforce_gtid_consistency=ON
gtid_mode=ON
log_bin=mysql-bin
log_bin_index=mysql-bin.index
log_slave_updates=ON
server-id=2
binlog_format=row
relay_log=reay-log
relay_log_index=relay-log.index
# 重启mysql服务
systemctl restart mysqld
# 恢复mysql数据库
主库备份文件backup.sql传至备库/tmp目录下
登录mysql数据库后,执行如下指令
source /tmp/backup.sql;
# 连接主库进行同步
change master to master_host='192.168.56.109', master_user='repl',master_password='Musen123!@#',master_port=3306,master_auto_position=1;
start slave;
# 确认主备库同步状态
show slave status \G;
3.3创建数据库
在主库上执行创建数据库脚本
create database jumpserver default charset 'utf8';
执行完成后,在备库上查询是否有jumpserver数据库
show databases;
三、Mycat搭建
3.1 JDK安装
安装jdk1.8可以直接使用yum install java-1.8.0-openjdk.x86_64 -y 进行安装。
以下部署,采用手动部署jdk1.8,去官网下载jdk1.8的程序包,下载后文件为jdk-8u291-linux-x64.tar.gz
# 上传jdk1.8安装包至mycat服务器
# 上传到/usr/local 目录下,并进行解压
tar xzf jdk-8u291-linux-x64.tar.gz
# 配置系统环境变量
vi /etc/profile #编辑文件,在末尾处加入以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_291
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 保存并退出
# 使配置生效
source /etc/profile
# 验证版本
java -version
3.2 Mycat安装
# 创建软件存放目录
mkdir /opt/app
# 下载Mycat
cd /opt/app
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
# 解压缩
tar xzf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
# 设置Mycat环境变量
echo 'export MYCAT_HOME=/opt/app/mycat' >> /etc/profile
source /etc/profile
3.3 Mycat配置
# 配置数据源
/opt/app/mycat/conf/schema.xml中定义了后端数据源、逻辑库/表等。
dataHost:Mycat后端连接的数据库(物理库,真实的数据库),即后端数据源,可以是mysql、oracle等。
schema:逻辑库,可以看做是一个或多个后端数据库集群构成的逻辑库。
dataNode:数据分片,逻辑库的构成,即一个逻辑库可能分为多个分片,数据分片最终会落在一个或多个物理库。
以下配置是配置读写分离的配置截图
注意balance属性 负载均衡类型,目前的取值有3 种:
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
balance="1",全部的readHost 与stand by writeHost 参与select
语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1 与M2 互为主备),正常情况下,M2,S1,S2 都参与select语句的负载均衡。
balance="2",所有读操作都随机的在writeHost、readhost 上分发。
balance="3",所有读请求随机的分发到wiriterHost 对应的readhost 执行,writerHost 不负担读压
力,注意balance=3 只在1.4 及其以后版本有,1.3 没有。
# 配置mycat用户
/opt/app/mycat/conf/server.xml中定义mycat的系统配置和用户等。可以通过xml新增和修改mycat用户信息。
以下为schema:test添加了两个用户root和user,应用使用这两个账号连接mycat进行数据的操作,如果不用user用户,可以删除里面的配置。
# mycat启动
/opt/app/mycat/bin/mycat start
# mycat运行端口查看
netstat -antup | grep 8066
# mycat管理端口查看
netstat -antup | grep 9066
# 使用mysql客户端连接mycat 验证
mysql -u root -h 192.168.56.111 -P 8066 -p
# mycat管理命令
管理命令需要连接mycat的9066默认端口
mysql -u root -h 192.168.56.111 -P 9066 -p
3.4 配置防火墙
添加防火墙过滤规则,允许8066与9066通过
firewall-cmd --permanent --zone=public --add-port=8066/tcp
firewall-cmd --permanent --zone=public --add-port=9066/tcp
firewall-cmd --reload
联系客服