Amazon MemoryDB for Redis的探索和实践

发布于:2024-04-16 ⋅ 阅读:(167) ⋅ 点赞:(0)

一、背景

由于当下项目的日益增长的数据量,单机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/

三、集群创建

  • 进入产品控制台,点击菜单栏中的集群。进入集群页面,点击创建集群

图片8

  • 填写基本信息

图片9

  • 进入高级设置

安全组代表当前集群访问的开放情况

加密选择TLS,安全新更高

ACL中是一组用户列表,配置后访问只能通过该列表中的username&password访问。

图片4

• 确认信息,完成创建。等状态变为绿色即为创建成功。

图片5

官方文档: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的连接信息。

image-20240415211626501

项目配置

相关的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

另外集群环境下,配置类也需要对应的修改

image-20240415211854920


网站公告

今日签到

点亮在社区的每一天
去签到