MySQL主从复制之Mycat简单配置和高可用
什么是Mycat
1.Mycat就是MySQL Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等.因此,Mycat本身并不存储数据,数据是在后端的MySQL上存储的,因此数据可靠性以及事务等都是MySQL保证的.2.Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储.所以有了数据库中间件,应用只需要集中与业务处理,大量的通用的数据聚合,事务,数据源切换都由中间件来处理,中间件的性能与处理能力将直接决定应用的读写性能,所以一款好的数据库中间件至关重要。
术语
分片规则(rule)
逻辑库(schema)
分片节点(dataNode)
节点主机(dataHost)
Mycat使用
首先要安装,mysql5.7和mycat,并且两台主机要先做好mysql的主从复制,且两台主机的mysql都要存在db1数据库,用来存放mycat的数据.
关于mysql的主从复制,这里就不贴出了,可以移步以下链接:
基于GTID的主从复制数据库 http://www.linuxidc.com/Linux/2017-04/142451.htm
mysql的经典主从复制 http://www.linuxidc.com/Linux/2017-04/142452.htm
配置mycat
vim wrapper.conf
5 wrapper.java.command=/usr/bin/java #java命令所在目录
31 wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G 根据实际内存设置
33 wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=2984
定义mycat中可以创建的表,以及哪些节点可以使用哪些表
7<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
11<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
12<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
14<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
15 rule="mod-long" />
19 <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20 rule="sharding-by-intfile" />
21 <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
22 rule="sharding-by-intfile">
23 <childTable name="orders" primaryKey="ID" joinKey="customer_id"
24 parentKey="id">
25 <childTable name="order_items" joinKey="order_id"
26 parentKey="id" />
27 </childTable>
28 <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
29 parentKey="id" />
30 </table>
36 <dataNode name="dn1" dataHost="server33.lalala.com" database="db1" />
37 <dataNode name="dn2" dataHost="server33.lalala.com" database="db1" />
38 <dataNode name="dn3" dataHost="server33.lalala.com" database="db1" />
43 <dataHost name="server33.lalala.com" maxCon="1000" minCon="10" balance="0"
44 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
45 <heartbeat>select user()</heartbeat>
46 <!-- can have multi write hosts -->
连接数据库的用户密码,稍后还要在数据库授权
因为我们做的是高可用,所以33和44都具有写的功能
vim schema.xml
47 <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"
48 password="Mycat+007">
49 <!-- can have multi read hosts -->
50 </writeHost>
51 <writeHosthost="hostS1" url="server44.lalala.com:3306" user="mycat"
52 password="Mycat+007">
53 </writeHost>
server33,server44:
vim /etc/my.cnf
22 lower_case_table_names = 1
mysql>CREATE USER mycat identified by 'Mycat+007';
mysql>grant all privileges on *.* to mycat@'%';
配置成功,启动~
mycat start ,查看日志 wrapper.log
检验
mycat的登陆:
mysql -umycat -pMycat+007 -P8066 -h127.0.0.1
查看server44,和server33的mycat数据是否同步~
建表:
create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
插入数据:
insert into employee(id,name,sharding_id) values(1,'leader us',10000);
insert into employee(id,name,sharding_id) values(2, 'me',10010);
insert into employee(id,name,sharding_id) values(3, 'mycat',10000);
insert into employee(id,name,sharding_id) values(4, 'mydog',10010);
在两台mycat上,都能看到相同的数据,即为成功
并且在server33和server44上的db1数据库中,也能看见刚刚创建的数据
heartbeat+drbd+mycat实现高可用分布式存储
存储:drbd
vim /etc/drbd.d/lalalala.res
resource lalalala {
meta-disk internal;
device /dev/drbd8;
syncer {
verify-alg sha1;
}
on server33.lalala.com {
disk /dev/vdc;
address 172.25.88.33:7789;
}
on server44.lalala.com {
disk /dev/vdb;
address 172.25.88.44:7789;
}
}
高可用
vim ha.cf
initdead 60 资源初始化时间,如果设置过大,接管时间可能很长,不用担心,只需要耐心等待~
vim haresources
server33.lalala.com IPaddr::172.25.88.100/24/eth0 drbddisk::lalalala Filesystem::/dev/drbd8::/home/mycat/app/mycat/lib::ext4 mycatd
其他配置照旧~
需要指出的是,因为mycat不属于LSB,所以要自己编写脚本启动文件,我写的太粗糙了,不要学我.....
vim /etc/init.d/mycatd 注意启动脚本的位置
3 path=/home/mycat/app/mycat/bin/mycat #路径为执行mycat的环境,可以用which查看
4 function usage(){
5 echo "$0 {start|stop|restart}"
6 exit 1
7 }
8 [ $# -ne 1 ] && usage #如果没有输入参数,就显示本脚本用法
9
10
11 case $1 in
12 start)
13 $path/mycat start # &>/dev/null &
16 ;;
17 stop)
18 $path/mycat stop &>/dev/null &
21 ;;
22 restart)
23 $path/mycat start &>/dev/null &
24 $path/mycat stop &>/dev/null &
27 ;;
28 *)
29 printf "Usage:$0 {start|stop|restart}\n"
30 esac
启动server33的heartbeat!
可以看到IP,存储,服务全都启动拉!
查看挂载点和IP
高可用的接管,take over
MySQL主从复制之Mycat简单配置和高可用的更多相关文章
- mysql主从复制(超简单)
mysql主从复制(超简单) 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql ...
- Spring Cloud第十一篇 | 分布式配置中心高可用
本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
- Dubbo入门到精通学习笔记(十四):ActiveMQ集群的安装、配置、高可用测试,ActiveMQ高可用+负载均衡集群的安装、配置、高可用测试
文章目录 ActiveMQ 高可用集群安装.配置.高可用测试( ZooKeeper + LevelDB) ActiveMQ高可用+负载均衡集群的安装.配置.高可用测试 准备 正式开始 ActiveMQ ...
- 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Gre ...
- Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移
文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...
- Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置
1. Mycat简介 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...
- MySQL主从复制的原理及配置
[http://www.jb51.net/article/50053.htm] MySQL 数据库的高可用性架构: 集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单 ...
- MySql主从复制原理和环境配置搭建
主从复制原理 实质就是通过二进制的sql文件实现主从复制 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlo ...
- MySQL - 高可用性:少宕机即高可用?
我们之前了解了复制.扩展性,接下来就让我们来了解可用性.归根到底,高可用性就意味着 "更少的宕机时间". 老规矩,讨论一个名词,首先要给它下个定义,那么什么是可用性? 1 什么是可 ...
随机推荐
- Activiti工作流(3):activiti核心API
ProcessEngine 说明: 1) 在Activiti中最核心的类,其他的类都是由他而来. 2) 产生方式:ProcessEngine defaultProcessEngine = Pr ...
- 安装Apache PHP MySQL PHPMyAdmin
视频教程:https://www.youtube.com/watch?v=FJC2iGt_2bc,Youtube看不了的FQ吧-3- 本人参考这篇文章:http://blog.csdn.net/kno ...
- int long long 的取值范围
unsigned int 0-4294967295 //整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明 ...
- Objective-C method及相关方法分析
## Objective-C method及相关方法分析 转载请注名出处 [http://blog.csdn.net/uxyheaven](http://blog.csdn.net/uxyheaven ...
- 怎样用redis实现分布式锁
引子 redis作为一个强大的key/value数据库.事实上还能够用来实现轻量级的分布式锁. 1.实现方案1 最早官方在SETNX命令页给了一个实现: acquire lock: SETNX loc ...
- Android Studio升级到0.8.1后怎样设置字体大小?
升级到0.8.1后.打开设置字体大小页面.你会发现无论是Default还是Darcula,都不同意你改变字体的大小.事实上这个是由于这两个模式是Android Studio自带模式,所以不同意你修改, ...
- 解决wget下载文件名乱码的一些方法
在下载用apache或者nginx做的索引目录时,遇到文件名乱码问题.搜索了不少资料,尝试了好几种方案,大家可以结合使用. 一般情况下加上–restrict-file-names=nocontrol参 ...
- Multidex实现简要分析
1.Multidex的产生 在android5.0之前,每一个android应用中只会含有一个dex文件,但是因为Android系统本身的BUG,使得这个dex的方法数量被限制在65535之内,这就是 ...
- 禁止input输入空格
仅适用于PC端:$("input").attr("onKeypress","javascript:if(event.keyCode == 32)eve ...
- syslog日志介绍
一. syslog简介 syslog是一种工业标准的协议,可用来记录设备的日志.在UNIX系统,路由器.交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件.管理者可以 ...