首页 技术 正文
技术 2022年11月17日
0 收藏 858 点赞 3,073 浏览 7753 个字

博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽


1.环境准备

1.1新增两台虚拟机

mycat01:192.168.247.81mycat02:192.168.247.82

1.2下载地址(mycat)

官网:http://dl.mycat.io/http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

1.3配置jdk

[root@amoeba~]# mkdir /usr/local/java -p[root@amoeba~]# tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/java/设置环境变量:[root@amoeba~]# vim /etc/profile在最后输入:export JAVA_HOME=/usr/local/java/jdk1..0_202export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$JAVA_HOME/bin:$PATH生效:[root@amoeba~]# source /etc/profile验证:[root@amoeba~]# java -versionjava version "1.8.0_202"Java(TM) SE Runtime Environment (build 1.8.0_202-b08)Java HotSpot(TM) -Bit Server VM (build 25.202-b08, mixed mode)[root@amoeba~]# 

1.4关闭SELinux

mycat(读写分离、负载均衡、主从切换)

1.5设置时间同步

timedatectl set-timezone Asia/Shanghaidate

2.为什么要选择mycat(引用自其它博文,如有侵权,请联系删除)

参考文档1:通过mycat中间件,实现MySQL的读写分离.docx(黄志鹏)参考博文1:https://blog.csdn.net/kobejayandy/article/details/60869530参考博文2:https://www.cnblogs.com/kevingrace/p/9365840.html
.1mycat的由来Amoeba是作为一个真正的独立中间件提供服务,即应用去连接Amoeba操作MySQL集群,就像操作单个MySQL一样。从架构中可以看来,Amoeba算中间件中的早期产品,后端还在使用JDBC Driver。Cobar是在Amoeba基础上进化的版本,一个显著变化是把后端JDBC Driver改为原生的MySQL通信协议层。后端去掉JDBC Driver后,意味着不再支持JDBC规范,不能支持Oracle、PostgreSQL等数据。但使用原生通信协议代替JDBC Driver,后端的功能增加了很多想象力,比如主备切换、读写分离、异步操作等。MyCat又是在Cobar基础上发展的版本,两个显著点是:后端由BIO改为NIO,并发量有大幅提高;增加了对Order By、Group By、limit等聚合功能的支持(,虽然Cobar也可以支持Order By、Group By、limit语法,但是结果没有进行聚合,只是简单返回给前端,聚合功能还是需要业务系统自己完成)。目前社区情况:TDDL处于停滞状态Amoeba处于停滞状态Cobar处于停滞状态MyCAT社区非常活跃MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。.2Mycat简介-  一个彻底开源的,面向企业应用开发的大数据库集群-  支持事务、ACID、可以替代MySQL的加强版数据库-  一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群-  一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server-  结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品-  一个新颖的数据库中间件产品.3Mycat关键特性-  支持SQL92标准-  遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理-  基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群-  支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster-  基于Nio实现,有效管理线程,高并发问题-  支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页-  支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join-  支持通过全局表,ER关系的分片策略,实现了高效的多表join查询-  支持多租户方案-  支持分布式事务(弱xa)-  支持全局序列号,解决分布式下的主键生成问题-  分片规则丰富,插件化开发,易于扩展-  强大的web,命令行监控-  支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉-  支持密码加密-  支持服务降级-  支持IP白名单-  支持SQL黑名单、sql注入攻击拦截-  支持分表(1.6)-  集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(.0开发版).4Mycat应用场景Mycat发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几个典型的应用场景:-   单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;-   分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片;-   多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化;-   报表系统,借助于Mycat的分表能力,处理大规模报表的统计;-   替代Hbase,分析大数据;-   作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择;.5Mycat不适合的应用场景-  设计使用Mycat时有非分片字段查询,请慎重使用Mycat,可以考虑放弃!-  设计使用Mycat时有分页排序,请慎重使用Mycat,可以考虑放弃!-  设计使用Mycat时如果要进行表JOIN操作,要确保两个表的关联字段具有相同的数据分布,否则请慎重使用Mycat,可以考虑放弃!-  设计使用Mycat时如果有分布式事务,得先看是否得保证事务得强一致性,否则请慎重使用Mycat,可以考虑放弃!.6注意事项:在生产环境中, Mycat节点最好使用双节点, 即双机热备环境, 防止Mycat这一层出现单点故障. 可以使用的高可用集群方式有:  Keepalived+Mycat+Mysql, Keepalived+LVS+Mycat+Mysql, Keepalived+Haproxy+Mycat+Mysql

2.7架构

MyCat支持双主多从,多主多从情况需要配置多个writeHost兄弟节点,多个readHost节点即可!

Mycat的架构其实很好理解,Mycat是数据库代理中间件,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。如下案例是做一个主从、读写分离,简单分库分表的示例。结构如下图:

mycat(读写分离、负载均衡、主从切换)

1. 安装mycat(读写分离、负载均衡、主从切换)

3.1解压安装

[root@mycat01 mycat]# pwd/opt/mycat[root@mycat01 mycat]#[root@mycat01 mycat]# tar -zvxf Mycat-server--linux.tar.gz[root@mycat01 mycat]# mkdir -p /data[root@mycat01 mycat]# mv mycat/ /data/[root@mycat01 mycat]# cd /data/mycat/[root@mycat01 mycat]# lsbin  catlet  conf  lib  logs  version.txt[root@mycat01 mycat]# 

3.2目录注解:

bin     mycat命令,启动、重启、停止等catlet   catlet为Mycat的一个扩展功能conf    Mycat 配置信息,重点关注lib     Mycat引用的jar包,Mycat是java开发的logs    日志文件,包括Mycat启动的日志和运行的日志。Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:server.xml   Mycat的配置文件,设置账号、参数等schema.xml   Mycat对应的物理数据库和数据库表的配置rule.xml     Mycat分片(分库分表)规则

3.3设置配置文件

[root@mycat01 mycat]# cd conf/[root@mycat01 conf]# cp -a server.xml server.xml.bak[root@mycat01 conf]# cp -a schema.xml schema.xml.bak[root@mycat01 conf]# vim server.xmlmycat(读写分离、负载均衡、主从切换)[root@mycat01 conf]# vim schema.xml  (mycat01是实库事先创建好,mycat是逻辑库)
mycat(读写分离、负载均衡、主从切换)
参数解读::映射设置设置逻辑库mycat和对应的实库mycat01:读写分离+负载均衡balance=":不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上,即读请求仅发送到writeHost上。balance=":读请求随机分发到当前writeHost对应的readHost和standby的writeHost上。即全部的readHost与stand by writeHost 参与select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡balance=":读请求随机分发到当前dataHost内所有的writeHost和readHost上。即所有读操作都随机的在writeHost、 readhost 上分发。balance= 只在 1.4 及其以后版本有,1.3 没有。:主从切换设置switchType="-1":不自动切换switchType=":默认值,自动切换switchType=":基于MySQL主从同步的状态来决定是否切换。需修改heartbeat语句(即心跳语句):show slave statusswitchType=":基于Mysql Galera Cluster(集群多节点复制)的切换机制。需修改heartbeat语句(即心跳语句):show status like 'wsrep%':真实数据库映射主机:主从切换的备机switchType="的时候设置备用机器,当master宕机的时候自动切换这台机器为master其它参数解读:https://www.cnblogs.com/kevingrace/p/9365840.html

3.3启动

[root@mycat01 conf]# ../bin/mycat start启动日志:[root@mycat01 ~]# cd /data/mycat/logs/[root@mycat01 logs]# ls-  mycat.log  mycat.pid  wrapper.log[root@mycat01 logs]# mycat(读写分离、负载均衡、主从切换)

3.4测试验证

3.4.1查看数据源(9099):

[root@mycat01 logs]# mysql -uroot -p123456  -P9066  -h192.mysql> show @@datasource;

mycat(读写分离、负载均衡、主从切换)

3.4.2登录逻辑库

[root@mycat01 logs]# mysql -uroot -p123456 -h关闭主库,则系统无法进行写操作,关闭从库,则系统无法进行读操作,表示读写分离验证完毕第一次查询显示slave1库,第二次查询显示slave2库,表示轮询配置验证完成轮询配置验证具体如下:在mycat上建表test(247.81):mysql> use test01;mysql> create table test(id ));在slave1上insert数据(247.54):mysql> use test01;mysql> insert into test values(); (在slave1上手动插入一条数据)返回mycat上查询test:mysql> select * from test;  (第一次查询得到数据,也就是slave1上面的数据)+------+| id   |+------+|  |+------+ row in set (0.00 sec)mysql> select * from test;Empty set (0.00 sec)  (查询不到数据,也就是查询的是slave2上面的表)

mycat(读写分离、负载均衡、主从切换)

3.4.3主从切换验证

关闭主库,写入数据,发现自动切换为备用主库,表示验证完成,本次实验均已验证成功

4.多库配置

[root@mycat01 conf]# vim server.xml

mycat(读写分离、负载均衡、主从切换)

[root@mycat01 conf]# vim schema.xml

mycat(读写分离、负载均衡、主从切换)

[root@mycat01 logs]# mysql -uroot -p123456 -h 192.168.247.81 -P 8066

mycat(读写分离、负载均衡、主从切换)

[root@mycat01 logs]# mysql -uroot -p  -P9066  -h192.168.247.81

mysql> show @@datasource;

mycat(读写分离、负载均衡、主从切换)

5.分库分表

5.1.环境准备

图示:

库-逻辑库

备注

规则

mycat01-mycat

localtion

南宁

mycat-rule

mod-long

tanskdb-tansk

localtion

广州

说明:为了更直接的比较各类功能,分库分表只在节点81上进行,82没有设置。

在主库上(247.53),创建表与基础数据:

mysql -uroot -p  -P9066  -h192.168.247.53

mysql> use mycat01;

mysql> create table localtion ( id int(10) not null auto_increment, city_name varchar(20), primary key(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

mysql> insert into localtion values(1,’南宁’);

mysql> select * from localtion;

+—-+———–+

| id | city_name |

+—-+———–+

|  1 | 南宁      |

+—-+———–+

mysql> use tanskdb;

mysql> create table localtion ( id int(10) not null auto_increment, city_name varchar(20), primary key(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

mysql> insert into localtion values(1,’广州’);

mysql> select * from localtion;

+—-+———–+

| id | city_name |

+—-+———–+

|  1 | 广州      |

+—-+———–+

5.2分库分表

设置配置文件

[root@mycat01 conf]# pwd/data/mycat/conf[root@mycat01 conf]# cp -a rule.xml rule.xml.bak[root@mycat01 conf]# cp -a server.xml server.xml.bak02[root@mycat01 conf]# cp -a schema.xml schema.xml.bak02[root@mycat01 conf]# vim server.xmlmycat(读写分离、负载均衡、主从切换)

[root@mycat01 conf]# vim rule.xml

mycat(读写分离、负载均衡、主从切换)

参数解读:

1:

2:

3:

[root@mycat01 conf]# vim schema.xml

mycat(读写分离、负载均衡、主从切换)

参数解读:

1:

2:

3:

4:

5.3测试验证(247.81)

mysql -uroot -p  -P9066  -h192.168.247.81

mycat(读写分离、负载均衡、主从切换)

mysql> use tansk;mysql> select * from localtion;+----+-----------+| id | city_name |+----+-----------+|   | 广州      |+----+-----------+mysql> use mycat;mysql> select * from localtion;+----+-----------+| id | city_name |+----+-----------+|   | 广州      ||   | 南宁      |+----+-----------+在使用mycat逻辑库查看localtion表的时候,结果是实库mycat01和tanskdb的数据的合集.一个表有广州,一个表有南宁,分别在不同的库里面,使用mycat(81)可以查到他们的合集:证明分库分表完成,与此同时,保留了逻辑库tansk的原有配置在mycat里面插入数据:注意:即使插入所有字段的数据,也一定要在表名后面写明插入数据的字段名称,否则插入数据会报错:ERROR  (HY000): partition table, insert must provide ColumnListmysql>  insert into localtion (,'北京');mysql>  insert into localtion (,'洛杉矶');mysql>  insert into localtion (,'克利夫兰');

mycat(读写分离、负载均衡、主从切换)

结论:经过观察发现,插入数据是由规律的分别按前后次序进入mycat01和tanskdb的localtion表,本次实验数据先进入mycat-dn1-mycat01,后进入mycat-dn2-tanskdb

6.思考

6.1思考1

以现在的架构,master宕机,一台slave将会自动切换为writeHost机器,保证生产持续运行。如果mycat宕机,又该如何?

6.2思考2

以现在的架构,数据库负责最底层的真实数据的存储与管理,而mycat负责管理数据库,应用程序将指令发送给mycat。这样一来,应用程序到达数据库和结果返回的过程中是否存在延迟?若存在,又该如何诊断原因与发生的位置,如何解决这个延迟?



转载需注明出处

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,401
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,896