基于redis6搭建集群

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 基于redis6搭建集群

前言

  • 系统版本:CentOS 7
  • redis版本:redis6.2.4,官方tar.gz包
  • 两台服务器:
  • 172.50.11.11
  • 端口7002、7004、7006
  • 172.50.12.11
  • 端口7001、7003、7005

(PS:基于docker搭建redis cluster可参考 博客园 - 使用docker-compose搭建redis-cluster集群

编译安装redis

# 提示缺什么依赖就装什么依赖
yum install -y gcc gcc-c++ tcl make
tar xf redis-6.2.4.tar.gz
cd redis-6.2.4
make
make install PREFIX=/home/web/redis
# 测试
make test

make test常见错误

  • You need tcl 8.5 or newer in order to run the Redis test
yum install -y tcl
  • NOREPLICAS Not enough good slaves to write
vim tests/integration/replication-2.tcl
# 增加after的值,比如10000
# 改了后如果还是报错并且直接停止测试,可以再执行一次make test
  • Slave should be able to synchronize with the master...
# 再执行一次make test

创建redis配置环境

cd /home/web/redis
mkdir -p ./nodes/redis700{1,2,3,4,5,6}/{bin,etc,var}
for i in `seq 1 6`;do cp ./bin/* ./nodes/redis700${i}/bin ;done

编辑redis.conf,内容如下:

# 绑定的服务器ip,即其他服务访问redis使用的ip
bind 172.50.12.11
# 服务端口
port 7001
# redis服务密码
requirepass 123456
# master节点认证密码
masterauth 123456
# 后台运行
daemonize yes
# 关闭保护模式
protected-mode no
# 开启集群
cluster-enabled yes
# 设置请求超时时间,默认为15秒,可以自行修改
cluster-node-timeout 15000
# aof日志开启,会每次进行写操作都记录一条日志
appendonly yes
# cluster-config-file
cluster-config-file nodes_7001.conf
# pidfile
pidfile /var/run/redis-server-7001.pid
# logfile
logfile /home/web/redis/nodes/redis7001/var/redis.log
# 用来描述”在多少秒期间至少多少个变更操作”触发snapshot,snapshot最终将生成新的dump.rdb文件,例如save 300 1表示5分钟内至少一个key变更,触发snapshot
save 900 9999999999
save 300 9999999999
save 60 9999999999
# dbfilename
dbfilename dump.rdb
# dir
dir /home/web/redis/nodes/redis7001/var
# 60秒自动释放连接
tcp-keepalive 60
# 复制对应的master(哨兵模式从节点配置、主节点不需要配置)
maxmemory 10GB
maxmemory-policy volatile-ttl
appendonly no

复制redis.conf:

# 复制
for i in `seq 1 6`;do cp ./redis.conf ./nodes/redis700${i}/etc ;done
# 修改端口
for i in `seq 1 6`;do sed -i "s/7001/700${i}/g" ./nodes/redis700${i}/etc/redis.conf ;done

将/home/web/redis/nodes目录拷贝到另一台服务器,用sed命令批量改一下redis.conf文件中bind的IP地址。

启动

172.50.12.11上执行:

/home/web/redis/nodes/redis7001/bin/redis-server /home/web/redis/nodes/redis7001/etc/redis.conf
/home/web/redis/nodes/redis7003/bin/redis-server /home/web/redis/nodes/redis7003/etc/redis.conf
/home/web/redis/nodes/redis7005/bin/redis-server /home/web/redis/nodes/redis7005/etc/redis.conf

172.50.11.11上执行:

/home/web/redis/nodes/redis7002/bin/redis-server /home/web/redis/nodes/redis7002/etc/redis.conf
/home/web/redis/nodes/redis7004/bin/redis-server /home/web/redis/nodes/redis7004/etc/redis.conf
/home/web/redis/nodes/redis7006/bin/redis-server /home/web/redis/nodes/redis7006/etc/redis.conf

创建集群

注意根据实际情况修改密码、IP、端口

/home/web/redis/bin/redis-cli -a 123456 --cluster create 172.50.12.11:7001 172.50.11.11:7002 172.50.12.11:7003 172.50.11.11:7004 172.50.12.11:7005 172.50.11.11:7006 --cluster-replicas 1
  • --cluster-replicas 1表示一个主节点配置一个从节点

创建集群后会自动分配主从关系和槽位

验证状态

验证slave状态

/home/web/redis/bin/redis-cli -a 123456 -h 172.50.11.11 -p 7006
# 在redis控制台执行 info replication

如果role为slave ,确认master_link_statusup

验证master状态

/home/web/redis/bin/redis-cli -a 123456 -h 172.50.12.11 -p 7001
# 在redis控制台执行 info replication

如果rolemaster,查看是否有类似slave0:ip=172.50.11.11,port=7006,state=online,offset=1400,lag=1的信息。

验证集群状态

/home/web/redis/bin/redis-cli -a 123456 -h 172.50.12.11 -p 7001
# 在redis控制台执行 cluster info

结果应该类似下面这样:

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1074
cluster_stats_messages_pong_sent:1054
cluster_stats_messages_sent:2128
cluster_stats_messages_ping_received:1049
cluster_stats_messages_pong_received:1074
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2128

或者在终端执行:

/home/web/redis/bin/redis-cli -a 123456 --cluster check  172.50.12.11:7001

查看集群node对应关系

redis控制台执行:

cluster nodes

后期维护

增加节点和删除节点会涉及到已有的槽位重新分配及数据迁移。

添加节点

# 配置模板
redis-cli -a 123456 --cluster add-node new_host:new_port existing_master_host:existing_master_port

假设新加两个节点:172.50.13.11:7007(主)和172.50.13.11:7008(从),两个节点均已启动,已有集群的其中一个主节点为172.50.12.11:7001

# 添加节点
redis-cli -a 123456 --cluster add-node 172.50.13.11:7007 172.50.12.11:7001

新加的节点没有被分配的槽位,需要重新分槽

redis-cli -a 123456 --cluster reshard 172.50.13.11:7007
# 提示how many slots do you want to move,可以输入4096,即16383 / 4 的约数
# 提示 waht is the receiving node id,输入172.50.13.11:7007的node id
# 提示 source node,输入 all,表示从所有redis节点中分配槽位

添加节点时,默认为主节点,可以手动设置为从节点:

redis-cli -a 123456 --cluster add-node 172.50.13.11:7008 172.50.12.11:7001

登录到新节点:

redis-cli -a 123456 -h 172.50.13.11 -p 7008

获取master的id,比如172.50.13.11:7007的id为qwertyuiop12345

# 查看节点id
cluster nodes
# 配置为172.50.13.11:7007的从节点
cluster replication qwertyuiop12345

删除节点

删除节点就是添加节点的逆操作,先重新分配槽位,再删节点。

登录非被删节点的一个master节点。

提示source node的时候填需要被删除节点的node id,然后输入done。

添加节点为add-node,删除为del-node

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
3月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
126 0
|
5月前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
121 4
|
5月前
|
监控 NoSQL 算法
手把手教你如何搭建redis集群(二)
手把手教你如何搭建redis集群(二)
387 1
|
5月前
|
存储 NoSQL 容灾
手把手教你如何搭建redis集群(一)
手把手教你如何搭建redis集群(一)
207 1
|
4月前
|
存储 NoSQL 算法
Redis 集群模式搭建
Redis 集群模式搭建
92 5
|
4月前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
3月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
133 0
|
4月前
|
缓存 NoSQL Java
Redis Spring配置集群
【7月更文挑战第5天】
77 10