Mycat运维部署文档
环境准备
- JDK 下载,至少JDK1.7版本及以上
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html - MySQL 下载
http://dev.mysql.com/downloads/mysql/5.5.html#downloads注:MyCAT 支持多种数据库接入,如:MySQL、SQLServer、Oracle、MongoDB 等,推荐使用MySQL 做集群。
安装与部署
平台组有提供编译好的安装包,支持 windows、Linux、Mac、Solaris 等系统上安装与运行。
解压安装包建议放在 /usr/local/Mycat 目录下,创建mycat用户,改变目录权限为mycat
1 | $ tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz |
mysql设置
通过部署发现在Mycat中部署逻辑表表名大小写混合时,在Mycat连接后出现全变小,所以需要修改mysql不忽略表名大小写,需要手动到/etc/my.cnf 下配置
lower_case_table_names=1
环境变量设置
1 | $ vim /etc/profile |
jdk设置
启动前,需修改java的命令配置,打开conf/wrapper.conf文件,修改wrapper.java.command项,如下
1 | # Java Application |
内存设置
启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如下行的内容为2G和2048,可根据本机配置情况修改为512M或其它值。 以下配置跟jvm参数完全一致,可以根据自己的jvm参数调整
1 | # Java Additional Parameters |
Zookeeper配置
由于mycat多实例运行,需要统一的配置中心,官方建议将配置文件基于zk部署。
- 修改conf下的myid.properities
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15vim myid.properties
loadZk=true
# zk集群地址,多个用","隔开
zkURL=127.0.0.1:2181
# zk集群内Mycat集群ID
clusterId=dxy-ucloud-mycat-cluster
# Mycat集群内本实例ID,禁止重复
myid=ucloud_mycat_01
# Mycat集群内节点个数
clusterSize=2
clusterNodes=ucloud_mycat_01,ucloud_mycat_02
#server booster ; booster install on db same server,will reset all minCon to 1
type=server
boosterDataHosts=dataHost1 - 初始化zk数据。注意:zk配置文件统一需要在zkconf目录下
1
sh $mycat_home/bin/init_zk_data.sh
启动MycatServer
1 | /usr/local/mycat/bin/mycat start |
注:mycat 支持的命令{ console | start | stop | restart | status | dump }
数据迁移
mysql配置调整,编辑/etc/my.cnf添加
1 | [mysqldump] |
mysqldump导入报ERROR 1153 (08S01) at line 1133809: Got a packet bigger than ‘max_allowed_packet’ bytes错误,因为MySQL允许的默认大小为1MB。
导出数据
注意,Mycat在执行INSERT语句时需要完整INSERT语句(用列名)
1 | mysqldump -uroot -p -c --skip-add-locks --skip-extended-insert --no-autocommit databaseName > databaseName.sql |
导入数据
1 | mysql -uroot -ptest -h192.168.99.216 -P8006 TESTDB #连接Mycat |
成功后可以在分片已经存入数据。错误日志在 logs/mycat.log文件中
1 | 连接Mycat select * from table 时,Mycat默认limit 100此配置可从schema.xml文件中修改sqlMaxLimit="100"定义 |
验证迁移数据完整性
查询所有表的主键
1 | SELECT k.column_name,k.table_name FROM information_schema.table_constraints t JOIN information_schema.key_column_usage k USING (constraint_name,table_schema,table_name) WHERE t.constraint_type='PRIMARY KEY' AND t.table_schema='数据库'; |
查询所有表的记录数(行数)
1 | select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = '数据库' order by table_rows desc; |
Mycat-web监控
Mycat-web 是对mycat-server提供监控服务。功能不局限于对mycat-server使用。他基于jmx对所有JVM监控。通过JDBC连接对Mycat、Mysql 监控。基于snmp协议,监控远程服务器(目前仅限于linux系统)的cpu、内存、网络、磁盘。Mycat-web 最近改名 Mycat-eye。
Mycat-eye 运行过程中需要依赖 zookeeper,因此需要先安装 zookeeper。
安装
1 | tar -xvf Mycat-web-1.0-SNAPSHOT-20160331220346-linux.tar.gz -C /usr/local/ |
启动
先启动zookeeper,在启动mycat-web
1 | [root@oracle_standby mycat-web]# netstat -ntpl |grep 8082 |
监控平台
注意事项
- 部署完成,web监控中始终没有数据。是没有开启mycat server.xml中的useSqlStat属性。开启之后,可以监控sql.
- 监控sql 反应很慢,一般执行sql2分钟之后,监控页面才有反应。
Keepalive+Haproxy高可用配置
Mycat 作为一个代理层中间件,Mycat 系统的高可用涉及到 Mycat 本身的高可用以及后端 MySQL 的高可用,在 大多数情况下,建议采用标准的 MySQL 主从复制高可用性配置并交付给 Mycat 来完成后端 MySQL 节点的主从 自动切换。
一种常见的做法是使用 MyCAT + Haproxy + Keepalived,这中做法在 mysql 集群中已经很常见了。对于 MyCAT 集群,其大致架构图如下
配置详情请参考 Mycat部署文档之Keepalived 、 Mycat部署文档之Haproxy
问题
- 由于公司生产环境存在多个机房,是否存在跨机房调用?答:确实存在多个机房,但是不存在跨机房调用。
- 目前mycat官方版本提供的schema.xml和rule.xml配置文件不能import多个文件,是否存在业务团队由于配置出错导致整体服务不可用问题?答:中间件团队将会对配置文件进行改造,支持include语法。