Mycat运维部署文档

环境准备

安装与部署

平台组有提供编译好的安装包,支持 windows、Linux、Mac、Solaris 等系统上安装与运行。
解压安装包建议放在 /usr/local/Mycat 目录下,创建mycat用户,改变目录权限为mycat

1
2
3
$ tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
$ useradd mycat
$ chown -R mycat.mycat /usr/local/mycat

mysql设置

通过部署发现在Mycat中部署逻辑表表名大小写混合时,在Mycat连接后出现全变小,所以需要修改mysql不忽略表名大小写,需要手动到/etc/my.cnf 下配置

lower_case_table_names=1

环境变量设置

1
2
3
$ vim /etc/profile
MYCAT_HOME=/usr/local/mycat
source /etc/profile

jdk设置

启动前,需修改java的命令配置,打开conf/wrapper.conf文件,修改wrapper.java.command项,如下

1
2
3
# Java Application
wrapper.java.command=/opt/java8/bin/java
wrapper.working.dir=..

内存设置

启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如下行的内容为2G和2048,可根据本机配置情况修改为512M或其它值。 以下配置跟jvm参数完全一致,可以根据自己的jvm参数调整

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Java Additional Parameters
wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=512M #JVM最大允许分配的非堆内存
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=100m
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx2048m #VM最大允许分配的堆内存
wrapper.java.additional.11=-Xms2048m #JVM初始分配的堆内存
wrapper.java.additional.12=-XX:+UseParNewGC #设置新生代使用并发收集器
wrapper.java.additional.13=-XX:+UseConcMarkSweepGC #设置JVM堆的老年代使用CMS并发收集器
wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection #打开对老年代的压缩
wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=5 #设置5才CMSGC后对堆空间进行压缩、整理

Zookeeper配置

由于mycat多实例运行,需要统一的配置中心,官方建议将配置文件基于zk部署。

  1. 修改conf下的myid.properities
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    vim 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
  2. 初始化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
2
3
[mysqldump]
max_allowed_packet = 16M
#default-character-set = utf8mb4

mysqldump导入报ERROR 1153 (08S01) at line 1133809: Got a packet bigger than ‘max_allowed_packet’ bytes错误,因为MySQL允许的默认大小为1MB。

导出数据

注意,Mycat在执行INSERT语句时需要完整INSERT语句(用列名)

1
2
3
4
5
mysqldump -uroot -p -c --skip-add-locks --skip-extended-insert --no-autocommit databaseName > databaseName.sql
# -c 参数不可少,-c, 全称为–complete-insert 表示使用完整的 insert 语句(用列名字)。
# --skip-add-locks 表示导数据时不加锁,如果加锁涉及多分片时容易导致死锁。
# --skip-extended-insert 将每行数据输出为一个单独的insert语句
# --no-autocommit 参数在每个表格所有的插入语句的前后分别增加SET autocommit = 0和COMMIT语句。相比没有这个参数,插入速度能差出至少200倍,分别是10000QPS和50QPS

导入数据

1
2
mysql -uroot -ptest -h192.168.99.216 -P8006 TESTDB #连接Mycat
source /databaseName.sql #导入数据

成功后可以在分片已经存入数据。错误日志在 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
2
select table_name,table_rows from information_schema.tables  where TABLE_SCHEMA = '数据库'  order by table_rows desc;
#对于InnoDB表,table_rows行计数仅是大概估计值。

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
2
3
4
5
tar -xvf Mycat-web-1.0-SNAPSHOT-20160331220346-linux.tar.gz -C /usr/local/ 
修改zookeeper地址:
cd /usr/local/mycat-web/mycat-web/WEB-INF/classes
vim mycat.properties
zookeeper=127.0.0.1:2181

启动

先启动zookeeper,在启动mycat-web

1
2
3
4
5
[root@oracle_standby mycat-web]# netstat -ntpl |grep 8082 
tcp 0 0 :::8082 :::* LISTEN 18288/java
[root@oracle_standby mycat-web]#
[root@oracle_standby mycat-web]# netstat -ntpl |grep 2181
tcp 0 0 :::2181 :::* LISTEN 18251/java

监控平台

http://127.0.0.1:8082/mycat/

注意事项

  • 部署完成,web监控中始终没有数据。是没有开启mycat server.xml中的useSqlStat属性。开启之后,可以监控sql.
  • 监控sql 反应很慢,一般执行sql2分钟之后,监控页面才有反应。

Keepalive+Haproxy高可用配置

Mycat 作为一个代理层中间件,Mycat 系统的高可用涉及到 Mycat 本身的高可用以及后端 MySQL 的高可用,在 大多数情况下,建议采用标准的 MySQL 主从复制高可用性配置并交付给 Mycat 来完成后端 MySQL 节点的主从 自动切换。
一种常见的做法是使用 MyCAT + Haproxy + Keepalived,这中做法在 mysql 集群中已经很常见了。对于 MyCAT 集群,其大致架构图如下

配置详情请参考 Mycat部署文档之KeepalivedMycat部署文档之Haproxy

问题

  1. 由于公司生产环境存在多个机房,是否存在跨机房调用?答:确实存在多个机房,但是不存在跨机房调用。
  2. 目前mycat官方版本提供的schema.xml和rule.xml配置文件不能import多个文件,是否存在业务团队由于配置出错导致整体服务不可用问题?答:中间件团队将会对配置文件进行改造,支持include语法。