CacheCloud-部署使用常见问题(待续)

1.界面出现乱码

  • 现象:

  • 解决:
    修改online.properties或者local.properties中的cachecloud.db.url(前提是数据库是utf-8)

    1
    cachecloud.db.url = jdbc:mysql://127.0.0.1:3306/cache-cloud?useUnicode=true&characterEncoding=UTF-8

2.初始化脚本cachecloud-init.sh运行失败

  • 现象:

    1
    2
    3
    4
    #sh cachecloud-init.sh cachecloud
    : command not found line 2:
    : command not found line 11:
    : invalid option nameine 12: set: nounset
  • 解决:
    cachecloud-init.sh在windows上编辑过就会出现上面的错误,请使用vim直接编辑

3.用户密码在哪

答:CacheCloud没有保存密码,而是希望将登录逻辑扩展到贵公司。

4.CacheCloud与Codis

答:CacheCloud与Codis并没有可比性:

  • CacheCloud是官方Redis(standalone、sentinel、cluster)的上层工具,是用于运维和管理Redis的。
  • Codis是豌豆荚公司基于proxy方式对于Redis官方版本进行改造的分布式实现方式,当然其中也包含了管理Codis的dashboard
    所以两者并不具有可比性。

5.CacheCloud是客户端到Redis的代理吗?

答:不是,客户端只有第一次启动的时候去CacheCloud通过appId拿到Redis的节点信息,之后不会与CacheCloud打交道了。具体参考issue1

附图一张:

6.CacheCloud如何与服务器”打交道”

6.1实现方式

答:CacheCloud通过ssh的方式与服务器”打交道”(例如:收集机器信息、推送配置文件、开启Redis节点)。所以在初始化服务器时要添加一个ssh的username和password,有关机器初始化可以参考Cachecloud快速接入

release 1.0版本请参考
同时在cachecloud的local.properties和online.properties分别有cachecloud.machine.username和cachecloud.machine.password属性。

release 1.1及其以后版本请参考:
http://cachecloud.github.io/2016/05/24/CacheCloud%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E/

6.2 ssh安全吗?有其他方式吗?

答:

  • 我们使用ssh主要考虑的是方便性,ssh是存在一定的安全性问题。同时考虑到cachecloud是在内网中使用的,所以适度放宽了条件。
  • 也可以采用证书的方式,例如这个pull request
  • 其他方式根据企业的要求自定义实现,主要的实现实现都在SshUtil类中。

7.”之前”的Redis如何托管给CacheCloud管理:

答:详见:
http://cachecloud.github.io/2016/04/17/%E5%B7%B2%E5%AD%98%E5%9C%A8Redis%E6%8E%A5%E5%85%A5CacheCloud/

8.实例下线和心跳停止?

  • 下线:管理员人工处理,真的下线了。
  • 心跳停止:监控认为有可能下线,但是由于网络等原因,可能并没有下线,所以需要管理员处理

9. 配置修改是对实例下所有实例进行修改吗?

答:是的。
      Cachecloud中各种类型(Redis-standalone, Redis-sentinel, Redis-cluster),在开启应用时,使用的我们认为最优的配置。

      但是,每个用户自己服务类型不同,需求可能会不同,例如对于maxmemory-policy、list-max-ziplist-entries、list-max-ziplist-value等配置就会有所不同,如果有需要修改配置,用户可以自行提交配置修改。

      修改方法如下:

  • (1) 进入应用统计信息页面,就配置看到申请配置修改按钮

  • (2) 点击申请修改配置,填写相应字段和值

  • (3) 后台管理员接收到申请邮件,进行处理,处理完成后,用户将收到相应处理邮件

如果想修改一个实例配置怎么办?

现在需要手动到机器上修改,后期会修复这个问题,因为我们认为一般来说集群的配置尽可能的统一。

10. 启动jvm报错:

  • 不要使用openJdk,查看方法java -version。
  • 确保jdk 1.7+

下面就是openJdk的错误。

1
2
3
Unrecognized VM option 'UnlockCommercialFeatures'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

11.机器管理中删除机器做了什么?

  • 从db删除机器信息和机器统计信息
  • 去掉机器信息收集和机器监控的定时任务
    所以:删除机器不会删除Redis实例信息、也不会关闭Redis进程,但是还是要谨慎处理。

12. CacheCloud都有哪些报警信息

1
短信和邮件需要自己实现,请参考https://github.com/sohutv/cachecloud/wiki/3.%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E6%8E%A5%E5%85%A5%E6%96%87%E6%A1%A3#cc5-2
  • Redis节点存活检测:5分钟检测一次,如果认为心跳停止,会收到短信和邮件报警(),会收到类似如下文案的消息:

    1
    CacheCloud系统-实例(10.10.xx.xx:6382)-由运行中变为心跳停止, appId:10510
  • 应用内存和节点内存超过阀值:
    当应用的内存和节点内存的超过预设值(https://github.com/sohutv/cachecloud/wiki/1.%E7%94%A8%E6%88%B7%E5%8A%9F%E8%83%BD#cc9),会收到邮件报警

    1
    分片(10.10.xx.xx:6381,应用(10510))内存使用率报警-预设百分之95-现已达到百分之95.07-应用的内存使用率百分之94.72-请及时关注
  • 机器相关报警
    当机器的内存、负载、cpu超过预设配置时,预设值设置方法,会收到邮件和短信报警,形如:

1
ip:10.10.xx.xx,load:9.18

13. CacheCloud的命令统计信息是如何收集

强调一下,命令统计信息不是用monitor收集,monitor使用不当对线上影响很大,可以看一下后果:http://carlosfu.iteye.com/blog/2254571

Cachecloud使用的是info all命令中的命令统计模块进行收集,每分钟做一次差值:

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6391> info Commandstats
# Commandstats
cmdstat_get:calls=450296089,usec=2775711206,usec_per_call=6.16
cmdstat_set:calls=32913,usec=1138574,usec_per_call=34.59
cmdstat_setex:calls=265,usec=9776,usec_per_call=36.89
cmdstat_strlen:calls=7028,usec=47051,usec_per_call=6.69
cmdstat_del:calls=373252,usec=44654789,usec_per_call=119.64
cmdstat_exists:calls=11997395,usec=53442110,usec_per_call=4.45
cmdstat_incr:calls=296540,usec=7100618,usec_per_call=23.94
cmdstat_sadd:calls=140761,usec=188958343,usec_per_call=1342.41
cmdstat_scard:calls=109335,usec=548093,usec_per_call=5.01
cmdstat_smembers:calls=16,usec=8804,usec_per_call=550.25
....................

就可以看到下面的效果了:
曲线图

14. 重要日志说明

(1) 问题13已经提到cachecloud利用info差值来算上一分钟的一些统计信息,下面的日志为上一分钟没有统计数据,有可能是收集失败,有可能是确实没有(例如cachecloud刚刚启动)。

1
2
3
4
5
2016-06-27 14:19:24.165 {asyn-thread-2} ERROR com.sohu.cache.redis.impl.RedisCenterImpl - [redis-lastInfoMap] : lastCollectTime = 201606271418 appId=10010 host:port = 10.10.xx.xx:63xx is null
2016-06-27 14:19:24.168 {asyn-thread-2} ERROR com.sohu.cache.redis.impl.RedisCenterImpl - [redis-lastInfoMap] : lastCollectTime = 201606271418 appId=10044 host:port = 10.10.xx.xx:63xx is null
2016-06-27 14:19:24.168 {asyn-thread-2} ERROR com.sohu.cache.redis.impl.RedisCenterImpl - [redis-lastInfoMap] : lastCollectTime = 201606271418 appId=10012 host:port = 10.10.xx.xx:63xx is null
2016-06-27 14:19:24.230 {asyn-thread-2} ERROR com.sohu.cache.redis.impl.RedisCenterImpl - [redis-lastInfoMap] : lastCollectTime = 201606271418 appId=10020 host:port = 10.10.xx.xx:63xx is null
2016-06-27 14:19:24.260 {asyn-thread-2} ERROR com.sohu.cache.redis.impl.RedisCenterImpl - [redis-lastInfoMap] : lastCollectTime = 201606271418 appId=10045 host:port = 10.10.xx.xx:63xx is null

15. protected-mode产生的异常

Redis 3.2开始提供了protected-mode(虽然比较鸡肋),而且它是默认开启的,如果使用CacheCloud部署时,可能会产生如下异常:

1
ERROR com.sohu.cache.redis.impl.RedisDeployCenterImpl$6 - DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

原因很简单,CacheCloud的默认配置模板里面没有添加protected-mode,那么配置就默认为true,但是当在多台机器部署时,需要多个节点可以通信,那么protected-mode为true会造成通信失败(当然这个也要看requirepass),具体解决方法参考下面链接中的问题三。
https://cachecloud.github.io/2016/07/13/1.2.%20Redis%E9%85%8D%E7%BD%AE%E6%A8%A1%E6%9D%BF%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/

………………….待续……………………..