https://github.com/autopilotpattern/redis

Architecture

正在运行的群集包括以下组件:

  • Redis :我们使用的是Redis 3.2。
  • Redis Sentinel :管理故障转移。
  • ContainerPilot :包含在我们的Redis容器中,以编排引导行为,并使用存储在启动, healthbackup处理程序中的Consul中的密钥和检查来协调复制。
  • Consul :是我们的服务目录,可与ContainerPilot配合使用,并协助服务发现,复制和故障切换
  • Manta :Joyent对象存储,用于安全和耐用地存储我们的Redis备份。
  • manage.sh :一个小的bash脚本,ContainerPilot会调用来重新引导Redis。

当新的Redis节点启动时

Bootstrapping

onStart任务作为应用程序启动的一部分运行,而不是来自ContainerPilot的preStart处理程序,因为Consul代理必须正在运行,并且ContainerPilot直到preStart才启动协进程。

onStart执行以下操作:

  1. 这个容器是否配置为replica? 如是:
  2. 等待master在服务注册表中变得健康。
  3. 如果没有健康的master,尝试重新配置为master并重新启动。
  4. 这个容器是否配置为master? 如是:
  5. 验证此节点仍应以master身份启动。
  6. 如果此节点不应为master节点,请重新配置为replica并重新启动。
  7. 如果没有master,则根据服务注册表中的master或此节点,写入redis和sentinel配置。
  8. 如果存在,请恢复上次备份。

Maintenance via health handler

health执行以下操作:

  1. Ping redis,验证响应。
  2. 验证服务配置(master or replica)是否匹配redis的角色(master or slave)。 Sentinel可能已执行故障切换并更改了此节点的角色。 如果更改角色,则需要更新服务注册表,以便将来正确配置任何未来启动的容器。 如果服务配置和角色不匹配,请重新配置以匹配当前角色。

healthSentinel pings sentinel.

Backups via backup task

ContainerPilot通过重复的任务调用backup处理程序。 备份处理程序将:

  1. 检查redis服务上的备份运行TTL健康检查。
  2. 如果TTL已过期:
  3. 通过检查
  4. 创建一个备份。
  5. 将备份上传到Manta。

Running the cluster

一旦你_env文件设置了配置详细信息只需运行docker-compose up -d并且在一段时间内,您将拥有运行的Redis主机就可以轻松启动新的集群。 master和replica都被描述为单个docker-compose服务。 在启动期间, ContainerPilot会询问consul是否已创建现有的master。 如果没有,则节点将初始化为新的master,并且所有将来的节点将通过Sentinel与主节点自配置复制。

运行docker-compose scale redis=3添加replica 。 replica将自动配置为从master复制,并在准备完成后将自己作为replica注册到consul。 在节点出现故障的情况下,应至少有3个节点拥有法定人数。

Configuration

通过_env文件传递这些变量。 包含的examples/triton/setup.sh可用于测试Docker和Triton环境,并对_env文件中的Manta SSH密钥进行编码。

MANTA_URL :完整的Manta终结点网址。 (例如https://us-east.manta.joyent.com

  • MANTA_USER :Manta帐户名称。
  • MANTA_SUBUSER :Manta subuser帐户名称(如果有)。
  • MANTA_ROLE :Manta角色名称,如果有的话。
  • MANTA_KEY_ID :Manta帐户/子用户的MD5格式的ssh密钥ID(例如1a:b8:30:2e:57:ce:59:1d:16:f6:19:97:f2:60:2b:3d ) ; 包含的setup.sh将自动编码
  • MANTA_PRIVATE_KEY :Manta帐户/ subuser的私人ssh密钥; 包含的setup.sh将自动编码
  • MANTA_BUCKET :Manta上存储备份的路径。 (例如/myaccount/stor/manage ); 桶必须已经存在,并可由MANTA_USER / MANTA_PRIVATE_KEY

这些变量是可选的,但您最有可能希望它们:

  • LOG_LEVEL :将设置manage.sh脚本的日志记录级别。 设置为DEBUG以进行更多日志记录。
  • CONSUL是要加入的consul实体的主机名。 默认为consul

Where to store data

该模式可自动执行数据管理,并使容器对Docker守护程序和调度程序有效地进行无状态化。 这旨在通过最小化管理数据库所需的外部协调来最大限度地提高方便性和可靠性。 不推荐使用外部卷( --volumes-from-v等)。

在Triton上,不需要使用数据卷,因为通常在Linux中使用覆盖文件系统的性能下降不会发生在ZFS中。

Using an existing database

如果您使用已经包含数据库(具体来说是appendonly.aof文件)的数据目录启动Redis容器实例,则不会以任何方式更改预先存在的数据库。

最新文章

  1. SharePoint 2013技巧分享系列 - 同步Exchange显示高清用户照片
  2. Hello, Android多屏幕版
  3. 修改wamp默认网站目录
  4. windows用户用VMware 虚拟机安装黑苹果Mac.OS.X操作系统
  5. libbspatch.so
  6. Agile.Net 组件式开发平台 - 平台系统介绍
  7. Js,alert出现乱码问题,赶紧记下来,额~~~
  8. 《windows程序设计》学习_4.1:计时器(可用于扫雷)
  9. C++中的Traits技法
  10. gRPC异步处理应答
  11. Sublime编译器快捷键大全
  12. btcpool之总架构
  13. java-solr solrj的使用
  14. springboot中spring.profiles.include
  15. 浅谈js设计模式 — 命令模式
  16. AngularJS』一点小小的理解
  17. 虚函数不应该是inlined(More Effective C++ 笔记)
  18. 一次清理Hbase的oldWALs的过程
  19. facebook开源的adb 工具,解决adb连不上手机的问题
  20. springMvc架构简介

热门文章

  1. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文
  2. O(n)空间复杂度,打印杨辉三角形的前n行
  3. sql distinct 去除重复的字段
  4. var_dump() 查看字符的类型 方法
  5. Tensorflow笔记——神经网络图像识别(五)手写数字识别
  6. Floyd最短路径算法(来自微信公众号“算法爱好者”改编)
  7. Jquery判断IE6等浏览器的代码
  8. 绕过限制,在PC上调试微信手机页面
  9. [UE4]解析json数据
  10. 报错:ORA-02264