CentOS 7实战:Mycat 1.6.7.4全流程部署与避坑指南
在数据库中间件领域,Mycat凭借其出色的分库分表能力和对MySQL协议的完美兼容,已经成为许多企业解决数据量激增问题的首选方案。本文将带您从零开始,在CentOS 7系统上完成Mycat 1.6.7.4的完整部署过程,特别针对内网环境和新手可能遇到的权限、Java环境等典型问题进行深度解析。
1. 环境准备与基础配置
1.1 系统环境检查
在开始安装前,我们需要确认CentOS 7系统的基础环境是否符合要求:
# 查看系统版本 cat /etc/redhat-release # 检查内存情况 free -h # 检查磁盘空间 df -h提示:Mycat运行至少需要1GB可用内存和2GB磁盘空间,生产环境建议配置更高
1.2 创建专用用户
为Mycat创建独立用户是安全部署的第一步,避免使用root权限运行服务:
# 创建mycat用户组和用户 groupadd mycat useradd -r -g mycat -s /bin/false mycat # 验证用户创建 id mycat1.3 Java环境安装与配置
Mycat基于Java开发,必须确保正确安装JDK:
# 检查现有Java版本 java -version # 若未安装,执行以下命令安装OpenJDK 8 yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel # 验证安装 java -version javac -version配置JAVA_HOME环境变量:
# 查找Java安装路径 update-alternatives --config java # 编辑/etc/profile文件 vim /etc/profile在文件末尾添加(路径根据实际查找结果调整):
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64 export PATH=$PATH:$JAVA_HOME/bin使配置立即生效:
source /etc/profile2. Mycat安装与目录配置
2.1 获取安装包
在内网环境中,我们通常需要先将安装包下载到本地再上传到服务器:
# 在本地下载Mycat 1.6.7.4 # 官方地址:http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/ # 使用scp上传到服务器(示例) scp Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz root@服务器IP:/usr/local/2.2 解压与目录权限设置
解压安装包并设置正确的目录权限:
# 切换到安装目录 cd /usr/local # 解压安装包 tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz # 简化目录名 mv Mycat-server-1.6.7.4-release-20200105164103-linux mycat # 设置目录权限 chown -R mycat:mycat mycat chmod -R 755 mycat2.3 配置环境变量
为方便使用mycat命令,需要配置系统环境变量:
vim /etc/profile在文件末尾添加:
export MYCAT_HOME=/usr/local/mycat export PATH=$PATH:$MYCAT_HOME/bin使配置生效:
source /etc/profile验证配置:
echo $MYCAT_HOME3. 核心配置文件详解
3.1 schema.xml配置解析
schema.xml是Mycat的核心配置文件之一,主要定义逻辑库、表和数据节点的映射关系。以下是一个典型的多节点配置示例:
<mycat:schema xmlns:mycat="http://io.mycat/"> <!-- 定义逻辑库 --> <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100"> <!-- 定义逻辑表 --> <table name="t_order" dataNode="dn1,dn2" rule="mod-long" primaryKey="id"/> </schema> <!-- 定义数据节点 --> <dataNode name="dn1" dataHost="localhost1" database="db1"/> <dataNode name="dn2" dataHost="localhost1" database="db2"/> <!-- 定义数据主机 --> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="yourpassword"/> </dataHost> </mycat:schema>关键参数说明:
| 参数名称 | 说明 | 推荐值 |
|---|---|---|
| checkSQLschema | 是否检查SQL中的schema | true |
| sqlMaxLimit | 默认返回行数限制 | 100-1000 |
| balance | 负载均衡策略 | 0-3 |
| writeType | 写操作分发方式 | 0-1 |
3.2 server.xml安全配置
server.xml配置Mycat服务本身参数和用户权限:
<user name="mycat_user" defaultAccount="true"> <property name="password">mypassword</property> <property name="schemas">TESTDB</property> <!-- 权限控制示例 --> <privileges check="true"> <schema name="TESTDB" dml="1110"> <table name="t_order" dml="1100"/> </schema> </privileges> </user>注意:生产环境必须修改默认用户名密码,并严格控制DML权限(1=可执行,0=禁止)
3.3 rule.xml分片规则
rule.xml定义分片算法,以下是常用的mod-long分片示例:
<tableRule name="mod-long"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <property name="count">2</property> </function>4. 服务启动与故障排查
4.1 启动与停止服务
使用mycat用户启动服务:
# 切换用户 su - mycat -s /bin/bash # 启动服务 $MYCAT_HOME/bin/mycat start # 查看状态 $MYCAT_HOME/bin/mycat status # 停止服务 $MYCAT_HOME/bin/mycat stop4.2 日志查看与分析
Mycat日志是排查问题的关键:
# 查看启动日志 tail -f $MYCAT_HOME/logs/wrapper.log # 查看业务日志 tail -f $MYCAT_HOME/logs/mycat.log常见启动问题及解决方案:
Java环境问题:
ERROR: transport error 202: bind failed: Address already in use检查Java安装和环境变量配置,确保JAVA_HOME正确
权限不足:
Permission denied while creating directory确保mycat用户对安装目录有读写权限
端口冲突:
java.net.BindException: Address already in use检查8066(服务端口)和9066(管理端口)是否被占用
4.3 连接测试
使用MySQL客户端连接Mycat:
mysql -umycat_user -pmypassword -h127.0.0.1 -P8066连接后执行基本SQL测试:
-- 查看逻辑库 SHOW DATABASES; -- 使用TESTDB库 USE TESTDB; -- 创建测试表 CREATE TABLE t_order (id INT PRIMARY KEY, name VARCHAR(20)); -- 插入测试数据 INSERT INTO t_order VALUES (1, 'order1'), (2, 'order2'); -- 查询数据 SELECT * FROM t_order;5. 性能优化与日常维护
5.1 JVM参数调优
编辑$MYCAT_HOME/conf/wrapper.conf调整JVM参数:
wrapper.java.additional.3=-Xms1G wrapper.java.additional.4=-Xmx2G wrapper.java.additional.5=-XX:MaxPermSize=256M提示:Xms和Xmx建议设置为相同值,避免运行时内存波动
5.2 连接池配置优化
在server.xml中调整连接池参数:
<system> <property name="defaultSqlParser">druidparser</property> <property name="processorBufferPool">2048</property> <property name="processorBufferChunk">1024</property> </system>推荐配置值:
| 参数 | 小型系统 | 中型系统 | 大型系统 |
|---|---|---|---|
| processorBufferPool | 1024 | 2048 | 4096 |
| processorBufferChunk | 512 | 1024 | 2048 |
5.3 监控与管理
Mycat自带管理端口(默认9066),可获取运行时信息:
mysql -umycat_user -pmypassword -h127.0.0.1 -P9066常用管理命令:
-- 查看连接 SHOW @@connection; -- 查看线程池 SHOW @@threadpool; -- 查看缓存 SHOW @@cache; -- ���看数据节点 SHOW @@datanode;5.4 定期维护建议
- 每日检查日志文件大小和错误日志
- 每周备份配置文件
- 每月统计慢查询并优化
- 根据业务增长情况提前规划分片策略调整
在实际部署过程中,我们发现Mycat 1.6.7.4版本在CentOS 7上运行稳定,但需要注意定期清理日志文件避免磁盘空间耗尽。对于分片键的选择,建议使用业务查询频繁的字段作为分片键,可以显著提升查询性能。