一、CacheCloud介绍

该项目由搜狐开源,源代码托管至github上,地址为:https://github.com/sohutv/cachecloud。

 

CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功能、减少运维成本和误操作,提高机器的利用率,提供灵活的伸缩性,提供方便的接入客户端。

 

二、源码安装CacheCloud

我这里使用的是最新版CacheCloud,支持客户端密码的。系统使用的是CentOS 7,Redis使用的是3.0.7版本。

 

主机规划:

主机名

角色

IP

配置

Usage

server111-111

WebUI,受控节点

111.111.111.111

4C40G1T

cachecloud-web安装在该server上

server111-112

受控节点

111.111.111.112

4C40G1T

 

server111-113

受控节点

111.111.111.113

4C40G1T

 

 

1. 下载CacheCloud

 

$ git clone https://github.com/sohutv/cachecloud.git

2. 准备MySQL数据库

 

MySQL 5.5版本采用docker方式部署,mysql部署在111.111.111.111上,位置为:/opt/dockers/docker_tool_mysql55

 

docker-compose.yml代码如下:

version: '2'
services:
    mysql55:
        image: "docker.io/mysql:5.5"
        container_name: mysql55
        environment:
            MYSQL_ROOT_PASSWORD: "root123"
            MYSQL_USER: 'test'
            MYSQL_PASS: 'test123'
        restart: always
        volumes:
            - "./db:/var/lib/mysql"
            - "./conf/my.cnf:/etc/my.cnf"
            - "./init:/docker-entrypoint-initdb.d/"
        ports:
            - "3306:3306"
        networks:
            aidwdata_network:
                ipv4_address: 111.111.111.11
 
networks:
  aidwdata_network:
    external: true

 

docker目录(docker_tool_mysql55):

├── conf
│   └── my.cnf
├── db
├── docker-compose.yml
└── init
└── init.sql

 

My.cnf配置代码如下:

create database cachecloud charset utf8;
use cachecloud;
grant all on cachecloud.* to 'cachecloud'@'localhost' identified by 'cachecloud';
grant all on cachecloud.* to 'cachecloud'@'%' identified by 'cachecloud';
 
-- Cannot execute after test.(实测source命令在此处不生效)
-- source /root/software/sohu-redis/cachecloud/script/cachecloud.sql;

 

3. 安装Java环境

 

不要使用openJdk,需要使用Oracle提供的JDK,确保jdk 1.7+,去Oracle官网下载二进制版本。

$ tar xvf jdk-8u141-linux-x64.tar.gz -C /usr/local
$ ln -sv /usr/local/jdk1.8.0_141/ /usr/local/jdk

提供环境变量

$ cat /etc/profile.d/jdk.sh
#!/bin/bash
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

 

查看Java版本

$ source /etc/profile.d/jdk.sh
$ java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)

4. 初始化CacheCloud数据

导入项目中cachecloud.sql初始化库表结构,默认插入admin超级管理员。

 

如果MySQL 5.7版本(使用了严格SQL模式,会导致cachecloud.sql导入报错的),可直接取消SQL模式即可(最好也修改一下my.cnf配置文件);如果使用5.5版本,请忽略本操作。

mysql> set global sql_mode='';
mysql> set session sql_mode='';

创建字符集为utf8的数据库并导入数据

mysql> create database cachecloud charset utf8;
mysql> use cachecloud;
mysql> source /root/software/sohu-redis/cachecloud/script/cachecloud.sql;

创建CacheCloud连接用户

mysql> grant all on *.* to 'cachecloud'@'localhost' identified by 'cachecloud';
mysql> grant all on *.* to 'cachecloud'@'127.0.0.1' identified by 'cachecloud';
mysql> flush privileges;

5.CacheCloud项目数据库配置

5.1 安装maven

CacheCloud使用了maven作为项目构建的工具,所以先按照maven。

$ yum install maven

 

CacheCloud提供了local.properties和online.properties两套配置作为测试、线上的隔离。属性配置说明:

 

属性名

说明

示例

cachecloud.db.url

mysql驱动url

jdbc:mysql://111.111.111.111:3306/cachecloud?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8

cachecloud.db.user mysql

mysql用户名

cachecloud

cachecloud.db.password

mysql密码

cachecloud

web.port

spring-boot内嵌tomcat启动端口

Local  9999,

Cloud 8585(可修改)

 

 

 

下面可以修改local.properties和online.properties这两套配置了,改成如下配置即可:

$cat /root/cachecloud/cachecloud-open-web/src/main/swap/{online.properties,local.properties}
 
cachecloud.db.url= jdbc:mysql://111.111.111.111:3306/cachecloud?useUnicode=true&characterEncoding=UTF-8
cachecloud.db.user = cachecloud
cachecloud.db.password = cachecloud
cachecloud.maxPoolSize = 20
 
isClustered = true
isDebug = false
spring-file=classpath:spring/spring-online.xml
log_base=/opt/cachecloud-web/logs
web.port=8585
log.level=WARN

 

这里就是用来设置数据库连接,以及web端口的,可自行修改。但是一定注意cachecloud.db.user参数,用户名不能有多余的空格,不然后面会一直报连接不上数据库。

 

另外设置“cachecloud?useUnicode=true&characterEncoding=UTF-8″是用来支持中文的,一定与数据库字符集一样,都是UTF8。如果是使用二进制版本的,这里就需要写成“cachecloud?useUnicode=true&characterEncoding=UTF-8″。

 

6. 开始编译CacheCloud生成war包

 

6.1 本地启动

 

在cachecloud根目录下运行

mvn clean compile install -Plocal

在cachecloud-open-web模块下运行

mvn spring-boot:run

本地启动CacheCloud,如果没有问题,此时9999端口就会打开,可以使用浏览器访问了(注意安装maven时会安装openjdk)。

 

6.2 生产部署

 

在cachecloud根目录下运行

mvn clean compile install -Ponline

执行完成后,就可以执行script/deploy.sh脚本开始部署了。这个脚本会:

 

拷贝war包(cachecloud-open-web/target/cachecloud-open-web-1.0-SNAPSHOT.war)到/opt/cachecloud-web下;

拷贝配置文件(cachecloud-open-web/src/main/resources/cachecloud-web.conf)到/opt/cachecloud-web下,并改名为cachecloud-open-web-1.0-SNAPSHOT.conf(spring-boot要求,否则配置不生效);

拷贝start.sh和stop.sh脚本到/opt/cachecloud-web目录下。

执行deploy.sh脚本:

 

$ bash /root/cachecloud/script/deploy.sh /root/

后面是跟上cachecloud源码所在的目录,我这里是在/root下。

 

安装maven时会安装openjdk,会导致跟你安装的oracle jdk有冲突,所以编译完CacheCloud后可以卸载openjdk。

 

$ yum remove java-1.8.0-openjdk*

$ source /etc/profile.d/jdk.sh

7. 启动CacheCloud

 

$ bash /opt/cachecloud-web/start.sh

Starting the cachecloud ....OK!

PID: 12345

STDOUT: /opt/cachecloud-web/logs/cachecloud-web.log

Java启动有点慢(大概3-5分钟),没有什么问题过会就可以看到8585端口的启动了。

 

如果使用openjdk,启动时可能会有如下错误:

 

Unrecognized VM option 'UnlockCommercialFeatures'

Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.

 

登录CacheCloud,如:

用户:admin

密码:admin

 

 

三、二进制版本安装CacheCloud

二进制版本比较简单,做好如下几步即可:

 

1. 初始化好cachecloud.sql

 

2. 安装好Java

 

然后下载对应release版本的环境,例如1.2,将其在/opt下解压,解压后文件目录如下

 

cachecloud-open-web-1.0-SNAPSHOT.war:  cachecloud war包

cachecloud.sql: 数据库schema,默认数据名为cache_cloud,这里修改为cachecloud

jdbc.properties:jdbc数据库配置,自行配置

start.sh:启动脚本

stop.sh: 停止脚本

logs:存放日志的目录

 

二进制版本相对比较简单,同样也是对于jdbc.properites文件中数据库的用户名空格需要注意,配置如下:

 

$ cat /opt/cachecloud-web/jdbc.properties

cachecloud.db.url= jdbc:mysql://111.111.111.111:3306/cachecloud?useUnicode=true&characterEncoding=UTF-8
cachecloud.db.user = cachecloud
cachecloud.db.password = cachecloud
cachecloud.maxPoolSize = 20
jdbc.driver = com.mysql.jdbc.Driver
jdbc.validationQuery = select 1 from dual

 

这里就把“&”缓存“&”了,不然会报错。然后就可以启动了,默认端口是8585,可以修改start.sh中的server.port进行重置。

 

最后对于CacheCloud部署使用常见问题,去https://cachecloud.github.io里面看即可。

 

四、CacheCloud使用实例

首先在客户端执行cachecloud/script/cachecloud-init.sh初始化脚本,这个脚本默认会下载redis 3.0版本(你下载的不知道会不会变啊)。我这里要使用redis 3.2版本,所以修改一下脚本。

 

$ bash cachecloud-init.sh cachecloud

 

创建一个系统用户cachecloud,我这里密码也是cachecloud,这是CacheCloud默认的用户和密码。当然你也可以自行修改,但是需要所有机器都统一,另外需要在CacheCloud后台系统配置中改好。

 

由于我使用的是Redis 3.2版本,从这个版本开始提供了protected-mode(虽然比较鸡肋)和默认只监听本地回环地址,而且它是默认开启的,所以在使用CacheCloud部署时,需要修改Redis配置模板管理中的添加新配置:

 

protected-mode no

bind 0.0.0.0

针对Sentinal和Cluster模板也需要关闭protected-mode参数。

 

然后就可以进行添加如下操作了:

 

1、后台添加主机

2、前台申请应用

3、后台部署应用

 

如果你需要部署带密码的,在部署应用时填写这个实例的密码,然后点击更新即可。

 

 

五、相关表结构说明

在CacheCloud中,每个应用都会有一个唯一ID(app_id),这个ID会从1000开始自增长。另外,Redis相关实例的端口号也是会从6379开始自增长。所以了解一下相关表的作用还是有用的。

 

# Quartz定时任务相关的表;

QRTZ_BLOB_TRIGGERS
QRTZ_CALENDARS
QRTZ_CRON_TRIGGERS
QRTZ_FIRED_TRIGGERS
QRTZ_JOB_DETAILS
QRTZ_LOCKS
QRTZ_PAUSED_TRIGGER_GRPS
QRTZ_SCHEDULER_STATE
QRTZ_SIMPLE_TRIGGERS
QRTZ_SIMPROP_TRIGGERS
QRTZ_TRIGGERS

 

 

# 应用申请相关的表,app_id自增长就在这个表中;

app_audit
app_audit_log

 

 

# 应用相关的监控统计信息;

app_client_costtime_minute_stat
app_client_costtime_minute_stat_total
app_client_datasize_minute_stat
app_client_exception_minute_stat
app_client_instance
app_client_value_distri_minute_stat
app_client_value_minute_stats
app_client_version_statistic
app_daily
app_data_migrate_status
app_hour_command_statistics
app_hour_statistics
app_minute_command_statistics
app_minute_statistics

 

 

# 应用描述信息和用户信息;

app_desc
app_to_user
app_user

 

 

# 应用相关的Redis、sentinel信息分布在这几个表中;

instance_alert
instance_alert_configs
instance_config
instance_fault
instance_host
instance_info
instance_reshard_process
instance_slow_log
instance_statistics

 

 

# 主机配置和主机统计信息在这几个表中;

machine_info
machine_statistics
server
server_stat
standard_statistics
system_config

 

六、迁移工具使用

CacheCloud迁移使用的是redis-migrate-tool这个强大的工具,Github地址:https://github.com/vipshop/redis-migrate-tool。

 

在CacheCloud中使用,只需要把源码下载到/opt/cachecloud目录下编译一下(编译报错自行安装相关依赖包):

 

$ cd /opt/cachecloud
$ git clone https://github.com/vipshop/redis-migrate-tool
$ cd redis-migrate-tool
$ autoreconf -fvi
$ ./configure
$ make

然后需要在redis-migrate-tool主机添加cachecloud用户和密码:

$ useradd cachecloud

然后需要在redis-migrate-tool目录下创建一个data目录,并且需要给/opt/cachecloud目录:

 

$ mkdir /opt/cachecloud/redis-migrate-tool/data
$ chown cachecloud.cachecloud -R /opt/cachecloud

更多详细文档看官方文档:https://github.com/sohutv/cachecloud/wiki

 

七、redis-manager

市面上另一块redis管理软件为redis-manager,其定位是 Redis 一站式管理平台,支持集群创建、管理、监控、报警平台。

Github地址:https://github.com/ngbdf/redis-manager