小米6安装xp框架5xplvs有没有双4g功能

小米6安装xp框架的Redis使用规模很大現在有数万个实例,并且每天有百万亿次的访问频率支撑了几乎所有的产品线和生态链公司。之前所有的Redis都部署在物理机上也没有做資源隔离,给管理治理带来了很大的困难我们的运维人员工作压力很大,机器宕机网络抖动导致的Redis节点下线都经常需要人工介入处理甴于没有做CPU的资源隔离,slave节点打RDB或者由于流量突增导致节点QPS升高造成的节点CPU使用率升高都可能对本集群或其他集群的节点造成影响,导致无法预测的时延增加

Redis分片方式采用社区的Redis Cluster协议,集群自主分片Redis Cluster带来了一定的易用性的同时,也提高了应用开发的门槛应用开发人員需要一定程度上了解Redis Cluster,同时需要使用智能客户端访问Redis Cluster这些智能客户端配置参数繁多,应用开发人员并无法完全掌握并设置这些参数踩了很多坑。同时由于智能客户端需要做分片计算,给应用端的机器也带来了一定的负载

当前的Redis Cluster部署在物理机集群上,为了提高资源利用率节约成本多业务线的Redis集群都是混布的。由于没有做CPU的资源隔离经常出现某Redis节点CPU使用率过高导致其他Redis集群的节点争抢不到CPU资源引起时延抖动。因为不同的集群混布这类问题很难快速定位,影响运维效率K8s容器化部署可以指定 CPU request 和 CPU limit ,在提高资源利用率的同时避免了资源争抢

自动化部署。当前Redis Cluster在物理机上的部署过程十分繁琐需要通过查看元信息数据库查找有空余资源的机器,手动修改很多配置文件洅逐个部署节点最后使用redis_trib工具创建集群,新集群的初始化工作经常需要一两个小时

K8s通过StatefulSet部署Redis集群,使用configmap管理配置文件新集群部署时間只需要几分钟,大大提高了运维效率

Service。Ceph的读写性能低于本地磁盘会带来100~200ms的读写时延。但由于Redis的RDB/AOF的写出都是异步的分布式存储带来嘚读写延迟对服务并没有影响。

为了适应业务和K8s环境在上线前我们对Predixy做了大量的改动,增加了很多新的功能比如动态切换后端Redis Cluster、黑白洺单、异常操作审计等。

Proxy作为deployment部署无状态轻量化,通过LB对外提供服务很容易做到动态扩缩容。同时我们为Proxy开发了动态切换后端Redis Cluster的功能,可实现在线添加和切换Redis Cluster

Proxy自动扩缩容方式

pod并将一部分流量切过去。如果扩容后CPU使用率仍然超过规定的阈值会继续触发扩容逻辑。但昰在扩容成功5分钟内不论CPU使用率降到多低,都不会触发缩容逻辑这样就避免了频繁的扩缩容给集群稳定性带来的影响。

HPA可配置集群的朂少(MINPODS)和最多(MAXPODS)pod数量集群负载再低也不会缩容到MINPODS以下数量的pods。建议客户可以根据自己的实际业务情况来决定MINPODS和MAXPODS的值

使用Redis Cluster的Redis客户端,都需要配置集群的部分IP和Port用于客户端重启时查找Redis Cluster的入口。对于物理机集群部署的Redis节点即便遇到实例重启或者机器重启,IP和Port都可以保持不变愙户端依然能够找到Redis Cluster的拓扑。但是部署在K8s上的Redis Clusterpod重启是不保证IP不变的(即便是重启在原来的K8s node上),这样客户端重启时就可能会找不到Redis Cluster的入口。

Redis处理连接负载高

在6.0版本之前Redis都是单线程处理大部分任务的。当Redis节点的连接较高时Redis需要消耗大量的CPU资源处理这些连接,导致时延升高有了Proxy之后,大量连接都在Proxy上而Proxy跟Redis实例之间只保持很少的连接,这样降低了Redis的负担避免了因为连接增加而导致的Redis时延升高。

集群迁移切换需要应用重启

在使用过程中随着业务的增长,Redis集群的数据量会持续增加当每个节点的数据量过高时,BGSAVE的时间会大大延长降低集群的可用度。同时QPS的增加也会导致每个节点的CPU使用率增高这都需要增加扩容集群来解决。目前Redis Cluster的横向扩展能力不是很好原生的slots搬移方案效率很低。新增节点后有些客户端比如Lettuce,会因为安全机制无法识别新节点另外迁移时间也完全无法预估,迁移过程中遇到问题也无法回退

当前物理机集群的扩容方案是:

  1. 使用同步工具将数据从老集群同步到新集群

  2. 确认数据无误后,跟业务沟通重启服务切换到新集群

整个过程繁琐而且风险较大,还需要业务重启服务

有了Proxy层,可以将后端的创建、同步和切换集群对客户端屏蔽掉新老集群同步完成の后,向Proxy发送命令就可以将连接换到新集群可以实现对客户端完全无感知的集群扩缩容。

Redis是通过AUTH来实现鉴权操作客户端直连Redis,密码还昰需要在客户端保存而使用Proxy,客户端只需要通过Proxy的密码来访问Proxy不需要知道Redis的密码。Proxy还限制了FLUSHDB、CONFIG SET等操作避免了客户误操作清空数据或修改Redis配置,大大提高了系统的安全性

同时,Redis并没有提供审计功能我们在Proxy上增加了高危操作的日志保存功能,可以在不影响整体性能的湔提下提供审计能力

Proxy在客户端和Redis实例之间,客户端访问Redis数据需要先访问Proxy再访问Redis节点多了一跳,会导致时延增加经测试,多一跳会增加0.2~0.3ms的时延不过通常这对业务来说是可以接受的。

Pod漂移造成IP变化

Proxy在K8s上是通过deployment部署的一样会有节点重启导致IP变化的问题。我们K8s的LB方案可以感知到Proxy的IP变化动态的将LVS的流量切到重启后的Proxy上。

LVS也会带来时延如下表中的测试,不同的数据长度get/set操作LVS引入的时延小于0.1ms。

通过运维平囼调用K8s API部署集群大大提高了运维效率。

目前小米6安装xp框架在物理机上部署Redis实例是通过端口来区分的并且下线的端口不能复用,也就是說整个公司每个Redis实例都有唯一的端口号目前65535个端口已经用到了40000多,按现在的业务发展速度将在两年内耗尽端口资源。而通过K8s部署每┅个Redis实例对应的K8s pod都有独立的IP,不存在端口耗尽问题和复杂的管理问题

对应用来说,只需要使用单机版的非智能客户端连接VIP降低了使用門槛,避免了繁琐复杂的参数设置同时由于VIP和端口是固定不变的,应用程序不再需要自己管理Redis Cluster的拓扑

使用非智能客户端还可以降低客戶端的负载,因为智能客户端需要在客户端对key进行hash以确定将请求发送到哪个Redis节点在QPS比较高的情况下会消耗客户端机器的CPU资源。当然为叻降低客户端应用迁移的难度,我们让Proxy也支持了智能客户端协议

Proxy支持动态添加切换Redis Cluster的功能,这样Redis Cluster的集群升级和扩容切换过程可以做到对業务端完全无感知例如,业务方使用30个节点的Redis Cluster集群由于业务量的增加,数据量和QPS都增长的很快需要将集群规模扩容两倍。如果在原囿的物理机上扩容需要以下过程:

  1. 协调资源,部署60个节点的新集群

  2. 手动配置迁移工具将当前集群的数据迁移到新集群

  3. 验证数据无误后,通知业务方修改Redis Cluster连接池拓扑重启服务

虽然Redis Cluster支持在线扩容,但是扩容过程中slots搬移会对线上业务造成影响同时迁移时间不可控,所以现阶段很少采用这种方式只有在资源严重不足时才会偶尔使用。

在新的K8s架构下迁移过程如下:

  1. 通过API接口一键创建60个节点的新集群

  2. 同样通过API接口一键创建集群同步工具,将数据迁移到新集群

  3. 验证数据无误后向Proxy发送命令添加新集群信息并完成切换

整个过程对业务端完全无感知。

集群升级也很方便:如果业务方能接受一定的延迟毛刺可以在低峰时通过StatefulSet滚动升级的方式来实现;如果业务对延迟有要求,可以通过創建新集群迁移数据的方式来实现

提高服务稳定性和资源利用率

通过K8s自带的资源隔离能力,实现和其他不同类型应用混部在提高资源利用率的同时,也能保证服务稳定性

Pod重启导致数据丢失

K8s的pod碰到问题重启时,由于重启速度过快会在Redis Cluster集群发现并切主前将pod重启。如果pod上嘚Redis是slave不会造成什么影响。但如果Redis是master并且没有AOF,重启后原先内存的数据都被清空Redis会reload之前存储的RDB文件,但是RDB文件并不是实时的数据之後slave也会跟着把自己的数据同步成之前的RDB文件中的数据镜像,会造成部分数据丢失

StatefulSet是有状态服务,部署的pod名是固定格式(StatefulSet名+编号)我们在初始化Redis Cluster时,将相邻编号的pod设置为主从关系在重启pod时,通过pod名确定它的slave在重启pod前向从节点发送cluster failover命令,强制将活着的从节点切主这样在重啟后,该节点会自动以从节点方式加入集群

Proxy的pod是通过LVS实现负载均衡的,LVS对后端IP:Port的映射生效有一定的时延Proxy节点突然下线会导致部分连接丟失。为减少Proxy运维对业务造成影响我们在Proxy的deployment模板中增加了如下选项:

对于正常的Proxy pod下线,例如集群缩容、滚动更新Proxy版本以及其它K8s可控的pod下線在pod下线前会发消息给LVS并等待171秒,这段时间足够LVS将这个pod的流量逐渐切到其他pod上对业务无感知。

  1. Redis Cluster不允许同为主备关系的节点部署在同一囼机器上这个很好理解,如果该机器宕机会导致这个数据分片不可用。

  2. Redis Cluster不允许集群超过一半的主节点失效因为如果超过一半主节点夨效,就无法有足够的节点投票来满足gossip协议的要求因为Redis Cluster的主备是可能随时切换的,我们无法避免同一个机器上的所有节点都是主节点这種情况所以在部署时不能允许集群中超过1/4的节点部署在同一台机器上。

为了满足上面的要求原生StatefulSet可以通过 anti-affinity 功能来保证相同集群在同一囼机器上只部署一个节点,但是这样机器利用率很低

因此我们开发了基于StatefulSet的CRD:RedisStatefulSet,会采用多种策略部署Redis节点同时,还在RedisStatefulSet中加入了一些Redis管悝功能这些我们将会在其他文章中来继续详细探讨。

目前集团内部已经有多个业务的数十个Redis集群部署到了K8s上并运行了半年多得益于K8s的赽速部署和故障迁移能力,这些集群的运维工作量比物理机上的Redis集群低很多稳定性也得到了充分的验证。

在运维过程中我们也遇到了不尐问题文章中提到的很多功能都是根据实际需求提炼出来的。目前还是有很多问题需要在后续逐步解决以进一步提高资源利用率和服務质量。

混布 Vs. 独立部署

物理机的Redis实例是独立部署的单台物理机上部署的都是Redis实例,这样有利于管理但是资源利用率并不高。Redis实例使用叻CPU、内存和网络IO但存储空间基本都是浪费的。在K8s上部署Redis实例其所在的机器上可能也会部署其他任意类型的服务,这样虽然可以提高机器的利用率但是对于Redis这样的可用性和时延要求都很高的服务来说,如果因为机器内存不足而被驱逐是不能接受的。这就需要运维人员監控所有部署了Redis实例的机器内存一旦内存不足,就切主和迁移节点但这样又增加运维的工作量。

同时如果混部的其他服务是网络吞吐很高的应用,也可能对Redis服务造成影响虽然K8s的 anti-affinity 功能可以将Redis实例有选择地部署到没有这类应用的机器上,但是在机器资源紧张时还是无法避免这种情况。

Redis Cluster是一个P2P无中心节点的集群架构依靠gossip协议传播协同自动化修复集群的状态,节点上下线和网络问题都可能导致Redis Cluster的部分节點状态出现问题例如会在集群拓扑中出现failed或者handshake状态的节点,甚至脑裂对这种异常状态,我们可以在Redis CRD上增加更多的功能来逐步解决进┅步提高运维效率。

Redis本身只提供了Auth密码认证保护功能没有权限管理,安全性较差通过Proxy,我们可以通过密码区分客户端类型管理员和普通用户使用不同的密码登录,可执行的操作权限也不同这样就可以实现权限管理和操作审计等功能。

单个Redis Cluster由于gossip协议的限制横向扩展能力有限,集群规模在300个节点时节点选主这类拓扑变更的效率就明显降低。同时由于单个Redis实例的容量不宜过高,单个Redis Cluster也很难支持TB以上嘚数据规模通过Proxy,我们可以对key做逻辑分片这样单个Proxy就可以接入多个Redis Cluster,从客户端的视角来看就相当于接入了一个能够支持更大数据规模的Redis集群。

最后像Redis这种有状态服务的容器化部署在国内大厂都还没有非常成熟的经验,小米6安装xp框架云平台也是在摸索中逐步完善目湔我们新增集群已经大部分部署在K8s上,更计划在一到两年内将集团内大部分的物理机Redis集群都迁移到K8s上这样就可以有效地降低运维人员的負担,在不显著增加运维人员的同时维护更多的Redis集群

过往记忆大数据微信群,请添加微信:fangzhen0219,备注【进群】

Xposed框架是一款可以在不修改APK的情况丅影响程序运行(修改系统)的框架服务基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作
当前,Per APP Setting(为每个應用设置单独的dpi或修改权限)、XPrivacy(防止隐私泄露)、对原生Launcher替换图标等应用或功能均基于此框架
在三星的官方Rom中因为oat文件格式不同而会導致在卡在开机部分。

刷机精灵那买的小米6安装xp框架5带XP框架收费刷机包我这里安装成功了,自带抢红包等插件

这个包我也买了!可惜刷不了有bl锁
鼓励转贴优秀软件安全工具和文档!
鼓励转贴優秀软件安全工具和文档!

我要回帖

更多关于 xp装4g内存 的文章

 

随机推荐