运维教程-如何使用Docker实现Redis 3.0集群的一键部署交付?

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

作者介绍:

开篇:

Redis在3.0之后开始支持sharding集群。Redis集群可以让数据自动在多个节点上分布。如何使用Docker实现Redis集群的一键部署交付,是一个有趣的并且有价值的话题。

本文将给大家介绍基于进程的容器技术实现Redis sharding集群的一键部署,充分展现了容器的强大威力。

什么是Redis sharding集群

Redis(redis.io)作为最流行的KV数据库,很长一段时间都是单机运行,关于如何实现Redis的数据在多个节点上的分布,在Redis3.0出来之前,有很多第三方的方案。建议大家参考这个链接:

Client hash

这是最简单的实现,通过在客户端利用一致性hash算法,将数据分布到不同节点。这种方法的缺点非常明显,缺少故障自动failover能力,并且在扩容时数据分布的搬迁,也比较费劲。

代理模式

  • 一个是Redis官方推荐的Twemproxy,是由twitter公司开发;
  • 另一个是国内豌豆荚开源的codis;

代理模式最大的好处是仍然使用redis单机的sdk进行开发,维护简单。

Redis Cluster

redis3.0继2.8推出sentinel主从自动failover功能后,推出了sharding集群,这就是Redis Cluster。

本次分享主要是介绍如何将Redis集群实现一键的部署,参考文档:

1、准备redis镜像

Redis官方已经提供了Redis 3.2和3.3的镜像,都可以用来作为Redis集群的镜像,3.2是稳定版本。

目前官方推出了alpine版本的Redis镜像,alpine镜像的优势是体积小。此次分享是采用官方的redis:3.2-alpine的镜像来做集群。

2、准备初始化脚本的执行环境

redis官方提供了一个ruby的脚本redis-trib.rb,这个脚本可以用来初始化集群、resharding集群、rebalance集群等。

我们使用官方的脚本来初始化集群。该脚本的运行需要ruby环境,我们来构建一个redis-trib镜像,以下是构建redis-trib镜像的Dockerfile内容:

cat Dockerfile

如何使用Docker实现Redis 3.0集群的一键部署交付?

 

 

 

 

 

 

 

 

 

脚本文件

cat entrypoint.sh

如何使用Docker实现Redis 3.0集群的一键部署交付?

 

 

 

 

 

 

上面两个文件用来构建redis-trib镜像,Dockerfile中的逻辑比较简单,将github中的redis-trib.rb文件添加到镜像中,并让脚本执行支持非交互模式(QUIET_MODE)。

镜像启动时,将执行集群初始化命令。

3、准备redis集群配置文件

如何使用Docker实现Redis 3.0集群的一键部署交付?

redis集群的配置文件我们一般放到数据目录/data下,redis进程对/data目录拥有可读写的权限。

4、准备redis-trib脚本配置文件,用于集群初始化参数获取

entrypoint.sh文件中,最主要的是读取redis-trib.conf配置文件,配置文件的格式非常简单

如何使用Docker实现Redis 3.0集群的一键部署交付?

REPLICAS的意思是每个分片有几个slave,一般配置1个slave ,即REPLICAS=1NODES的意思是集群的每个节点,包括master和slave。

所以如果有10个节点,REPLICAS=1的话,那么将有5个分片(slices)。

编排集群

准备好上述镜像和配置文件后,我们开始编排集群

第一步:创建模版

如何使用Docker实现Redis 3.0集群的一键部署交付?

第二步:选择镜像,添加redis服务

如何使用Docker实现Redis 3.0集群的一键部署交付?

第三步:设置容器参数

如何使用Docker实现Redis 3.0集群的一键部署交付?

第四步:设置健康检查策略

如何使用Docker实现Redis 3.0集群的一键部署交付?

第五步:设置redis容器部署策略

如何使用Docker实现Redis 3.0集群的一键部署交付?

添加redis集群初始化服务redis-trib

第一步:选择镜像

如何使用Docker实现Redis 3.0集群的一键部署交付?

第二步:设置容器参数

如何使用Docker实现Redis 3.0集群的一键部署交付?

第三步:设置redis-trib容器部署策略

redis-trib要在redis容器启动完成后再启动,所以启动优先级要比redis低。

如何使用Docker实现Redis 3.0集群的一键部署交付?

通过以上步骤,编排好了Redis-sharding应用模版。

基于Redis-sharding应用模板,一键部署Redis Cluster

以下是部署后的效果图:

如何使用Docker实现Redis 3.0集群的一键部署交付?

查看redis-trib集群初始化后的结果,看到集群的初始化过程没有问题;

如何使用Docker实现Redis 3.0集群的一键部署交付?

验证:登录到任意一台redis节点执行redis-cli info:

如何使用Docker实现Redis 3.0集群的一键部署交付?

以上内容分享了基于进程的容器技术,实现了Redis sharding的一键交付。

如何使用Docker实现Redis 3.0集群的一键部署交付?

你会部署了吗?

so easy

分享后讨论更是激烈:

Q1: 如果我想在一个机器上部署多个redis实例可以吗?

Q2: 问下你们ui编排工具是自主研发还是基于什么开源工具?内部逻辑是什么.?

Q3:redis集群的docker我看ip都是同网段的。这个是单独的docker管理工具处理的?如果只单纯搭建redis集群,而无docker集群管理。这个多个redis node如何管理?

Q4: 请问这里的模板数据是何时传入进去的?

Q5:请问redis-cluster的扩容、缩容,resharding如何处理的呢?

Q6: 这是你们的商业平台?还是openstack集成docker的结果?

Q7: redis3.0目前自己出的这个Q5集群方案稳定吗?有没有经过大量的数据测试!效率如何?因为我不是专业做运维的,我是做开发的对运维的知识比较感兴趣但是不专业,希望能得到一个经过数据支撑的答案

Q8: 你们的pass平台在部署容器时还能指让用户自主定制部署策略?这样做的目的是什么?

Q9: redis用docker做集群,在内存方面有什么需要额外注意的地方吗?

原文出处:高效运维微信公众号

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。运维教程 只为你绽放。

本文固定链接: http://kua0.com/2018/12/31/运维教程-如何使用docker实现redis-3-0集群的一键部署交付?/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注