redis-cluster集群安装

背景

构建汉城APP的时候,大量使用到了Redis缓存。现在缓存单机数据已经破G了。虽说对于现有用户量毫无压力。但考虑到现在时间多多(目前全职维护该项目中),在搞完了Mysql读写分离和mongo的高可用之后。准备对Redis下手了
先说说redis-cluster是个什么东西,这玩意实现了两个功能,第一个就是高可用,啥是高可用。就是服务除了问题,用户无感知。还有一个功能就是实现了水平扩展,那啥是水平扩展呢,就是扩内存。假如你的单台redis数据已经快撑爆你的内存了,你要么选择升级你的内存,要么就像这样多加入其他机子分担压力咯。

安装步骤

不说废话了,直接老规矩。拿着测试服务器就开搞,反正出了问题也无所谓。

在这里插入图片描述
你也可以进入src目录下启动看看。完了停下来就可以了

# 启动
./redis-server /redis-cluster/config/redis.conf
# 停止
./redis-cli -p 6379 shutdown
  • 创建config配置文件6份。三个主节点,3个从节点(并跑起来)
port 7001
daemonize yes
pidfile /root/redis-server/pidfile/7001.pid
dir /home/redis-server/data/7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 10100
appendonly yes
  • 随意找一台机器,进入redis的src目录下执行集群命令
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1 
  • 登陆集群环境(登陆任意一台节点即可)
./redis-cli -c -h 127.0.0.1 -p 7001

其他常用命令

  • 查看集群状态信息cluster info
  • 查看集群节点cluster nodes
  • 检查集群状态./redis-cli --cluster check 127.0.0.1:7001
  • 修复集群(集群主节点7004挂掉了,并且没有备份节点补充,则使用该命令让solt重新分配。使用该命令挂掉的节点不会恢复,数据丢失。因为redis所有的数据都在内存中)
./redis-cli --cluster fix 127.0.0.1:7001
  • 学习 ./redis-trib.rb(输入该命令即可)
    集群维护

  • 增加主节点(新增redis-7007,并启动),输入如下命令(其中第一个为刚启动的redis,第二个为已知存在节点)完成后使用cluster nodes查看节点(cluster nodes),获取7007的节点id(382634a4025778c040b7213453fd42a709f79e28)

./redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7001
  • 节点加入成功后需要给分配solt(下面节点为任意主节点即可)
./redis-trib.rb reshard 127.0.0.1:7001

# 提示一 你希望多少个槽移动到新的节点上,可以自己设置,比如200个槽
How many slots do you want to move (from 1 to 16384)? 200
# 提示二 需要把这200个slot槽移动到那个节点上去(需要指定节点id)  并且下个提示是输入all。表示从所有主节点(7001 7002 7003)中分别抽取相应的槽数(一共为200个槽到指定的新节点中,并且会打印执行分片的计划)
What is the receiving node ID? 382634a4025778c040b7213453fd42a709f79e28

Please enter all the source node IDs.

  Type 'all' to use all the nodes as source nodes for the hash slots.

  Type 'done' once you entered all the source nodes IDs.

Source node #1:all
#提示三 输入yes确认开始执行分片任务 
Do you want to proceed with the proposed reshard plan (yes/no)? yes
# 完成后可以看一下集群状态
  • 增加从节点(新增redis-7008,并启动),输入如下命令(其中第一个为刚启动的redis,第二个为已知存在节点)
./redis-trib.rb add-node 127.0.0.1:7008 127.0.0.1:7001
# 完成后输入cluster nodes查看状态 会发现他也是master节点,我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个

# 首先需要登录新加的7008节点的客户端,然后使用集群命令进行操作,把当前的7008(slave)节点指定到一个主节点下(7007下)

# 登陆7008
/redis-cli -c -h 127.0.0.1 -p 7008
#指定主节点(需要知道主节点ID)
cluster replicate 382634a4025778c040b7213453fd42a709f79e28

#完成后可以查看节点状态
  • 删除从节点7008./redis-trib.rb del-node 127.0.0.1:7008
  • 删除主节点7007(删除前需要将数据移动到其他节点上)
./redis-trib.rb reshard 127.0.0.1:7007
M: 382634a4025778c040b7213453fd42a709f79e28 192.168.1.171:7007
   slots:0-65,5461-5527,10923-10988 (199 slots) master
   0 additional replica(s)
#提示一 你想移动多少个solt(加入的时候输入了200 移动的时候实际上只有199.具体输入命令的时候提示有个数)
How many slots do you want to move (from 1 to 16384)? 199

#提示二 你想移动到那台实例上(输入ID,下面的ID为7001的id)
What is the receiving node ID? 614d0def75663f2620b6402a017014b57c912dad

#提示三 数据来源于哪里(可以输入all,也可以输入具体实例。我们下面输入的为7007实例,并且7007上只有199个solt,我们的意思就是要将7007上的缓存数据全部转移到7001上)
Source node #1:382634a4025778c040b7213453fd42a709f79e28
#提示四 这里直接输入done 开始生成迁移计划
Source node #2:done
#提示五 确认计划并开始执行
Do you want to proceed with the proposed reshard plan (yes/no)? Yes
#完成后我们可以使用命令查看集群状态确认数据是否完全移除完毕
#检查确认移除完毕后,我们最后移除节点(可以不加实例ID)
./redis-trib.rb del-node 127.0.0.1:7007 382634a4025778c040b7213453fd42a709f79e28
# 最后:我们查看集群状态,一切还原为最初始状态啦!OK 结束!

spring-boot访问Redis集群

redis:
    cluster:
      nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003,127.0.0.1:7004,127.0.0.1:7005,127.0.0.1:7006
    timeout: 6000ms
    password: 123456
    database: 0
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0
      cluster:
	    refresh:
	      adaptive: true
	      period: 30000    

ps:由于我们这里6个节点都配置了,在java访问的时候会随机抽取一个实例进行数据访问和写入。当写入时,走到从节点或者不正确的主节点。redis会告诉它从新走,插入正确的节点。这样就保证了写入的问题。读取的原理一样。当我们有一台挂了,只要集群不挂,并不影响使用。因此在做扩容时,为了代码改动小,可以先把从节点搞死,作为主节点搞上去。再给主节点分配从节点。之后使用微服务cloud的动态刷新机制修改配置文件。将用户对扩容操作的感知降到最低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值