问题描述
在自建的Redis服务中,可以通过 config set requirepass <Password> 设置Redis的登录密码,然后使用auth 命令输入密码。操作命令如下:
##设置密码
C:\LBWorkSpace\tool\redis>redis-cli 127.0.0.1:6379> config set requirepass Password@123
OK
127.0.0.1:6379> quit ##重新连接到Redis服务器
C:\LBWorkSpace\tool\redis>redis-cli
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth Password@123
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
那么在Azure 的Redis服务中,是否也可以用户自定义密码呢?
问题分析
在Redis中,设置密码使用的指令为CONFIG SET requirepass, 根据Azure 官方文档,CONFIG命令被禁止。所以无法实现自定义密码。只能根据Redis门户的Access Key中生成随机的一串密钥,由Azure平台提供。
在Azure Redis中执行CONFIG SET REQUIREPASS 会得到ERR unknown command
在Azure门户中生成密钥
重要
因为 Azure Redis 缓存实例的配置和管理由 Microsoft 进行管理,所以禁用了以下命令。 如果尝试调用它们,将收到一条类似于
"(error) ERR unknown command"
的错误消息。
- BGREWRITEAOF
- BGSAVE
- CONFIG
- DEBUG
- MIGRATE
- SAVE
- SHUTDOWN
- SLAVEOF
- CLUSTER - 群集写命令已禁用,但允许使用只读群集命令。
引申问题
因为Azure Redis不能让用户自定义密码,所以当两个Redis作为灾备时候,需要手动的在程序中修改密钥。那么,两个Linked(在高级版的Redis中启用异地灾备)的Redis是否可以设置为相同的密钥呢?因自建的Redis服务器可以设置密钥,那么是否可以把Azure PaaS Redis和自建的Redis服务进行主从配置呢?
答案是:统统不可以。
参考资料
Azure Redis 缓存中不支持 Redis 命令:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-configure#redis-commands-not-supported-in-azure-cache-for-redis
为高级 Azure Cache for Redis 实例配置异地复制:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-geo-replication
辅助链接缓存如何进行故障转移?
异地复制的缓存不支持跨 Azure 区域的自动故障转移。 在灾难恢复方案中,客户应该在其备份区域中以协调的方式启动整个应用程序堆栈。 让单个应用程序组件自行决定何时切换到其备份区域可能会给性能造成负面影响。 Redis 的主要优势之一是,它是一个延迟极低的存储。 如果客户的主要应用程序与其缓存位于不同的区域,则增大的往返时间可能会对性能产生显著的影响。 因此,我们应该避免自动故障转移,否则会造成暂时性的可用性问题。
若要启动客户发起的故障转移,请先取消链接缓存。 然后将 Redis 客户端更改为使用(以前链接的)辅助缓存的连接终结点。 取消链接两个缓存后,辅助缓存将再次成为常规的读取写入缓存,并直接从 Redis 客户端接受请求。
[完]