Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置
1. Mycat简介
- 一个彻底开源的,面向企业应用开发的大数据库集群
- 支持事务、ACID、可以替代MySQL的加强版数据库
- 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
- 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
- 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
- 一个新颖的数据库中间件产品
官网:http://www.mycat.org.cn/
2. Mycat优势
基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到Mycat的基因中,使Mycat在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
Mycat背后有一支强大的技术团队,其参与者都是5年以上软件工程师、架构师、DBA等,优秀的技术团队保证了Mycat的产品质量。
Mycat并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。
3. 前期准备
- 安装Mysql主从复制(请参考以下文档)
Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)
Docker部署Mysql8.0.20并配置主从复制 - 安装JDK1.8
# yum源安装
yum search jdk
yum -y install java-1.8.0-openjdk.x86_64
# 查看jsk版本
java -version
- 下载Mycat1.6.7.4安装包
http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/ - 上传到服务器/opt目录下
4. 安装Mycat
# 进入安装包所在目录
cd /opt
# 解压
tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
# 改名(可忽略)
mv mycat/ mycat-1.6.7.4
# 移动到/usr/local目录
mv mycat-1.6.7.4/ /usr/local/
5. 配置(一主一从)
# 进入配置文件目录,并查看文件
cd /usr/local/mycat-1.6.7.4/conf
ls
# 修改server.xml
vi server.xml
# 修改底部管理员用户和只读用户信息及密码,配置schemas
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>
# 退出并保存
:wq
# 修改schema.xml
vi schema.xml
# 替换为以下内容
# 其中192.168.133.129为写主机(主数据库)IP,192.168.133.130为读主机(从数据库)IP。
<?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="host1" database="test" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.133.129:3306" user="root" password="password">
<readHost host="hostS1" url="192.168.133.130:3306" user="root" password="password" />
</writeHost>
</dataHost>
</mycat:schema>
# 退出并保存
:wq
dataHost节点中的balance(负载均衡类型)属性值共四种情况:
- 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"
所有读请求随机的分发到readhost 执行,writerHost不负担读压力。
6. 启动并测试(一主一从)
# 启动
cd /usr/local/mycat-1.6.7.4/bin/
./mycat start
# 查看启动状态
./mycat status
# 关闭防火墙
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 使用工具连接
# IP:192.168.133.132
# 端口:8066
# 用户名:root
# 密码:123456
# 创建测试表
create table t_data(`id`int not null primary key auto_increment, `value` varchar(255));
# 插入一条记录
insert into t_data(`value`) values('C3Stones');
# 查询
select * from t_data;
# 模拟主从数据库不一致情况,验证数据库读写分离
# 查询主从数据库所在的服务器主机名称是否一致
hostname
# 若一致,可修改为不同的主机名
# 分别在不同的主机上执行
vi /etc/hostname
# 修改为不同的名称,并保存
# 例如:Mysql01、Mysql02
# 修改完重启
reboot
# 重启之后检查
# 检查hostname
hostname
# 检查mysql服务
mysql -uroot -p
# 启动mysql
service mysql start
# 关闭防火墙
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 检查从数据库同步状态
mysql -uroot -p -h192.168.133.130 -P3306
show slave status\G
# 如果参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则正常
# 使用Mycat插入一条记录,但使用变量,造成主从数据库不一致情况
insert into t_data(`value`) values(@@hostname);
# 查询(查询结果与上述schema.xml中dataHost节点配置的balance属性有关)
# 上述配置值为2,即读操作在主从数据库上分发
select * from t_data;
7. 配置(双主双从)
# 修改schema.xml
vi schema.xml
# 替换为以下内容
# 其中192.168.133.129为写主机1(主数据库1)IP,192.168.133.130为读主机1(从数据库1)IP,192.168.133.131为写主机2(主数据库2)IP,192.168.133.132为读主机2(从数据库2)IP。
<?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="host1" database="test" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100" >
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.133.129:3306" user="root" password="password">
<readHost host="hostS1" url="192.168.140.130:3306" user="root" password="password" />
</writeHost>
<writeHost host="hostM2" url="192.168.140.131:3306" user="root" password="password">
<readHost host="hostS2" url="192.168.140.132:3306" user="root" password="password" />
</writeHost>
</mycat:schema>
dataHost节点中的属性值解释:
- balance
balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡; - writeType
writeType="0" ,所有写操作发送到配置的第一个writeHost,第一个挂了切到正常的第二个writeHost;writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5版本后不推荐使用。 - writeHost
Mycat重新启动后以切换后的为准,即可能因为写主机异常而发送写主机变动的情况,切换记录在配置文件中:dnindex.properties。 - switchType
switchType="1",默认值,自动切换;switchType="-1",表示不自动切换;switchType="2",基于Mysql 主从同步的状态决定是否切换。
8. 启动并测试(双主双从)
# 重新启动
cd /usr/local/mycat-1.6.7.4/bin/
./mycat restart
# 查看启动状态
./mycat status
# 关闭防火墙
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 使用工具连接
# IP:192.168.133.132
# 端口:8066
# 用户名:root
# 密码:123456
# 创建测试表
create table t_data2(`id`int not null primary key auto_increment, `value` varchar(255));
# 插入一条记录
insert into t_data2(`value`) values('C3Stones');
# 查询
select * from t_data2;
# 模拟主从数据库不一致情况,验证数据库读写分离
# 查询主从数据库所在的服务器主机名称是否一致
hostname
# 若一致,可修改为不同的主机名
# 分别在不同的主机上执行
vi /etc/hostname
# 修改为不同的名称,并保存
# 例如:Mysql01、Mysql02、Mysql03、Mysql04
# 修改完重启
reboot
# 重启之后检查
# 检查hostname
hostname
# 检查mysql服务
mysql -uroot -p
# 启动mysql
service mysql start
# 关闭防火墙
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 检查数据库同步状态
mysql -uroot -p -h192.168.133.129 -P3306
show slave status\G
mysql -uroot -p -h192.168.133.130 -P3306
show slave status\G
mysql -uroot -p -h192.168.133.131 -P3306
show slave status\G
mysql -uroot -p -h192.168.133.132 -P3306
show slave status\G
# 如果参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则正常
# 使用Mycat插入一条记录,但使用变量,造成主从数据库不一致情况
insert into t_data2(`value`) values(@@hostname);
# 查询(查询结果与上述schema.xml中dataHost节点配置的balance属性有关)
# 上述配置值为1,即读操作在主数据库2、从数据库1、从数据库2数据库上分发
select * from t_data2;
9. 高可用测试(双主双从)
# 停止主数据库1
service mysql stop
# Mycat查询
select * from t_data2;
# 再次插入数据
insert into t_data2(`value`) values(@@hostname);
# Mycat查询
select * from t_data2;
# 启动主数据库1
service mysql start
# Mycat查询
# 读操作在主数据库1、从数据库1、从数据库2数据库上分发
select * from t_data2;
双主双从环境下,Master1、Master2互做备机,负责写的主机宕机,备机切换负责写操作,保证了数据库读写分离的高可用性。
Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置的更多相关文章
- mysql5.6.13通用二进制格式安装并使用amoeba实现对mysql5.6数据库读写分离
proxy 192.168.8.39 master 192.168.8.40 slave 192.168.8.20 一.安装mysql-5.6.13服务器 安装包: mysql-5.6.13-linu ...
- linux学习之centos(三):mysql数据库的安装和配置
前言:mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库, ...
- Centos7源码安装mysql及读写分离,互为主从
Linux服务器 -源码安装mysql 及读写分离,互为主从 一.环境介绍: Linux版本: CentOS 7 64位 mysq版本: mysql-5.6.26 这是我安装时所使用的版本, ...
- [转] Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
from: http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得 ...
- Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
原文:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...
- Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置(转)
原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...
- Linux安装 jdk、tomcat、eclipse、mysql
概述如果需要在Linux下进行JavaEE的开发,我们需要安装如下软件: 安装JDK 安装步骤 0) 先将软件通过xftp5 上传到/opt 下 1) 解压缩到/opt tar -zxvf jdk. ...
- Linux学习之CentOS(一)--CentOS6.6下Mysql数据库的安装与配置
在这里我是通过yum来进行mysql数据库的安装的,通过这种方式进行安装,可以将跟mysql相关的一些服务.jar包都给我们安装好,所以省去了很多不必要的麻烦!!! [root@larry ~]# c ...
- 在linux上安装MySQL数据库,并简单设置用户密码,登录MySQL
在新装的Centos系统上安装MySQL数据库. <p><a href="http://www.cnblogs.com/tijun/">提君博客原创< ...
随机推荐
- 基于Opencv识别,矫正二维码(C++)
参考链接 [ 基于opencv 识别.定位二维码 (c++版) ](https://www.cnblogs.com/yuanchenhui/p/opencv_qr.html) OpenCV4.0.0二 ...
- 企业级工作流解决方案(八)--微服务Tcp消息传输模型之服务端处理
服务端启动 服务端启动主要做几件事情,1. 从配置文件读取服务配置(主要是服务监听端口和编解码配置),2. 注册编解码器工厂,3. 启动dotnetty监听端口,4. 读取配置文件,解析全局消息处理模 ...
- guitar pro系列教程(二十三):如何使用Guitar Pro制作扫弦
前面的章节小编和大家讲解了很多关于Guitar Pro的使用功能,本章节我们将还是采用图文结合的方式和大家讲解如何使用Guitar Pro 制作扫弦,感兴趣的朋友可以进来看看哦. 扫弦的概念 对于很多 ...
- Spring中各个模块
Spring中个模块介绍 核心模块 提供了对Bean的配置.管理.创建等以及IOC/DI.如果只需要提供IOC/DI功能,只需要引入Beans和Core两个jar包 Core 包含Spring框架 ...
- DIV设置滚动条在最底端
网站聊天样式,无论添加什么内容div的滚动条都显示在最底端 将div添加滚动条,给div一定的高度 <div id='up' style='height:100px; width:400px;o ...
- 蓝桥杯——字母阵列(2018JavaC组第3题)
字母阵列(18JavaC3) 标题:字母阵列 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI ...
- Java基础教程——多线程:创建线程
多线程 进程 每一个应用程序在运行时,都会产生至少一个进程(process). 进程是操作系统进行"资源分配和调度"的独立单位. Windows系统的"任务管理器&quo ...
- Jmeter代理服务器录制脚本--浏览器拦截访问链接
在 Jmeter性能测试的过程中您是否会遇到代理服务器无法打开浏览器,无法录制脚本的情况呢? 在测试过程中,我也遇到过这样的问题,希望能帮到正在找寻答案的你.... Jmeter录制脚本时,跟http ...
- ES6简单理解基本使用
let const 原来的var声明标识符:可以重复声明,编译不报错. let,const声明标识符:不能重复声明,再声明编译报错. var声明的标识符作用域是当前函数,let和const是当前{块} ...
- 树莓派自动连接WiFi
使用sudo raspi-config配置好第一个wifi 然后只需要修改一个文件sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 内容如下: ctr ...