一、背景
由于当下项目的日益增长的数据量,单机Redis已经远远不能满足我们的要求。考虑转成集群,但是直接在服务器中搭建Redis集群的话,EC2挂掉则Redis也会随之挂掉,耦合性太强。所以将Redis相关的服务全部抽取在单独的服务器上或者直接使用厂商提供的Redis服务。目前服务器使用的是Amazon,Redis随之就可以选择Amazon MemoryDB 的产品。业务对数据也有持久化要求,最终选择Amazon MemoryDB for Redis作为我们的替代方案。
二、基本介绍
MemoryDB 与 Redis(一种热门的开源数据存储)兼容 ,使您能够使用他们目前已使用的同样灵活友好的 Redis 数据结构、API 和命令来快速构建应用程序。借助 MemoryDB,您的所有数据都存储在内存中,从而使您能够实现微秒级读取和个位数毫秒级写入延迟和高吞吐量。MemoryDB 还使用多可用区事务日志跨多个可用区 (AZ) 持久存储数据,以实现快速失效转移、数据库恢复和节点重新启动。
MemoryDB 兼具内存中性能和多可用区持久性,可用作微服务应用程序的高性能主数据库,无需单独管理缓存和耐用数据库。
参考文档:
- https://docs.aws.amazon.com/zh_cn/memorydb/
- https://aws.amazon.com/cn/blogs/china/comparison-of-amazon-memorydb-and-amazon-elasticache/
三、集群创建
- 进入产品控制台,点击菜单栏中的集群。进入集群页面,点击创建集群
- 填写基本信息
- 进入高级设置
安全组代表当前集群访问的开放情况
加密选择TLS,安全新更高
ACL中是一组用户列表,配置后访问只能通过该列表中的username&password访问。
• 确认信息,完成创建。等状态变为绿色即为创建成功。
官方文档:https://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/getting-started.html
四、连接集群
内部访问
根据官方文档介绍,MemoryDB for Redis的设计是专门为通过Amazon EC2实例进行访问。可以从相同的VPC中的Amazon EC2实例访问MemoryDB节点。要访问数据,可以使用具有TLS/SSL的redis-cli
# 安装redis
sudo yum install redis6 -y
# 连接redis集群[如果开了ssl传输,则需要加上--tls]
redis6-cli -h xxx.c7uerl.clustercfg.memorydb.xxx.amazonaws.com -p 6379 -c 【--tls】
连接成功后就可以访问了。如果集群有ACL列表,则需要 AUTH username password
授权后才可以进行访问
外部连接
如果没有开启SSL加密,则可以使用NLP转发的形式进行连接。文档参考:https://www.jianshu.com/p/902bfdf74b47
如果开启了SSL加密,则可以使用stunnel搭建SSL隧道,将其转化为EC2本地的进程,从而进行连接。文档参考:https://www.jianshu.com/p/5d4a8699539b
在连接时需要同时使用SSH+redis的连接信息。
项目配置
相关的yml文件如下:
# RedisTemplate相关配置
spring:
redis:
cluster:
nodes:
- xxx-0001-001.test.c7uerl.memorydb.us-west-1.amazonaws.com:6379
- xxx-0001-002.test.c7uerl.memorydb.us-west-1.amazonaws.com:6379
max-redirects: 3
ssl: true
username: leo
password: LXYA.0123456789123456
# Redisson配置
redis:
# redisson的配置。每个服务可以自己的配置文件中覆盖此选项。
redisson:
# 如果该值为false,系统将不会创建RedissionClient的bean。
enabled: true
# mode的可用值为,single/cluster/sentinel/master-slave
#mode: single
mode: cluster
# 如果启用了SSL,则需要rediss://开头
address: rediss://xxx-0001-001.test.c7uerl.memorydb.us-west-1.amazonaws.com:6379,rediss://xxx-0001-002.test.c7uerl.memorydb.us-west-1.amazonaws.com:6379
# single: 单机模式
# address: redis://localhost:6379
# cluster: 集群模式
# 每个节点逗号分隔,同时每个节点前必须以redis://开头。
# address: redis://localhost:6379,redis://localhost:6378,...
# sentinel:
# 每个节点逗号分隔,同时每个节点前必须以redis://开头。
# address: redis://localhost:6379,redis://localhost:6378,...
# master-slave:
# 每个节点逗号分隔,第一个为主节点,其余为从节点。同时每个节点前必须以redis://开头。
# address: redis://localhost:6379,redis://localhost:6378,...
# address: redis://192.168.174.128:6381
# 链接超时,单位毫秒。
timeout: 6000
# 单位毫秒。分布式锁的超时检测时长。
# 如果一次锁内操作超该毫秒数,或在释放锁之前异常退出,Redis会在该时长之后主动删除该锁使用的key。
lockWatchdogTimeout: 60000
username: leo
# redis 密码,空可以不填。
password: LXYA.0123456789123456
pool:
# 连接池数量。
poolSize: 20
# 连接池中最小空闲数量。
minIdle: 5
另外集群环境下,配置类也需要对应的修改