小米Redis的K8s容器化部署实践( 四 )


同时,如果混部的其他服务是网络吞吐很高的应用,也可能对Redis服务造成影响 。虽然K8s的 anti-affinity 功能可以将Redis实例有选择地部署到没有这类应用的机器上,但是在机器资源紧张时,还是无法避免这种情况 。
Redis Cluster管理Redis Cluster是一个P2P无中心节点的集群架构,依靠gossip协议传播协同自动化修复集群的状态,节点上下线和网络问题都可能导致Redis Cluster的部分节点状态出现问题,例如会在集群拓扑中出现failed或者handshake状态的节点,甚至脑裂 。对这种异常状态,我们可以在Redis CRD上增加更多的功能来逐步解决,进一步提高运维效率 。
审计与安全Redis本身只提供了Auth密码认证保护功能,没有权限管理,安全性较差 。通过Proxy,我们可以通过密码区分客户端类型,管理员和普通用户使用不同的密码登录,可执行的操作权限也不同,这样就可以实现权限管理和操作审计等功能 。
支持多Redis Cluster单个Redis Cluster由于gossip协议的限制,横向扩展能力有限,集群规模在300个节点时,节点选主这类拓扑变更的效率就明显降低 。同时,由于单个Redis实例的容量不宜过高,单个Redis Cluster也很难支持TB以上的数据规模 。通过Proxy,我们可以对key做逻辑分片,这样单个Proxy就可以接入多个Redis Cluster,从客户端的视角来看,就相当于接入了一个能够支持更大数据规模的Redis集群 。
最后,像Redis这种有状态服务的容器化部署在国内大厂都还没有非常成熟的经验,小米云平台也是在摸索中逐步完善 。目前我们新增集群已经大部分部署在K8s上,更计划在一到两年内将集团内大部分的物理机Redis集群都迁移到K8s上 。这样就可以有效地降低运维人员的负担,在不显著增加运维人员的同时维护更多的Redis集群 。


【小米Redis的K8s容器化部署实践】


推荐阅读