Blog Archives

bara-基于Nginx和Dokcer的单机灰度测试环境原型

什么是bara bara,即日语的バラ,也就是玫瑰。 bara是一个基于Nignx和Docker的多版本程序同时在线的简易测试环境,只能单机使用,并且只是一个PoC而已,仅供参考。 简单来说,就是使用Nginx做反向代理,代理到后面的Docker容器,bara能动态创建Nignx配置文件,重启Nginx;而浏览器可以通过设置特殊header(默认为一个字母v)来通过Nginx代理,访问指定的后面的Docker容器。 bara概览 bara架构很简单,一个Nginx服务器运行在host上,画图如下: 其背后用到的主要原理就是Nginx的proxy_pass以及map功能,Nginx会根据浏览器设置的自定义header(v)的值,根据map的映射关系,找到合适的upstream代理过去而已。 而bara,就是发挥了Nginx的强大功能,和Docker的灵活轻便,从而能在一台主机上,跑n个版本的应用程序,以方便测试。 bara还有一个概念就是Nginx的配置文件模板,Nginx的配置文件是根据这个模板动态创建的,这个模板如果有{{upstream}}占位符,则会被bara系统自动根据运行中的容器来替换为一个upstream列表。 bara的代码在: https://github.com/liubin/bara。 下面,我们就来看看如何使用。 开始使用 启动前的配置 首先,需要修改config/initializers/docker.rb和 config/initializers/nginx.rb 这两个配置文件,指定如何连接Docker daemon和Nginx的配置文件位置以及nginx可执行程序的位置。 创建Nignx配置文件模板 Nginx配置文件模板是动态创建Nginx配置文件的模板,可以根据情况,准备多个模板。在Nginx服务页面,创建Nginx配置文件的时候,会基于状态为active的模板来创建Nginx的配置文件。 Nginx配置文件模板列表页面: 编辑模板页面: 拉取镜像到该host bara还提供了简单的镜像管理功能:列表,拉取,删除。如果镜像太大,尽量避免在线操作,还是直接在console中使用docker pull来拉取。 这是镜像列表页面: 启动容器 容器列表页面: 启动容器页面: 目前比较简单,只有一个容器名和CMD参数可以填写,默认会以-d和-P的形式启动容器。 生成Nginx配置文件和重启Nginx服务 在Nignx服务页面,可以完成查看当前Nginx配置文件内容,在线修改,以及重启Nginx服务器等。 这是一个Nignx配置文件例子: 设置客户端header 这里我使用了Chrome的插件ModHeader,这个插件,可以根据指定的url规则,设置自定一个header,这里我们添加了v这个header。ModHeader设置页面如下: 如果没有设置header,则Nginx会使用map中default的值作为upstream,目前为取得容器列表后的最后一个容器。 限制 目前bara只是一个原型,有很多不足,可能有人会觉得它 单机 使用-P

Posted in DevOps, Docker, Rails, Tech Tagged with: ,

初识OpenTSDB

1. 什么是 OpenTSDB OpenTSDB ,可以认为是一个时系列数据(库),它基于HBase存储数据,充分发挥了HBase的分布式列存储特性,支持数百万每秒的读写。 2. 架构简介 这里我们简单看一下它的架构,如下图所示。 其最主要的部件就是TSD了,这是接收数据并存储到HBase处理的核心所在。而带有C(collector)标志的Server,则是数据采集源,将数据发给 TSD服务。 3. 安装 OpenTSDB + elasticsearch plugin 为了安装 OpenTSDB ,都需要以下条件和软件: Linux操作系统 JRE 1.6 or later HBase 0.92 or later 3.1. 安装GnuPlot 如果你还想使用自带的界面,则需要安装GnuPlot 4.2及以后版本,以及gd和gd-devel等。这里我们选择了GnuPlot 5.0.1的版本。 根据情况执行(没有就装),安装所需软件 $ sudo yum install -y gd

Posted in DevOps, Tech, Web

解决Kafka“Failed to send messages after 3 tries”错误

如果是在同一台机器(localhost),Kafka和Java Client工作正常,Producer和Consumer都能正常发送和接收消息,但是一旦部署到两台机器,则默认配置的话不能正常工作。会出现“kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries”的错误。 解决方法其实很简单,只需要在Kafka的配置文件server.properties中,设置好主机名即可: # Hostname the broker will bind to. If not set, the server will bind to all interfaces host.name=queue-server1 究其原因,其实从注释里,我们可以知道,这是一个指定broker的地址(严格来说是所监听的网络接口,或者网卡),同时,也可以看出它还和下面的属性相关。 # Hostname the broker will advertise to producers and consumers. If

Posted in DevOps

使用Packer创建Digital Ocean镜像

1. 什么是Packer Packer没听说过,可能你听说过Vagrant;如果Vagrant都没听说过,那么请原谅我说这真是稍微有点out了(如果你知道DevOps这个词的话)。 Packer和Vagrant都出自HashiCorp这个公司,这个公司实在是太性感了,以至于我还专门写过一些介(ruǎn)绍(wén):http://slides.com/binliu/docker-and-hashicorp#/。 除了本文要说的Packer之外,HashiCorp的大杀器还包括: Serf:一个简单的去中心化的集群管理软件; Consul:跨DataCenter的服务发现、配置管理和编配软件; Terraform:一个高抽象度、消除基础设施物理差异,来对基础设施进行构建、变更和版本化的工具; VAULT:用于保存密码、token等机密信息的存储服务; Atlas:通过一种工作流,完成公司内部从开发到发布的流程支撑基础工具。 那么言归正传,什么是Packer呢?按照官方介绍: Packer is a tool for creating identical machine images for multiple platforms from a single source configuration. 也就是说,Packer是一款创建(OS)镜像的工具,它以代码为表现形式,并支持多种本地和云平台,比如支持VirtualBox的OVF和VMware的VMDK镜像,以及EC2、DigitalOcean、OpenStack、Google Compute Engine等主流云主机,甚至支持构建Docker镜像。 Packer的目的不是取代现有的配置管理工具,比如Chef或者Puppet等,而是可以和这些工具配合使用,沿用公司历史资产。 Packer的项目主页: https://packer.io/ 。 2. 为什么用Packer 首先,那就是基础设施代码化,即Infrastructure as Code。因为我们都是程序员,喜欢代码,喜欢命令行,我们喜欢在Shell执行命令,看结果在屏幕上流动那种感觉。 其次,有利于实现Immutable

Posted in DevOps, Tech

无觅相关文章插件,快速提升流量