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. 前期准备

# yum源安装
yum search jdk yum -y install java-1.8.0-openjdk.x86_64 # 查看jsk版本
java -version

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数据库读写分离简单配置的更多相关文章

  1. 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 ...

  2. linux学习之centos(三):mysql数据库的安装和配置

    前言:mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库, ...

  3. Centos7源码安装mysql及读写分离,互为主从

       Linux服务器 -源码安装mysql 及读写分离,互为主从   一.环境介绍: Linux版本: CentOS 7 64位 mysq版本: mysql-5.6.26 这是我安装时所使用的版本, ...

  4. [转] Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    from:  http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得 ...

  5. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    原文:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  6. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置(转)

    原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...

  7. Linux安装 jdk、tomcat、eclipse、mysql

    概述如果需要在Linux下进行JavaEE的开发,我们需要安装如下软件: 安装JDK 安装步骤 0) 先将软件通过xftp5 上传到/opt 下 1) 解压缩到/opt tar -zxvf  jdk. ...

  8. Linux学习之CentOS(一)--CentOS6.6下Mysql数据库的安装与配置

    在这里我是通过yum来进行mysql数据库的安装的,通过这种方式进行安装,可以将跟mysql相关的一些服务.jar包都给我们安装好,所以省去了很多不必要的麻烦!!! [root@larry ~]# c ...

  9. 在linux上安装MySQL数据库,并简单设置用户密码,登录MySQL

    在新装的Centos系统上安装MySQL数据库. <p><a href="http://www.cnblogs.com/tijun/">提君博客原创< ...

随机推荐

  1. 在Linux中输入命令时打错并按了enter

    今天在Linux中输入命令时,打错一个单词了,之后出现一串串的~,按ESC也没用, 并在底部出现:quit<enter> to exit vim 解决办法: 按几下 esc 确保 vim ...

  2. docker漏洞复现环境搭建

    0x00 docker简介 把原来的笔记整理了一下,结合前几天的一个漏洞,整理一篇简单的操作文档,希望能帮助有缘人. docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移 ...

  3. Maximum execution time of 30 seconds exceeded in

    在执行一次php脚本的时候,遇到了这样的报错,经过c Maximum execution time of 30 seconds exceeded in 翻译过来就是:执行时间超过了30秒最长执行时间: ...

  4. 建议收藏!超详细的JVM反射原理技术点总结

    反射定义 1,JAVA反射机制是在运行状态中 对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称 ...

  5. Netty源码分析之ByteBuf(二)—内存分配器ByteBufAllocator

    Netty中的内存分配是基于ByteBufAllocator这个接口实现的,通过对它的具体实现,可以用来分配我们之前描述过的任意类型的BytebBuf实例:我们先看一下ByteBufAllocator ...

  6. Oracle表空间和他的数据文件

    //以myspace为例 来源于Oracle 11g数据库应用简明教程 清华出版社 /*创建表空间*/ CREATE TABLESPACE myspace DATAFILE'E:\develop\or ...

  7. 使用Python开发鸿蒙设备程序(0-初体验)

    到目前为止,鸿蒙设备开发的"官方指定语言"还是C语言! 这看起来是一件正常的事,毕竟鸿蒙设备开发还是属于嵌入式开发的范畴,而在嵌入式开发中C语言又是当之无愧的首选,所以,大家也都接 ...

  8. 【ACwing 98】分形之城——分形

    (题面来自ACwing) 城市的规划在城市建设中是个大问题. 不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现. 而这座名为 Fractal 的城市设想了 ...

  9. MyBatis-01:环境搭建

    MyBatis-01:环境搭建 1.搭建实验数据库 CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user`; CRE ...

  10. moviepy音视频剪辑:视频剪辑基类VideoClip的__init__构造方法参数has_constant_size的作用

    ☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类VideoClip构造方法: __init__(self, make_frame=None, ismask=Fals ...