一种Docker云平台下弹性缓存系统的制作方法_4

文档序号:9600940阅读:来源:国知局
r协议请求管理者管理 宿主机。新建容器时,管理者用一定的调度策略将启动容器请求分发到某个宿主机,删除容 器操作只需找到实际运行该容器的宿主机后,发出删除请求。两种模式的服务器通过Etcd 集群组成一个整体的集群。
[0142]图11是Docker集群管理模块中管理者模式的工作流程,其具体工作流程为:
[0143] (11. 1)启动HTTP服务,向外提供访问宿主机状态的API。API包括获得集群状态、 获得某个宿主机系统状态、获得某个Image信息、获得某个容器信息、建立Image、启动容 器、销毁容器、在容器中执行命令。
[0144] (11.2)订阅宿主机中宿主机目录,等待更新。
[0145] (11. 3)发现更新并处理得到的数据。数据为Key-Value结构,Key为宿主机IP, Value为宿主机状态。
[0146] (11. 4)如果宿主机列表中存在此IP,则更新该IP宿主机的系统状态;否则,将此 IP及其状态增加到列表中。跳转至(11.2)重复执行。
[0147]图12是Docker集群管理模块中宿主机模式的工作流程,其具体工作流程为:
[0148] (12. 1)启动Docker服务。
[0149] (12. 2)启动成功后,通过Docker的stats接口获取系统状态(CPU使用率、带宽、 内存使用情况)。
[0150] (12. 3)在etcd集群中发布自身信息,信息的key值为宿主机IP,value为宿主机 系统状态。定时器经过10秒,返回到(12.2)循环执行。
[0151] 容器守护进程模块集成在DockerImage中。当Webserver启动容器时,启动容器 守护进程模块,将所有容器配置保存在系统参数中,根据系统参数初始化Context结构体。 初始化完毕后,根据Context启动相应容器模式,包括Redis模式、Proxy模式、Manager模 式。
[0152]Redis模式下的容器主要功能是:启动并注册Redis服务。Redis启动方式分为: 初始化启动与弹性启动两种启动过程,可以为master、slave任意类型。
[0153] 图13显示了Redis模式初始化启动的工作流程,其具体流程如下:
[0154] (13. 1)在Redis缓存集群初始化时,创建Redis模式容器;
[0155] (13. 2)启动Redis程序,将自身信息发布到etcd集群的/$cid/init/redis目录 下;
[0156] (13. 3)向Webserver报告启动成功,等待被Manager节点发现。
[0157] 图14显示了Redis模式弹性启动的工作流程,其具体流程如下:
[0158] (14. 1)在集群增加Redis服务组时,创建Redis模式容器;
[0159] (14. 2)启动Redis程序,将自身信息发布到etcd集群的/$cid/elastic/redis目 录下;
[0160] (14. 3)向Webserver报告启动成功,等待被Manager节点发现。
[0161]Proxy模式:处于Proxy模式的容器正常工作后,保存着完整的slot到具体Redis 服务器的路由表。由于其订阅/slot目录,所以当某个slot所属服务组发生变化时,可以及 时更新路由。容器接收到Client的请求后,将key进行hash处理后得到该key所属slot。 然后查路由表,将请求转发到相应Redis服务器。最后,将Redis服务器的应答传输至该 Client模块。
[0162]Proxy模式的主要功能是启动上述的Proxy软件,收集并注册系统状态。Proxy模 式的启动方式分为初始化启动和弹性启动,两种启动方式的发生场景同Redis模式。
[0163] 图15显示了Proxy模式初始化启动容器的工作流程为:
[0164] (15. 1)进入Proxy模式,订阅/init/manager目录,等待所有Manager容器注册并 启动;
[0165] (15. 2)判断Manager容器是否启动成功,若启动成功,继续执行(15. 3);否则,结 束。
[0166] (15. 3)新建Manager客户端,并启动Proxy程序;
[0167] (15. 4)在/init/Proxy目录发布自身信息,等待集群启动成功;
[0168] (15.5)循环判断事件类型,若接收到计时器信号,则跳转至(15.6);若接收到 Manager故障信号,贝IJ跳转至(15.8);
[0169] (15. 6)通过Ping命令,连接Manager节点,获取系统状态;
[0170] (15. 7)将系统状态发布到/stats/proxy目录下,再跳转至(15. 5);
[0171] (15. 8)订阅 /failure/manager目录;
[0172] (15. 9)等待目录更新s更新完毕后获取后的新manager地址;
[0173] (15. 10)更新Context中的manager地址,并跳转至(15. 5)。
[0174] 图16显示了Proxy模式弹性启动容器的工作流程为:
[0175] (16. 1)进入Proxy模式,订阅/init/manager目录,获取Manager节点地址;
[0176] (16. 2)新建Manager客户端,并启动Proxy程序;
[0177] (16.3)循环判断事件类型,若接收到计时器信号,则跳转至(16.4);若接收到 Manager故障信号,贝1J跳转至(16.6);
[0178] (16. 4)通过Ping命令,连接Manager节点,获取系统状态;
[0179] (16. 5)将系统状态发布到/stats/proxy目录下,再跳转至(16. 3);
[0180] (16. 6)订阅 /failure/manager目录;
[0181] (16. 7)等待目录更新,更新完毕后获取后的新manager地址;
[0182] (16. 8)更新Context中的manager地址,并跳转至(16. 3)。
[0183]Manager模式是最核心的模式。Manager模式下的容器主要功能是:监控集群服务 器运行时状态,收集集群负载信息,处理集群伸缩,slot迀移,管理Proxy节点和Redis节 点。Manager启动方式分为:初始化启动和故障后启动两种方式。
[0184] 图17显示了Manager模式下初始化启动容器的具体流程为:
[0185] (17. 1)根据系统参数生成配置文件,配置文件内容包括etcd集群地址、Manager 服务地址、缓存集群ID。
[0186] (17. 2)根据配置文件启动Manager软件一Codis。
[0187] (17. 3)使用Codis命令在etcd中初始化slot信息。
[0188] (17. 4)订阅/init/redis目录,等待所有Redis服务组注册。
[0189] (17. 5)使用Codis命令将所有Redis节点注册到Redis集群列表。
[0190] (17. 6)执行rebalance命令为每个Redis服务组分配slot。
[0191](17. 7)通知Proxy节点执行完rebalance操作,使其结束等待执行后续流程。
[0192] (17. 8)订阅/init/proxy目录,等待proxy注册。
[0193] (17. 9)向Webserver模块报告集群成功启动信息。
[0194] (17. 10)启动成功后,守护进程定期通过etcd集群收集Proxy节点,通过远程执行 Info命令收集Redis节点系统信息,收集节点运行时状态,判断事件类型。
[0195] (17. 11)如果发生Proy故障,则将Proxy故障信息提交给Webserver模块,并跳转 至Proxy故障处理流程。
[0196] (17. 12)如果发生Redis故障,则将Redis故障信息提交给Webserver模块,并跳 转至增加Redis节点流程。
[0197] (17. 13)如果没有故障发生,将收集的节点运行时状态进行整合,判断是否出发 弹性伸缩条件。若满足出发条件,则进一步判断事件类型,跳转至相应的处理流程(增加 Redis服务组、删除Redis、增加Proxy、删除Proxy)。
[0198] 图18显示了Manager模式下故障后启动容器的具体流程为:
[0199](18. 1)根据系统参数生成配置文件,配置文件内容包括etcd集群地址、Manager 服务地址、缓存集群ID。
[0200](18. 2)根据配置文件启动Manager软件一Codis。
[0201](18. 3)启动成功后,守护进程将自身信息发布到/failure/manager目录,执行循 环环判断事件类型处理。
[0202] (18. 4)如果发生Proy故障,则将Proxy故障信息提交给Webserver模块,并跳转 至Proxy故障处理流程。
[0203] (18. 5)如果发生Redis故障,则将Redis故障信息提交给Webserver模块,并跳转 至增加Redis节点流程。
[0204] (18.6)如果没有故障发生,将收集的节点运行时状态进行整合,判断是否出发 弹性伸缩条件。若满足出发条件,则进一步判断事件类型,跳转至相应的处理流程(增加 Redis服务组、删除Redis、增加Proxy、删除Proxy)。
[0205] 用户使用Client端之前,需要提交用户名、密码、Redis集群ID,通过Webserver 模块进行用户验证。验证通过后,Webserver模块返回相应Redis集群的Proxy列表。此 外,Client端定时更新Proxy列表,保证Proxy列表的正确性。Client端获取Proxy列表 后,可以选择相应的负载均衡算法向Proxy发出读写请求。用户可以自行设置负载均衡算 法,负载均衡算法包括:随机法、轮询法、加权轮询法、动态加权轮询法、最快响应优先法。
[0206] 图19展示了Client端更新Proxy列表工作流程。为了方便用户操作,Client端 直接提供Do方法,执行所有Redis操作。Proxy连接工作和调度策略全部隐藏执行,对用户 透明执行。每次执行Do方法时,首先,通过调度器得到应该连接的Proxy,然后从该Proxy 的连接池中获得连接,通过该连接发起命令请求。由于弹性事件,Proxy节点会不定期更新, 为了保证Client端正常工作,客户端需要及时更新Proxy列表。其具
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1