Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)
一、使用zookeeper管理远程Mycat配置文件
环境准备:
虚拟机192.168.152.130:
zookeeper,具体参考前面文章 搭建dubbo+zookeeper+dubboadmin分布式服务框架(windows平台下)
虚拟机192.168.152.128:
安装好Mycat,具体参考前面文章Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解
本机:
搭建好zookeeper的客户端工具ZooInspector ,具体参考文章Zookeeper数据查看工具ZooInspector简介
1. 启动ZK
./zkServer.sh start
2. 修改/usr/local/mycat/conf/myid.properties
vim /usr/local/mycat/conf/myid.properties
loadZk=true
zkURL=192.168.152.130:2181
clusterId=mycat-cluster-1
myid=mycat_fz_01
clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_04
#server booster ; booster install on db same server,will reset all minCon to 1
type=server
boosterDataHosts=dn2,dn3
myid.properties配置说明:
loadZk:默认值false。代表mycat集群是否使用ZK,true表示使用
zkURL:zk集群的地址
clusterId:mycat集群名字
myid:当前的mycat服务器名称
clusterNodes:把所有集群中的所有mycat服务器罗列进行以逗号隔开,比如:clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_03
3. 使用Mycat脚本初始化mycat在ZK中的节点数据
/usr/local/mycat/bin/init_zk_data.sh
4. 启动mycat
/usr/local/mycat/bin/mycat start
5. 连接mycat,查看当前数据库中表的情况
mysql -uroot -pdigdeep -P8066 -h192.168.152.128
use TESTDB;
show tables;
6. 使用zookeeper的客户端工具ZooInspector连接zookeeper修改mycat配置文件
6.1 进入目录E:\software\devtools\ZK\ZooInspector\build,运行zookeeper-dev-ZooInspector.jar;
java -jar zookeeper-dev-ZooInspector.jar
连接远程zookeeper
连接成功以后可以看到mycat的树节点和mycat的安装后的conf目录下的schema.xml和rule.xml文件是对应的
6.2 在zookeeper管理工具里面动态修改schema配置文件新增一张逻辑表travelrecord2
保存修改,查看mycat的schema.xml配置文件,可以看到修改已经同步过来了
重启mycat,可以看到TESTDB里面有新配置的travelrecord2表
/usr/local/mycat/bin/mycat restart
二、Mycat监控
1. 下载Mycat-web上传到虚拟机中
http://dl.mycat.io/mycat-web-1.0/
2. 解压Mycat-web
tar -zxvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
3 修改mycat-web项目下/WEB-INF/classes/mycat.properties中zookeeper属性
vim /software/mycat-web/mycat-web/WEB-INF/classes/mycat.properties
#Mon Jan 16 15:37:36 CST 2012
show.period=3000000
zookeeper=192.168.152.130:2181 mycat_warn_mail=[{"cc"\:"sohudo@mycat.io","index"\:1,"mangerPort"\:"465","smtpHost"\:"smtp.139.com","smtpPassword"\:"123456","smtpProtocol"\:"smtp","smtpUser"\:"agile_louie@139.com","to"\:"9183838@qq.com"}]
##sql\u4E0A\u7EBF\u76F8\u5173\u914D\u7F6E
sqlonline.server=192.168.80.128
sqlonline.user=root
sqlonline.passwd=123456
4. 启动mycat-web
/software/mycat-web/start.sh
5. 访问mycat-web
访问地址:http://192.168.152.128:8082/mycat/
6. 在Mycat管理界面手动初始化Mycat配置
6.1 Mycat-配置管理。增加mycat服务器配置
保存,新增成功
6.2 mycat-VM管理。配置JMX服务项
保存新增成功
6.3 MySQL配置管理
分别保存,新增成功
初始化完前面的三步,就可以对Mycat进行监控了
三、Mycat数据迁移(扩容)
以employee表作数据迁移
1. 准备工作:
1)修改employee表的分片规则为一致性hash,vim schema.xml
<table name="employee" dataNode="dn1,dn2" rule="sharding-by-murmur" primaryKey="ID"/>
2)修改分布式全局唯一id方式为本地文件方式,vim server.xml
<property name="sequnceHandlerType">0</property>
3)关掉ZK配置,vim myid.properties
loadZk=false
zkURL=192.168.152.130:2181
clusterId=mycat-cluster-1
myid=mycat_fz_01
clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_04
#server booster ; booster install on db same server,will reset all minCon to 1
type=server
boosterDataHosts=dn2,dn3
4) 重启mycat
../bin/mycat restart
5) 连接mycat,并创建employee表,并插入数据
mysql -uroot -pdigdeep -P8066 -h192.168.152.128
use TESTDB;
create table employee(
id bigint(20) not null primary key auto_increment,
name varchar(20),
sharding_id bigint(20),
company_id bigint(20)
);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack001', 10010, 1);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack002', 10000, 2);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack003', 10010, 3);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack004', 10010, 4);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack005', 10010, 5);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack006', 10000, 1);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack007', 10000, 1);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack008', 10000, 2);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack009', 10010, 2);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack010', 10010, 1);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack011', 10010, 3);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack012', 10010, 4);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack013', 10000, 5);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack014', 10000, 5);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack015', 10010, 2);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack016', 10000, 2);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack017', 10010, 3);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack018', 10000, 3);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack019', 10010, 1);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack021', 10000, 1);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack022', 10010, 2);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack023', 10000, 5);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack024', 10000, 4);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack025', 10000, 5);
insert into employee(id, name, sharding_id, company_id) values(next value for MYCATSEQ_GLOBAL, 'Jack026', 10010, 3);
可以看到插入了25条数据到employee里面
然后在主库(192.168.152.130)的两个分片dn1(db1),dn2(db2)上查看employee的数据
可以看到dn1上有15条数据,dn2上有10条数据
2. 开始做数据迁移
当前employee表的数据分布在dn1,dn2,迁移后要分布在dn1,dn2,dn3
1)生成一个新的schema文件,文件名newSchema.xml,同时修改dataNode="dn1,dn2,dn3"(新的分片定义)
cp schema.xml newSchema.xml
vim newSchema.xml
以前的schema.xml文件:
新的newSchema.xml:
2)生成一个新的rule文件,文件名newRule.xml,同时修改分片数为3(新的分片规则)
cp rule.xml newRule.xml
vim newRule.xml
以前的rule.xml:
新的newRule.xml:
3)修改/usr/local/mycat/conf/migrateTables.properties文件。写明要迁移的schema和表,多张表用逗号隔开
vim migrateTables.properties
#schema1=tb1,tb2,...
#schema2=all(写all或者不写将对此schema下拆分节点变化的拆分表全部进行重新路由)
#... #sample
#TESTDB=travelrecord,company,goods
TESTDB=employee
4)停止mycat(也可以不停止mycat)
5)执行dataMigrate.sh开始迁移(扩容)。
[root@centos1 bin]# ./dataMigrate.sh
遇到的错误1:
开始执行./dataMigrate.sh 的时候报没有适合的驱动
No suitable driver found for jdbc:mysql://192.168.152.130:3306/db1 java.sql.SQLException: No suitable driver found for jdbc:mysql://192.168.152.130:3306/db1
解决方法1:
下载jar包mysql-connector-java-5.1.6.jar,然后上传到/usr/local/mycat/lib
查看主库(192.168.152.130)三个分片dn1(db1),dn2(db2),dn3(db3)上employee表的数据
可以看到数据迁移成功
6)修改newRule.xml成为rule.xml,修改newSchema.xml为schema.xml。重启mycat
./bin/mycat restart
连接mycat,查看employee表的数据
mysql -uroot -pdigdeep -P8066 -h192.168.152.128
参考文章:
Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)的更多相关文章
- Mycat 分片规则详解--数据迁移及节点扩容
使用的是 Mycat 提供的 dataMigrate 脚本进行对数据进行迁移和节点扩容,目前支持的 Mycat 是1.6 版本,由于 Mycat 是由 Java 编写的因此在做数据迁移及节点扩容时需要 ...
- MySQL系列(九)--InnoDB索引原理
InnoDB在MySQL5.6版本后作为默认存储引擎,也是我们大部分场景要使用的,而InnoDB索引通过B+树实现,叫做B-tree索引.我们默认创建的 索引就是B-tree索引,所以理解B-tree ...
- 什么?还在用delete删除数据《死磕MySQL系列 九》
系列文章 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?& ...
- Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中
一.开启MyS远程访问功能 1.进入服务器输入netstat -an | grep 3306确认3306是否对外开放,MySQL默认状态下是不对外开放访问功能的.输入以上命令之后如果端口没有被开放就会 ...
- mysql系列九、mysql语句执行过程及运行原理(分组查询和关联查询原理)
一.背景介绍 了解一个sql语句的执行过程,了解一部分都做了什么,更有利于对sql进行优化,因为你知道它的每一个连接.where.分组.子查询是怎么运行的,都干了什么,才会知道怎么写是不合理的. 大致 ...
- zookeeper管理solr的配置文件
zookeeper可以管理solr和其他软件的配置文件.配置文件还是保存在linux服务器的磁盘上,但是不是改变solr读取solr/home配置的配置文件的位置. 现在solr/home配置文件的位 ...
- 查看zookeeper管理的solrcloud配置文件
进入zookeeper/bin目录下 连接zookeeper sh zkCli.sh -server localhost:2181 查看 ls /configs 结果如下 [zk: localhost ...
- Entity Framework 学习系列(3) - MySql Code First 开发方式+数据迁移
目录 # 写在前面 一.开发环境 二.创建项目 三.安装程序包 四.创建模型 五.连接字符串 六.编辑程序 七.数据迁移 写在最后 # 写在前面 这几天,一直都在学习Entity Framework ...
- MySQL统计总数就用count(*),别花里胡哨的《死磕MySQL系列 十》
有一个问题是这样的统计数据总数用count(*).count(主键ID).count(字段).count(1)那个效率高. 先说结论,不用那么花里胡哨遇到统计总数全部使用count(*). 但是有很多 ...
随机推荐
- Codeforces.392E.Deleting Substrings(区间DP)
题目链接 \(Description\) \(Solution\) 合法的子序列只有三种情况:递增,递减,前半部分递增然后一直递减(下去了就不会再上去了)(当然还要都满足\(|a_{i+1}-a_i| ...
- HDU.3032.Nim or not Nim?(博弈论 Lasker's Nim)
题目链接 \(Description\) 有多堆石子, 每次可以将任意一堆拿走任意个或者将这一堆分成非空的两堆, 拿走最后一颗石子的人胜利.问谁会获得胜利. \(Solution\) Lasker's ...
- [Asp.net core]bootstrap分页
摘要 一直在用前后端分离,在一个后台管理的页面中,尝试封装了一个辅助类. 类 /// <summary> /// 分页viewmodel /// </summary> /// ...
- ASP.NET Web API中通过URI显示实体中的部分字段
有时候我们可能不想显示某个实体中的所有字段.比如客户端发出如下请求: locaohost:43321/api/groups/1/items?fields=idlocaohost:43321/api/g ...
- 还在为工作发愁?学JavaScript吧
事实上,每家专业招聘机构,从Glassdoor.com和Linkedin到美国劳工部,都报导了就业市场对开发人员需求的增长速度出于意料地快.这种需求可能已经不新鲜了,但是就业市场对哪种开发语言的需求量 ...
- 用MATLAB生成模糊控制离线查询表
实时采样得到的数据经过模糊化处理后输入机器,通过查询模糊规则表便可得到应有的输出模糊量,从而避免了近似推理过程.实际应用中,特别是在控制系统较为简单而采用单片机控制时,常常采用这种查表法. 模糊控制表 ...
- IASetIndexBuffer Offset
这个Offset官方解释是:Offset (in bytes) from the start of the index buffer to the first index to use. 翻译成中文就 ...
- [转]抛弃jQuery,使用原生JavaScript
原文链接 Document Ready 事件 在jQuery中,document.ready可以让代码在整个文档加载完毕之后执行: $(document).ready(function() { // ...
- POCO Log库
http://pocoproject.org/index.html 有个想法,把这个所谓的跨平台log库阉割成只支持win的,然后使代码尽量简化,高效,以后有时间就开始研究,哈哈.
- Python 贝叶斯分类
很久的时间没有更新了,一是因为每天加班到比较晚的时间,另外,公司不能上网,回家后就又懒得整理,最近在看机器学习实战的书籍,因此才又决定重新拾起原先的博客! 今天讲的是第三章的贝叶斯分类方法,我们从一个 ...