前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis手工分片

redis手工分片

作者头像
用户1148526
发布2020-03-25 09:56:42
5770
发布2020-03-25 09:56:42
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

目录

一、redis环境

二、redis手工分片步骤

1. 配置级联复制

2. 去掉老哨兵监控

3. 停止新实例从老实例的复制

4. 添加新哨兵监控

5. 重启新哨兵

6. 添加老哨兵监控

7. 重启老哨兵

三、注意事项


随着数据量越来越大,一个redis实例可能需要分成多个以形成数据分片。此时通常可以采取两种方式操作:一是启用cluster模式自动完成数据分片;二是手工分片,即配置需要分片redis实例的副本,再修改应用程序按一定方式(如取模等)访问不同redis实例。cluster方式的配置可以参考“初学乍练redis:Redis 5.0.3单实例数据迁移到Cluster”。本文说明第二种方式的具体操作步骤。

一、redis环境

假设现有三台物理机192.168.1.36、192.168.1.37、192.168.1.38,分别配置为redis一主两从,通过哨兵进行访问。192.168.1.36为主实例,端口为20007,master name为redis7。三台机器上分别启动一个哨兵进程,端口为30001。从哨兵查看复制信息如下:

代码语言:javascript
复制
[root~]#sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.36 -p 30001 info | grep redis7
master1:name=redis7,status=ok,address= 192.168.1.36:20007,slaves=2,sentinels=3
[root~]#sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.37 -p 30001 info | grep redis7
master1:name=redis7,status=ok,address= 192.168.1.36:20007,slaves=2,sentinels=3
[root~]#sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.38 -p 30001 info | grep redis7
master1:name=redis7,status=ok,address= 192.168.1.36:20007,slaves=2,sentinels=3

目标是将现有的一组redis(一主两从)拆分为四组(每组为一主两从),由应用程序实现数据分片策略。新增的三组redis实例所在物理机192.168.1.39、192.168.1.40、192.168.1.41,并且三台机器上分别启动一个哨兵进程,依然是通过哨兵进行访问。

二、redis手工分片步骤

1. 配置级联复制

(1)在192.168.1.39、192.168.1.40、192.168.1.41上配置三组标准一主两从redis复制,39为主,端口分别是20001、20002、20003。

代码语言:javascript
复制
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 20001 -a 123456 slaveof 192.168.1.39 20001
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 20002 -a 123456 slaveof 192.168.1.39 20002
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 20003 -a 123456 slaveof 192.168.1.39 20003

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20001 -a 123456 slaveof 192.168.1.39 20001
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20002 -a 123456 slaveof 192.168.1.39 20002
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20003 -a 123456 slaveof 192.168.1.39 20003

(2)配置为老实例的slave,进行数据复制

代码语言:javascript
复制
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20001 -a 123456 slaveof 192.168.1.36 20007
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20002 -a 123456 slaveof 192.168.1.36 20007
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20003 -a 123456 slaveof 192.168.1.36 20007

此步完成后形成一个级联复制,192.168.1.36:20007具有5个slave,分别是192.168.1.37:20007、192.168.1.38:20007、192.168.1.39:20001、192.168.1.39:20002、192.168.1.39:20003。而192.168.1.39上三个redis实例(20001、20002、20003)又分别带有192.168.1.40、192.168.1.42两个slave(端口同192.168.1.39)。可以使用以下命令查看各个实例上的键数:

代码语言:javascript
复制
# 查看key数量,在192.168.1.39执行
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.36 -p 20007 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.37 -p 20007 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.38 -p 20007 -a 123456 info | grep db0:keys=

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20001 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20002 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20003 -a 123456 info | grep db0:keys=

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 20001 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 20002 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 20003 -a 123456 info | grep db0:keys=

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20001 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20002 -a 123456 info | grep db0:keys=
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20003 -a 123456 info | grep db0:keys=

2. 去掉老哨兵监控

代码语言:javascript
复制
# 在192.168.1.36执行
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.36 -p 30001 sentinel remove redis7
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.37 -p 30001 sentinel remove redis7
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.38 -p 30001 sentinel remove redis7

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.36 -p 30001 info | grep redis7
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.37 -p 30001 info | grep redis7
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.38 -p 30001 info | grep redis7

3. 停止新实例从老实例的复制

代码语言:javascript
复制
#  在192.168.1.39执行
cat ~/remove_repl.txt | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20003 -a 123456
cat ~/remove_repl.txt | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20004 -a 123456
cat ~/remove_repl.txt | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 20005 -a 123456

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20003 -a 123456 info replication
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20004 -a 123456 info replication
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 20005 -a 123456 info replication

~/remove_repl.txt文件内容:

代码语言:javascript
复制
slaveof no one
config rewrite
info replication

4. 添加新哨兵监控

代码语言:javascript
复制
# 在192.168.1.39执行
cat /home/redis/tmp_sentinel_monitor | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 30001
cat /home/redis/tmp_sentinel_monitor | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 30001
cat /home/redis/tmp_sentinel_monitor | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 30001

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.39 -p 30001 info | grep master
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.40 -p 30001 info | grep master
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.41 -p 30001 info | grep master

/home/redis/tmp_sentinel_monitor文件内容:

代码语言:javascript
复制
sentinel monitor redis1  192.168.1.39 20001 2
sentinel set redis3 auth-pass 123456
sentinel set redis3 down-after-milliseconds 5000
sentinel set redis3 failover-timeout 10000

sentinel monitor redis2  192.168.1.39 20002 2
sentinel set redis4 auth-pass 123456
sentinel set redis4 down-after-milliseconds 5000
sentinel set redis4 failover-timeout 10000

sentinel monitor redis3  192.168.1.39 20003 2
sentinel set redis5 auth-pass 123456
sentinel set redis5 down-after-milliseconds 5000
sentinel set redis5 failover-timeout 10000

5. 重启新哨兵

代码语言:javascript
复制
# 分别在192.168.1.41、192.168.1.40、192.168.1.39执行
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -p 30001 shutdown
sudo -u redis /home/redis/redis-5.0.3/src/redis-sentinel /home/redis/sentinel/sentinel.conf > /home/redis/sentinel/sentinel.log 2>&1 &
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -p 30001 info | grep master

6. 添加老哨兵监控

代码语言:javascript
复制
# 在192.168.1.36执行
cat /home/redis/tmp_sentinel_monitor | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.36 -p 30001
cat /home/redis/tmp_sentinel_monitor | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.37 -p 30001
cat /home/redis/tmp_sentinel_monitor | sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.38 -p 30001

sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.36 -p 30001 info | grep redis7
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.37 -p 30001 info | grep redis7
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -h  192.168.1.38 -p 30001 info | grep redis7

/home/redis/tmp_sentinel_monitor文件内容:

代码语言:javascript
复制
sentinel monitor redis7  192.168.1.36 20007 2
sentinel set redis7 auth-pass 123456
sentinel set redis7 down-after-milliseconds 5000
sentinel set redis7 failover-timeout 10000

7. 重启老哨兵

代码语言:javascript
复制
# 在192.168.1.38、192.168.1.37、192.168.1.36执行
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -p 30001 shutdown
sudo -u redis /home/redis/redis-5.0.3/src/redis-sentinel /home/redis/sentinel/sentinel.conf > /home/redis/sentinel/sentinel.log 2>&1 &
sudo -u redis /home/redis/redis-5.0.3/src/redis-cli -p 30001 info

三、注意事项

  • 哨兵实例本身不能加密码,否则应用程序不能正常连接。
  • 不要在级联复制的中间层master上加哨兵监控,否则通过哨兵对顶层master的访问会出问题。
  • 在去掉中间层master对上层的复制时,需要先去掉哨兵对顶层master的监控,否则即使在中间层master实例上执行了slaveof no one,依然会保持顶层master与中间层master的主从关系。
  • 为保证哨兵工作正常,避免出现+sdown问题,在更改哨兵配置后需要重启哨兵进程。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、redis环境
  • 二、redis手工分片步骤
    • 1. 配置级联复制
      • 2. 去掉老哨兵监控
        • 3. 停止新实例从老实例的复制
          • 4. 添加新哨兵监控
            • 5. 重启新哨兵
              • 6. 添加老哨兵监控
                • 7. 重启老哨兵
                • 三、注意事项
                相关产品与服务
                云数据库 Redis
                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档