[关闭]
@zhangsiming65965 2019-02-14T03:22:52.000000Z 字数 16749 阅读 194

Redis-cluster集群

云计算

---Author:张思明 ZhangSiming

---Mail:1151004164@cnu.edu.cn

---QQ:1030728296

如果有梦想,就放开的去追;
因为只有奋斗,才能改变命运。


一、Redis-cluster集群的部署与基础使用

1.1每台Redis上部署3实例(Redismaster和Redisslave一致)

  1. [root@ZhangSiming conf]# which redis-server
  2. /usr/local/bin/redis-server
  3. [root@ZhangSiming conf]# cp /usr/src/redis-4.0.11/src/redis-trib.rb /usr/local/redis/bin/
  4. #把redis-cluster自带的工具拷贝到/usr/local/redis/bin/下
  5. [root@ZhangSiming conf]# mkdir /data/redis-cluster
  6. #创建cluster目录
  7. [root@ZhangSiming conf]# cd /data/redis-cluster
  8. [root@ZhangSiming redis-cluster]# mkdir 7000 7001 7002
  9. [root@ZhangSiming redis-cluster]# cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7000/
  10. [root@ZhangSiming redis-cluster]# cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7001/
  11. [root@ZhangSiming redis-cluster]# cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7002/
  12. #复制三份配置文件过来

要实现Redis多实例,只需要复制多份配置文件,然后更改端口号,PIDfile位置、日志文件和数据目录位置即可;启动的时候指向不同的配置文件。

  1. [root@ZhangSiming redis-cluster]# sed -n "1p;3p;9p;11p;17p" /data/redis-cluster/7000/redis.conf
  2. cluster-enabled yes
  3. port 7000
  4. pidfile "/date/redis-cluster/7000/redis.pid"
  5. logfile "/data/redis-cluster/7000/redis.log"
  6. dir "/data/redis-cluster/7000/"
  7. [root@ZhangSiming redis-cluster]# sed "s#7000#7001#g" /data/redis-cluster/7000/redis.conf > /data/redis-cluster/7001/redis.conf
  8. [root@ZhangSiming redis-cluster]# sed "s#7000#7002#g" /data/redis-cluster/7000/redis.conf > /data/redis-cluster/7002/redis.conf
  9. #给三份配置文件都修改到相应端口,相应目录下

启动多实例Redis

  1. [root@ZhangSiming redis-cluster]# redis-server /data/redis-cluster/7000/redis.conf
  2. [root@ZhangSiming redis-cluster]# redis-server /data/redis-cluster/7001/redis.conf
  3. [root@ZhangSiming redis-cluster]# redis-server /data/redis-cluster/7002/redis.conf
  4. #指向不同的配置文件启动多实例Redis
  5. [root@ZhangSiming redis-cluster]# netstat -antup | grep redis
  6. tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 2005/redis-server 0
  7. tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 2010/redis-server 0
  8. tcp 0 0 0.0.0.0:7002 0.0.0.0:*
  9. #启动成功

1.2编译安装更高版本的ruby语言,需要大于等于2.2.2版本

  1. [root@ZhangSiming ~]# ls
  2. anaconda-ks.cfg common_install.sh ruby-2.2.7.tar.gz
  3. [root@ZhangSiming ~]# tar xf ruby-2.2.7.tar.gz -C /usr/src
  4. [root@ZhangSiming ~]# cd /usr/src/ruby-2.2.7/
  5. [root@ZhangSiming ruby-2.2.7]# ./configure && make && make install
  6. [root@ZhangSiming ruby-2.2.7]# ruby --version
  7. ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-linux]
  8. #编译安装成功
  9. [root@ZhangSiming ruby-2.2.7]# /usr/local/bin/gem install redis
  10. Fetching: redis-4.1.0.gem (100%)
  11. Successfully installed redis-4.1.0
  12. Parsing documentation for redis-4.1.0
  13. Installing ri documentation for redis-4.1.0
  14. Done installing documentation for redis after 2 seconds
  15. 1 gem installed
  16. #在线安装Ruby的Redis扩展

1.3使用redis-trib.rb创建本地的的cluster,并测试

  1. [root@ZhangSiming ruby-2.2.7]# /usr/local/redis/bin/redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
  2. >>> Creating cluster
  3. >>> Performing hash slots allocation on 3 nodes...
  4. Using 3 masters:
  5. 127.0.0.1:7000
  6. 127.0.0.1:7001
  7. 127.0.0.1:7002
  8. M: d2a7c90c060f1af1a3455c0f7fe125c2381f6e85 127.0.0.1:7000
  9. slots:0-5460 (5461 slots) master
  10. M: 8869a51897e65ae056eda34f7c46f34c0b564b4a 127.0.0.1:7001
  11. slots:5461-10922 (5462 slots) master
  12. M: 3317575b248992940744b22438ac7dbaab4da258 127.0.0.1:7002
  13. slots:10923-16383 (5461 slots) master
  14. Can I set the above configuration? (type 'yes' to accept): yes
  15. #输入yes
  16. >>> Nodes configuration updated
  17. >>> Assign a different config epoch to each node
  18. >>> Sending CLUSTER MEET messages to join the cluster
  19. Waiting for the cluster to join..
  20. >>> Performing Cluster Check (using node 127.0.0.1:7000)
  21. M: d2a7c90c060f1af1a3455c0f7fe125c2381f6e85 127.0.0.1:7000
  22. slots:0-5460 (5461 slots) master
  23. 0 additional replica(s)
  24. M: 8869a51897e65ae056eda34f7c46f34c0b564b4a 127.0.0.1:7001
  25. slots:5461-10922 (5462 slots) master
  26. 0 additional replica(s)
  27. M: 3317575b248992940744b22438ac7dbaab4da258 127.0.0.1:7002
  28. slots:10923-16383 (5461 slots) master
  29. 0 additional replica(s)
  30. [OK] All nodes agree about slots configuration.
  31. >>> Check for open slots...
  32. >>> Check slots coverage...
  33. [OK] All 16384 slots covered.
  34. #出现两个OK即代表成功

查看集群的信息

  1. [root@ZhangSiming ruby-2.2.7]# redis-cli -p 7000 cluster nodes
  2. 8869a51897e65ae056eda34f7c46f34c0b564b4a 127.0.0.1:7001@17001 master - 0 1549808213336 2 connected 5461-10922
  3. 3317575b248992940744b22438ac7dbaab4da258 127.0.0.1:7002@17002 master - 0 1549808214342 3 connected 10923-16383
  4. d2a7c90c060f1af1a3455c0f7fe125c2381f6e85 127.0.0.1:7000@17000 myself,master - 0 1549808213000 1 connected 0-5460
  5. #集群有三个节点

测试访问:

  1. #本地访问
  2. [root@ZhangSiming ruby-2.2.7]# redis-cli -c -p 7000
  3. 127.0.0.1:7000> set zhangsiming 111
  4. -> Redirected to slot [14612] located at 127.0.0.1:7002
  5. OK
  6. #在cluster集群中创建一个键值,被随机分配到了7002端口服务器上存储
  7. 127.0.0.1:7002> exit
  8. [root@ZhangSiming ruby-2.2.7]# redis-cli -c -p 7001 get zhangsiming
  9. "111"
  10. [root@ZhangSiming ruby-2.2.7]# redis-cli -p 7001 get zhangsiming
  11. (error) MOVED 14612 127.0.0.1:7002
  12. #本地访问集群(-c)可以访问到,除了7002,其他端口普通访问服务器不能看到键值
  13. #远程访问
  14. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -c -p 7000 get zhangsiming
  15. Could not connect to Redis at 127.0.0.1:7002: Connection refused
  16. Could not connect to Redis at 127.0.0.1:7002: Connection refused
  17. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -c -p 7001 get zhangsiming
  18. Could not connect to Redis at 127.0.0.1:7002: Connection refused
  19. Could not connect to Redis at 127.0.0.1:7002: Connection refused
  20. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -c -p 7002 get zhangsiming
  21. "111"
  22. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -p 7002 get zhangsiming
  23. "111"
  24. #除了7002服务器,其余全部不能访问。事实上因为是创建的本地cluster集群,所有远程的服务器都不能访问应该。至于访问7002端口可以访问到,只是因为数据本身就存在了7002端口服务器上

1.4使用redis-trib.rb创建远程的的cluster,并测试

  1. [root@ZhangSiming ruby-2.2.7]# rm -rf /data/redis-cluster/7000/nodes.conf
  2. [root@ZhangSiming ruby-2.2.7]# rm -rf /data/redis-cluster/7001/nodes.conf
  3. [root@ZhangSiming ruby-2.2.7]# rm -rf /data/redis-cluster/7002/nodes.conf
  4. #删除Redis-cluster的配置文件,就删除了集群
  5. [root@ZhangSiming ruby-2.2.7]# redis-cli -p 7001 shutdown
  6. [root@ZhangSiming ruby-2.2.7]# redis-cli -p 7000 shutdown
  7. [root@ZhangSiming ruby-2.2.7]# redis-cli -p 7002 shutdown
  8. [root@ZhangSiming ruby-2.2.7]# redis-server /data/redis-cluster/7002/redis.conf
  9. [root@ZhangSiming ruby-2.2.7]# redis-server /data/redis-cluster/7001/redis.conf
  10. [root@ZhangSiming ruby-2.2.7]# redis-server /data/redis-cluster/7000/redis.conf
  11. #重启Redis
  12. [root@ZhangSiming ruby-2.2.7]# /usr/local/redis/bin/redis-trib.rb create 192.168.17.128:7000 192.168.17.128:7001 192.168.17.128:7002
  13. #以远程的方式创建Redis-cluster集群
  14. >>> Creating cluster
  15. >>> Performing hash slots allocation on 3 nodes...
  16. Using 3 masters:
  17. 192.168.17.128:7000
  18. 192.168.17.128:7001
  19. 192.168.17.128:7002
  20. M: 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 192.168.17.128:7000
  21. slots:0-5460 (5461 slots) master
  22. M: d5d6028eb3642590d72449f9fd050790cf4adb6b 192.168.17.128:7001
  23. slots:5461-10922 (5462 slots) master
  24. M: aaa7721d29411e686a3eb0bbe64b92e80875f7e2 192.168.17.128:7002
  25. slots:10923-16383 (5461 slots) master
  26. Can I set the above configuration? (type 'yes' to accept): yes
  27. >>> Nodes configuration updated
  28. >>> Assign a different config epoch to each node
  29. >>> Sending CLUSTER MEET messages to join the cluster
  30. Waiting for the cluster to join...
  31. >>> Performing Cluster Check (using node 192.168.17.128:7000)
  32. M: 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 192.168.17.128:7000
  33. slots:0-5460 (5461 slots) master
  34. 0 additional replica(s)
  35. M: d5d6028eb3642590d72449f9fd050790cf4adb6b 192.168.17.128:7001
  36. slots:5461-10922 (5462 slots) master
  37. 0 additional replica(s)
  38. M: aaa7721d29411e686a3eb0bbe64b92e80875f7e2 192.168.17.128:7002
  39. slots:10923-16383 (5461 slots) master
  40. 0 additional replica(s)
  41. [OK] All nodes agree about slots configuration.
  42. >>> Check for open slots...
  43. >>> Check slots coverage...
  44. [OK] All 16384 slots covered.
  45. #创建成功

测试访问:

  1. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 127.0.0.1 -c -p 7000 set zhang 66
  2. OK
  3. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 127.0.0.1 -c -p 7001 set zhang 66
  4. OK
  5. #本地可以访问
  6. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -c -p 7000 get zhang
  7. "66"
  8. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -c -p 7001 get zhang
  9. "66"
  10. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -c -p 7002 get zhang
  11. "66"
  12. #远程也可以访问
  13. #大量写入数据到Redis-cluster集群
  14. [root@ZhangSiming ruby-2.2.7]# for line in `seq -w 10000`;do redis-cli -h 192.168.17.128 -p 7000 -c set key3_${line} value_${line};done
  15. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -p 7000 info Keyspace
  16. # Keyspace
  17. db0:keys=3337,expires=0,avg_ttl=0
  18. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -p 7001 info Keyspace
  19. # Keyspace
  20. db0:keys=3354,expires=0,avg_ttl=0
  21. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.128 -p 7002 info Keyspace
  22. # Keyspace
  23. db0:keys=3310,expires=0,avg_ttl=0
  24. #可见,几乎是平均存储的,权重相同

二、Redis-cluster集群的故障自动切换

2.1部署Redis-cluster的主从复制

  1. #和master服务器上一样的配置,然后启动slave服务器的三个Redis实例
  2. [root@ZhangSiming ruby-2.2.7]# redis-server /data/redis-cluster/7000/redis.conf
  3. [root@ZhangSiming ruby-2.2.7]# redis-server /data/redis-cluster/7001/redis.conf
  4. [root@ZhangSiming ruby-2.2.7]# redis-server /data/redis-cluster/7002/redis.conf
  5. [root@ZhangSiming ruby-2.2.7]# netstat -antup | grep redis
  6. tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 32109/redis-server
  7. tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 32114/redis-server
  8. tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 32119/redis-server

添加Redis-cluster主从同步认证(在Redis master上操作)

  1. [root@ZhangSiming ruby-2.2.7]# /usr/local/redis/bin/redis-trib.rb add-node --slave 192.168.17.138:7000 192.168.17.128:7000
  2. #添加主从对应关系
  3. >>> Adding node 192.168.17.138:7000 to cluster 192.168.17.128:7000
  4. >>> Performing Cluster Check (using node 192.168.17.128:7000)
  5. M: 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 192.168.17.128:7000
  6. slots:0-5460 (5461 slots) master
  7. 0 additional replica(s)
  8. M: d5d6028eb3642590d72449f9fd050790cf4adb6b 192.168.17.128:7001
  9. slots:5461-10922 (5462 slots) master
  10. 0 additional replica(s)
  11. M: aaa7721d29411e686a3eb0bbe64b92e80875f7e2 192.168.17.128:7002
  12. slots:10923-16383 (5461 slots) master
  13. 0 additional replica(s)
  14. [OK] All nodes agree about slots configuration.
  15. >>> Check for open slots...
  16. >>> Check slots coverage...
  17. [OK] All 16384 slots covered.
  18. Automatically selected master 192.168.17.128:7000
  19. >>> Send CLUSTER MEET to node 192.168.17.138:7000 to make it join the cluster.
  20. Waiting for the cluster to join.
  21. >>> Configure node as replica of 192.168.17.128:7000.
  22. [OK] New node added correctly.
  23. #同理添加剩下两个端口的主从对应

查看Redis-Cluster主从同步状态

  1. [root@ZhangSiming ruby-2.2.7]# redis-cli -p 7000 cluster nodes
  2. 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 192.168.17.128:7000@17000 myself,master - 0 1549810051000 1 connected 0-5460
  3. 39de9ac7abd1e4d06622ecdd7b4cb8070258a59b 192.168.17.138:7001@17001 slave d5d6028eb3642590d72449f9fd050790cf4adb6b 0 1549810049402 2 connected
  4. d5d6028eb3642590d72449f9fd050790cf4adb6b 192.168.17.128:7001@17001 master - 0 1549810051412 2 connected 5461-10922
  5. f63f39b84221052d69c37c398c6743ff9326e214 192.168.17.138:7000@17000 slave 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 0 1549810050000 1 connected
  6. 95839bc0c056879b36d4e3b992938dec546d3aeb 192.168.17.138:7002@17002 slave aaa7721d29411e686a3eb0bbe64b92e80875f7e2 0 1549810050406 3 connected
  7. aaa7721d29411e686a3eb0bbe64b92e80875f7e2 192.168.17.128:7002@17002 master - 0 1549810049000 3 connected 10923-16383
  8. #已成功添加三对主从同步

2.2redis-cluster集群slave从库的读写测试与key的分布

  1. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 192.168.17.138 -c -p 7000
  2. 192.168.17.138:7000> set hahaha 111
  3. -> Redirected to slot [12185] located at 192.168.17.128:7002
  4. OK
  5. 192.168.17.128:7002> get hahaha
  6. "111"
  7. #连接一个远程的从库,我们发现Redis-cluster从库也可以写操作了;这就比普通的redis主从复制好,因为普通的主从复制从库只可以读不可以写

当然,Redis-cluster主从同步的key的分布也是等权重的。

2.2redis-cluster集群主从复制故障转移切换

  1. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 127.0.0.1 -p 7000 shutdown
  2. #关闭.128地址的7000端口master
  3. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 127.0.0.1 -p 7001 cluster nodes
  4. 39de9ac7abd1e4d06622ecdd7b4cb8070258a59b 192.168.17.138:7001@17001 slave d5d6028eb3642590d72449f9fd050790cf4adb6b 0 1549810609000 2 connected
  5. aaa7721d29411e686a3eb0bbe64b92e80875f7e2 192.168.17.128:7002@17002 master - 0 1549810611000 3 connected 10923-16383
  6. d5d6028eb3642590d72449f9fd050790cf4adb6b 192.168.17.128:7001@17001 myself,master - 0 1549810610000 2 connected 5461-10922
  7. f63f39b84221052d69c37c398c6743ff9326e214 192.168.17.138:7000@17000 master - 0 1549810611723 4 connected 0-5460
  8. #.138地址的7000端口提升为了master
  9. 95839bc0c056879b36d4e3b992938dec546d3aeb 192.168.17.138:7002@17002 slave aaa7721d29411e686a3eb0bbe64b92e80875f7e2 0 1549810610718 3 connected
  10. 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 192.168.17.128:7000@17000 master,fail - 1549810559671 1549810557359 1 disconnected
  11. #被我们手动down掉的变为了slave
  12. [root@ZhangSiming ruby-2.2.7]# redis-server /data/redis-cluster/7000/redis.conf
  13. #重新启动.128,7000端口
  14. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 127.0.0.1 -p 7000 cluster nodes
  15. 95839bc0c056879b36d4e3b992938dec546d3aeb 192.168.17.138:7002@17002 slave aaa7721d29411e686a3eb0bbe64b92e80875f7e2 0 1549810732314 3 connected
  16. 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 192.168.17.128:7000@17000 myself,slave f63f39b84221052d69c37c398c6743ff9326e214 0 1549810732000 1 connected
  17. #重启启动后.128本地还是slave,没有自动提升到master
  18. d5d6028eb3642590d72449f9fd050790cf4adb6b 192.168.17.128:7001@17001 master - 0 1549810731309 2 connected 5461-10922
  19. f63f39b84221052d69c37c398c6743ff9326e214 192.168.17.138:7000@17000 master - 0 1549810731000 4 connected 0-5460
  20. aaa7721d29411e686a3eb0bbe64b92e80875f7e2 192.168.17.128:7002@17002 master - 0 1549810732000 3 connected 10923-16383
  21. 39de9ac7abd1e4d06622ecdd7b4cb8070258a59b 192.168.17.138:7001@17001 slave d5d6028eb3642590d72449f9fd050790cf4adb6b 0 1549810733321 2 connected
  22. #需要我们手动切换
  23. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 127.0.0.1 -c -p 7000 cluster failover
  24. OK
  25. #手动切换回来
  26. [root@ZhangSiming ruby-2.2.7]# redis-cli -h 127.0.0.1 -p 7001 cluster nodes
  27. 39de9ac7abd1e4d06622ecdd7b4cb8070258a59b 192.168.17.138:7001@17001 slave d5d6028eb3642590d72449f9fd050790cf4adb6b 0 1549810911340 2 connected
  28. aaa7721d29411e686a3eb0bbe64b92e80875f7e2 192.168.17.128:7002@17002 master - 0 1549810912345 3 connected 10923-16383
  29. d5d6028eb3642590d72449f9fd050790cf4adb6b 192.168.17.128:7001@17001 myself,master - 0 1549810909000 2 connected 5461-10922
  30. f63f39b84221052d69c37c398c6743ff9326e214
  31. #又变回master了,切换成功
  32. 192.168.17.138:7000@17000 slave 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 0 1549810910000 5 connected
  33. 95839bc0c056879b36d4e3b992938dec546d3aeb 192.168.17.138:7002@17002 slave aaa7721d29411e686a3eb0bbe64b92e80875f7e2 0 1549810910000 3 connected
  34. 2ea8eddb9842a2a17e8b150c4c2b41720c82fa93 192.168.17.128:7000@17000 master - 0 1549810910334 5 connected 0-5460

三、分析Redis的所有key和key的大小

运维需求,根据dump.rdb文件分析key和key的大小,通过rdbtools分析工具实现。

  1. [root@ZhangSiming ruby-2.2.7]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  2. % Total % Received % Xferd Average Speed Time Time Time Current
  3. Dload Upload Total Spent Left Speed
  4. 100 1662k 100 1662k 0 0 21158 0 0:01:20 0:01:20 --:--:-- 20303
  5. [root@ZhangSiming ruby-2.2.7]# python get-pip.py
  6. DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
  7. Collecting pip
  8. Downloading https://files.pythonhosted.org/packages/d7/41/34dd96bd33958e52cb4da2f1bf0818e396514fd4f4725a79199564cd0c20/pip-19.0.2-py2.py3-none-any.whl (1.4MB)
  9. 100% |████████████████████████████████| 1.4MB 7.6kB/s
  10. Collecting setuptools
  11. Downloading https://files.pythonhosted.org/packages/d1/6a/4b2fcefd2ea0868810e92d519dacac1ddc64a2e53ba9e3422c3b62b378a6/setuptools-40.8.0-py2.py3-none-any.whl (575kB)
  12. 100% |████████████████████████████████| 583kB 17kB/s
  13. Collecting wheel
  14. Downloading https://files.pythonhosted.org/packages/ff/47/1dfa4795e24fd6f93d5d58602dd716c3f101cfd5a77cd9acbe519b44a0a9/wheel-0.32.3-py2.py3-none-any.whl
  15. Installing collected packages: pip, setuptools, wheel
  16. Successfully installed pip-19.0.2 setuptools-40.8.0 wheel-0.32.3
  17. [root@ZhangSiming ruby-2.2.7]# which pip
  18. /usr/bin/pip
  19. #根据官网提示安装pip
  20. [root@ZhangSiming ruby-2.2.7]# pip install rdbtools
  21. #使用安装的pip安装rdb工具
  22. DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
  23. Collecting rdbtools
  24. Downloading https://files.pythonhosted.org/packages/16/2d/0389de4b615dfe456715444d2c56ff538cf9bf5b1df87ac2ab558064e52d/rdbtools-0.1.14.tar.gz
  25. Collecting redis (from rdbtools)
  26. Downloading https://files.pythonhosted.org/packages/f1/19/a0282b77c23f9f9dbcc6480787a60807c78a45947593a02dbf026636c90d/redis-3.1.0-py2.py3-none-any.whl (63kB)
  27. 100% |████████████████████████████████| 71kB 212kB/s
  28. Building wheels for collected packages: rdbtools
  29. Building wheel for rdbtools (setup.py) ... done
  30. Stored in directory: /root/.cache/pip/wheels/a2/82/f1/0583362b80af95f5b6f4aa81f7d163d06fd467c9094bdb0ee5
  31. Successfully built rdbtools
  32. Installing collected packages: redis, rdbtools
  33. Successfully installed rdbtools-0.1.14 redis-3.1.0
  34. [root@ZhangSiming ruby-2.2.7]# which rdb
  35. /usr/bin/rdb
  36. #安装成功

使用rdbtools工具分析key及key的大小

  1. [root@ZhangSiming ruby-2.2.7]# rdb -c memory /data/redis-cluster/7000/dump.rdb > /root/memory.csv
  2. WARNING: python-lzf package NOT detected. Parsing dump file will be very slow unless you install it. To install, run the following command:
  3. pip install python-lzf
  4. #把key的信息导入到/root/memory.csv中方便分析
  5. [root@ZhangSiming ruby-2.2.7]# cat /root/memory.csv | head
  6. database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
  7. 0,string,key3_06000,72,string,11,11,
  8. 0,string,key3_01610,72,string,11,11,
  9. 0,string,key3_08476,72,string,11,11,
  10. 0,string,key3_02475,72,string,11,11,
  11. 0,string,key3_00892,72,string,11,11,
  12. 0,string,key3_03354,72,string,11,11,
  13. 0,string,key3_00036,72,string,11,11,
  14. 0,string,key3_05125,72,string,11,11,
  15. 0,string,key3_00002,72,string,11,11,
  16. [root@ZhangSiming ruby-2.2.7]# cat /root/memory.csv | tr ',' ' ' | sort -k4n | head
  17. database type key size_in_bytes encoding num_elements len_largest_element expiry
  18. 0 string key3_00002 72 string 11 11
  19. 0 string key3_00003 72 string 11 11
  20. 0 string key3_00006 72 string 11 11
  21. 0 string key3_00007 72 string 11 11
  22. 0 string key3_00010 72 string 11 11
  23. 0 string key3_00014 72 string 11 11
  24. 0 string key3_00018 72 string 11 11
  25. 0 string key3_00020 72 string 11 11
  26. 0 string key3_00021 72 string 11 11
  27. #优化排版,分析key
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注