Redis Manager是一款开源的Redis一站式管理平台,我在实际运维工作中使用这个工具已经有两年多时间。它最大的价值在于将Redis集群管理的各种零散功能整合到一个可视化界面中,让运维人员不再需要频繁登录服务器执行命令行操作。
这个平台支持三种主流Redis架构模式的管理:
特别值得一提的是,平台提供了从集群部署、日常监控到故障告警的完整生命周期管理功能。比如我们团队管理着30多个Redis集群,通过这个平台可以实时查看每个节点的内存使用率、连接数等关键指标,出现异常时会自动触发邮件告警。
在开始安装前,需要确保服务器满足以下条件:
提示:生产环境建议使用Oracle JDK而非OpenJDK,我们在测试中发现Oracle JDK的GC性能更稳定,特别是在处理大量Redis监控数据时。
安装过程首先需要准备MySQL数据库:
sql复制CREATE DATABASE `redis_manager`
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;
这里只需要创建空数据库即可,不需要手动建表。项目启动时会自动执行Flyway数据库迁移脚本,创建所有必要的表结构。这种设计大大简化了部署流程,我在第一次部署时就因为这个特性节省了近半小时的建表时间。
关键的配置文件是application.yml,需要修改以下几个部分:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/redis_manager
username: your_username
password: your_password
redis-manager:
conf-path: /data1/redis-manager/data/conf/
package-path: /data1/redis-manager/data/machine/
配置说明:
conf-path:存储Redis配置文件的目录package-path:存放Redis安装包的路径注意:确保运行账号对这两个目录有读写权限,我们曾经遇到过因权限问题导致Redis实例无法启动的情况。
原项目的编译脚本有些复杂,我对其进行了简化。主要改进点包括:
bash复制#!/bin/bash
project_path=$(cd `dirname $0`; pwd)
cd $project_path
ls | grep -v '.sh' | xargs rm -rf
mkdir conf/ web/ logs/
# 前端编译
cd ../redis-manager-ui/redis-manager-vue
npm run build
# 资源整合
cd ../../redis-manager-dashboard
rm -rf src/main/resources/static
rm -rf src/main/resources/templates/index.html
mv ../redis-manager-ui/redis-manager-vue/dist/static src/main/resources/static
mv ../redis-manager-ui/redis-manager-vue/dist/index.html src/main/resources/templates/
mv ../redis-manager-ui/redis-manager-vue/dist/logo.ico src/main/resources/
# 后端编译(可选)
mvn clean package -Dmaven.test.skip=true
编译完成后会在target目录生成部署包:
bash复制# 上传部署包
scp redis-manager-dashboard-2.3.3-RELEASE.tar.gz user@server:/data1/redis-manager
# 解压并启动
tar -xzvf redis-manager-dashboard-2.3.3-RELEASE.tar.gz
unix2dos redis-manager/bin/start.sh
sh redis-manager/bin/start.sh
部署完成后,默认访问地址是http://服务器IP:8080。建议配置Nginx反向代理并启用HTTPS,我们在生产环境中就是这样做的,既保证了安全性又提升了访问速度。
这个功能解决了Redis主从切换时的监控盲区问题。实现原理是:
告警信息包含:
我们在实际使用中发现,这个功能对于及时发现网络分区导致的主从切换特别有用,平均能比传统监控系统早5-10分钟发现问题。
Rebalance功能用于平衡集群中各节点的slot分布。平台封装了不同Redis版本的操作差异:
对于Redis 5.0+:
bash复制redis-cli --cluster rebalance \
--cluster-use-empty-masters \
host:port
对于Redis 5.0以下版本:
bash复制redis-trib.rb rebalance \
--use-empty-masters \
host:port
经验分享:在执行Rebalance前,建议先通过平台的"集群分析"功能检查当前slot分布情况。我们曾遇到过因slot分布不均导致Rebalance耗时过长的问题,后来发现是因为某些节点上的slot数量是其他节点的3倍多。
Reshard功能用于将指定数量的slot从一个节点迁移到另一个节点。平台同样适配了不同Redis版本:
Redis 5.0+版本命令:
bash复制redis-cli --cluster reshard \
--cluster-from [源节点ID] \
--cluster-to [目标节点ID] \
--cluster-slots [迁移slot数量] \
--cluster-yes \
--cluster-timeout [超时时间] \
--cluster-pipeline [每次迁移key数量] \
host:port
低版本命令:
bash复制redis-trib.rb reshard \
--from [源节点ID] \
--to [目标节点ID] \
--slots [迁移slot数量] \
--yes \
--timeout [超时时间] \
--pipeline [每次迁移key数量] \
host:port
关键参数说明:
--timeout:建议设置为至少60000(60秒),对于大数据量集群可以适当增大--pipeline:默认100,网络状况好时可增大到200-300以提高迁移速度JVM参数调整:
在start.sh中添加以下参数可显著提升大集群下的性能:
bash复制JAVA_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
数据库连接池配置:
修改application.yml中的连接池设置:
yaml复制spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 30000
监控数据存储优化:
对于大型集群,建议调整监控数据的保存周期:
yaml复制redis-manager:
metrics:
history-days: 3 # 默认保存7天,可减少为3天
编译失败:
npm cache clean --force启动后无法访问:
集群节点显示不全:
cluster-enabled配置是否为yes告警邮件发送失败:
yaml复制spring:
mail:
properties:
mail.smtp.ssl.enable: true
修改默认密码:
首次登录后立即修改admin账户的默认密码
启用HTTPS:
通过Nginx配置SSL证书,示例配置:
nginx复制server {
listen 443 ssl;
server_name redis-manager.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:8080;
}
}
IP访问限制:
在应用前配置防火墙规则,只允许特定IP访问管理界面
Redis Manager的架构设计使得功能扩展相对容易。以添加新的告警通道为例:
AlertNotifier接口:java复制public interface AlertNotifier {
void sendAlert(AlertMessage message);
}
java复制@Component
public class WeComNotifier implements AlertNotifier {
@Override
public void sendAlert(AlertMessage message) {
// 调用企业微信API发送消息
}
}
java复制@Configuration
public class AlertConfig {
@Bean
@ConditionalOnProperty(name = "alert.wecom.enabled")
public WeComNotifier weComNotifier() {
return new WeComNotifier();
}
}
这种模块化设计让我们团队能够快速集成内部的监控系统,整个过程只用了不到两天时间。
在实际使用中,我们发现平台对Redis 6.x和7.x的支持也很好,虽然官方文档没有明确说明。通过阅读源码,我们还发现了一些隐藏功能,比如可以通过特定URL参数直接跳转到某个集群的监控页面,这在日常运维中非常实用。