分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]

       2014年11月21日至22日,51CTO传媒主办的2014WOT全球软件技术峰会·深圳站将在深圳召开,技术人员和企业实践用户将齐聚深圳。WOT是由51CTO传媒主办的国内最具有影响的技术峰会,自2012年以来,秉承专注技术、服务技术人员的理念,获得了广大IT从业者和技术爱好者的一致认可,成为了业界重要的技术分享交流平台以及人脉拓展平台。
    本次2014 WOT·深圳站将邀请国内外顶级的互联网及创新企业技术负责人,首次对外公开其当下最in技术,分享涵盖六大主题,共有30+课程,移动游戏运营、运维开发、Web安全、数据挖掘、团队管理等以及未来两三年的技术趋势。点击报名>>

本次采访对象是本次2014WOT深圳站<自动化运维>论坛的演讲人刘天斯,目前为腾讯的高级运维工程师

点击在新窗口中浏览此图片

1、您目前在贵公司负责哪些事情?能否先简单谈谈您在运维领域的从业经验,和您对此运维的理解?

        从事运维方面的工作刚满10年,前6年负责天涯社区的系统架构及运维的工作,2011年入职腾讯,先后负责静态类、大游戏下载业务的CDN运营,以及负责公司所有游戏的大数据接入、分析、提取等工作。

        简单分享个人在运维领域从业的两个经验:

        1)关于运维自动化这件事情,几乎所有的IT企业都在做,看似是一件非常好的事情,忽略了前提条件,往往付出更大的代价及运营成本。所提到的前提条件便是运维体系“标准化”、“流程化”、“规范化”的建设,覆盖企业中资源、版本、业务发布、监控、事件管理等环节。有了这些作为基础铺垫,运维自动化的建设才会很顺利实施,达成预期。

        2)业务的生命周期管理,运维扮演的角色。当一个产品在规划之初运维人员须第一时间介入参与,根据产品特点,提供业务平台前期架构设计、资源评估等数据。当产品进入开发阶段,须与开发人员保持密切沟通与互动,提供业务接入、缓存、存储、监控、安全等方面规范,以便在编码阶段更好磨合与对接,避免上线后反复做不必要的版本迭代,也使得开发出来的产品具备更高的可运维性。待业务上线后,务必定期同步相关运营数据给产品与开发人员侧,为后续优化、改进的工作提供数据支持,这也恰恰能体现运维人员的专业性及团队合作意识。

        运维体系中各个环节的工作犹如散落在地上的珠子,每个珠子分别代表事件、资源、监控、安全、自动化、日常工作等,看似是七零八落的,我们需要利用“流程”这条线将所有的珠子串起来,珠子的前后顺序及间隔由“标准规范”来控制。这样就形成了一条完整的链子,是一个有机的整体,最后会促使运维工作开展得井井有条。这条链子扣在三个点子上,就是“质量”、“效率”、“成本”。

2、能否讲讲这么多年运维工作的变化与演进?

云计算给IT行业带来的巨大冲击,从最初的不信任逐渐到认可,到最后各类云计算应用的落地普及。当然,这也给运维人员带来非常大的挑战,尤其承担企业私有云的建设,运维人员除了具备传统运维的能力外,还需要深入理解业务资源使用的特点,例如区分是计算性、内存型、IO型还是存储型,同时需要对资源进行合理的规划及定义扩容规则。私有云作为资源的一个大池子,如何保持其弹性,需要具备一套精准的监控手段,配合自动化运维工具来保障,包括自动化安装部署、配置管理、存储管理、故障处理、备份容灾等。实现业务快速上线,资源快速扩容,同时具备高可用的能力。在这种大背景下,运维人员除了会用“云”,且要求用好“云”,才能给企业带来价值。另外基于容器实现的虚拟化(Docker)已经兴起,将给业务的打包、部署、迁移、测试等都会带来革命性的变革,运维准备好了吗?

3、随着如今大数据的爆发,这给运维工作带来了怎样的冲击与改变?

大数据在企业做精细运营方面发挥了巨大的作用,作为底层服务支撑的运维,需要掌握大数据生态圈中关键技术点,包括Hadoop、hive、hbase、spark、storm等平台的日常运营,需要解决包括资源调度、数据接入、快速扩容、节点故障处理、高可用、数据存储生命周期管理等问题,这给运维人员提出了更高的要求,同时也给运维工作带来了新的机遇,一典型案例是将所有告警接入storm实时计算分析,过滤出有效告警,同时将信息入库Hadoop,以便做历史档的离线分析,让运维人员更懂业务。

4、贵公司在监控上用了哪些技术?使用开源的还是自主研发?

公司内部使用了自研方式实现监控体系的构建,局部会使用开源工具作为补充。

5、您认为目前国内的自动化平台以及数据可视化平台建设如何?还需要加强哪方面发展?

        自动化运维是每个企业都在追求的终极目标,做到一键触发业务上线、故障自愈、资源自动调度、高质量数据报表及业务智能分析等,既然是目标,说明大部分都还在路上,即使国内一线的互联网企业也未能达到该理想的状态。自动化之路是一个复杂的系统工程,是一个长期积累、沉淀且不断优化的过程。由于互联网行业的特殊性,包括新技术不断涌入及快速迭代,另一方面是互联网业务日新月异,各种颠覆性的产品层出不穷。作为服务支撑,这也给自动化运维带来变数及挑战。

        在国内需要加强的部分还是资源与技术的共享,很多时候大家都在同一件事情,贡献一个成熟且通用的组件对业界的影响是深远的,阿里在这方面做得就非常好。在个人著作《Python自动化运维:技术与最佳实践》中也分享一些实现方法与实践案例,可作参考。

6、您认为一名合格的运维工程师是如何定义的?需要具备哪些因素?

        我认为一名合格的运维工程师需要具备高度的责任心,有一定的沟通及协调能力,同时需要具备发现问题及解决问题的能力,平时要多思考,多总结,多输出,以便将现有的沉淀更好传承下去,即使人员变动也不会出现断层。另外对资源、质量要非常敏感,有一定的规划及ITIL能力。对运营的业务要做到全面性的了解,包括提供的服务、总体架构、技术实现原理以及存在的问题等。在技能方面需要熟悉主流的运维相关技术,包括网络、设备、操作系统、负载均衡、缓存、数据库、云计算技术等方面,并关注最新技术发展动向,评估并思考如何运用到实际工作当中,解决工作中碰到的问题。同时,需要具有很好的开发能力,理由是没有人比我们更清楚我们需要什么的平台或工具,在与产品或开发沟通时,才有更多的发言权,甚至是主导权。

原文:【2014WOT深圳站讲师专访】刘天斯:Docker的到来,运维准备好了么?
Tags: , , ,

        Docker的生态日趋成熟,开源社区也不断孵化出优秀的周边项目,覆盖网络、监控、维护、部署、开发等方面。帮助开发、运维人员快速构建、运营Docker服务环境,其中也不乏有大公司的影子,如Google、IBM、Redhat,甚至微软也宣称后续将提供Docker在Windows平台的支持。Docker的发展前景一片大好。但在企业当中,如何选择适合自己的Docker构建方案?可选的方案有kubernetes与CoreOS(都已整合各类组件),另外一种方案为Haproxy+etcd+confd,采用松散式的组织结构,但各个组件之间的通讯是非常严密的,且扩展性更强,定制也更加灵活。下面详细介绍如何使用Haproxy+etcd+confd构建一个高可用及自动发现的Docker基础架构。
一、架构优势
        约定由Haproxy+etcd+confd+Docker构建的基础服务平台简称“HECD” 架构,整合了多种开源组件,看似松散的结构,事实上已经是一个有机的整体,它们互相联系、互相作用,是Docker生态圈中最理想的组合之一,具有以下优势:
      自动、实时发现及无感知服务刷新;
      支持任意多台Docker主宿机;
      支持多种APP接入且打散至不分主宿机;
      采用Etcd存储信息,集群支持可靠性高;
      采用Confd配置引擎,支持各类接入层,如Nginx;
      支持负载均衡、故障迁移;
      具备资源弹性,伸缩自如(通过生成、销毁容器实现);

二、架构说明
        在HECD架构中,首先管理员操作Docker Client,除了提交容器(Container)启动与停止指令外,还通过REST-API方式向Etcd(K/V)存储组件注册容器信息,包括容器名称、主宿机IP、映射端口等。Confd配置组件会定时查询Etcd组件获取最新的容器信息,根据定义好的配置模板生成Haproxy配置文件Haproxy.cfg,并且自动reload haproxy服务。用户在访问业务服务时,完全没有感知后端APP的上线、下线、切换及迁移,达到了自动发现、高可用的目的。详细架构图见图1-1。
点击在新窗口中浏览此图片

图1-1 平台架构图


        为了方便大家理解各组件间的关系,通过图1-2进行架构流程梳理,首先管理员通过Shell或api操作容器,下一步将容器信息注册到Etcd组件,Confd组件会定时查询Etcd,获取已经注册到Etcd中容器信息,最后通过Confd的模板引擎生成Haproxy配置,整个流程结束。
点击在新窗口中浏览此图片

图1-2架构流程图


        了解架构流程后,我们逐一对流程中各组件进行详细介绍。
1、Etcd介绍
        Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。
          简单:支持 curl 方式的用户 API (HTTP+JSON)
          安全:可选 SSL 客户端证书认证
          快速:单实例可达每秒 1000 次写操作
          可靠:使用 Raft 实现分布式
2、Confd介绍
        Confd是一个轻量级的配置管理工具。通过查询Etcd,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。
3、Haproxy介绍
        HAProxy是提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。(来源百科)

三、架构部署
        平台环境基于Centos6.5+Docker1.2构建,其中Etcd的版本为etcd version 0.5.0-alpha,Confd版本为confd 0.6.2,Haproxy版本为HA-Proxy version 1.4.24。下面对平台的运行环境、安装部署、组件说明等进行详细说明,环境设备角色表如下:
点击在新窗口中浏览此图片

1、组件安装
    1.1 Docker安装
        SSH终端登录192.168.1.22服务器,执行以下命令:

    1.2 Haproxy、confd安装
        SSH终端登录192.168.1.20服务器,执行以下命令:

    1.3 Etcd(v0.4.6)安装
        SSH终端登录192.168.1.21服务器,执行以下命令:

2、组件配置
    2.1 Etcd配置
        由于etcd是一个轻量级的K/V存储平台,启动时指定相关参数即可,无需配置。

        由于etcd具备多机支持,参数“-peer-addr”指定与其它节点通讯的地址;参数“-addr”指定服务监听地址;参数“-data-dir”为指定数据存储目录。
        由于etcd是通过REST-API方式进行交互,常见操作如下:
    1) 设置(set) key操作

    2) 获取(get) key信息

    3) 删除key信息

    更多操作API见https://github.com/coreos/etcd/blob/master/Documentation/api.md。

2.2 Confd+Haproxy配置
        由于Haproxy的配置文件是由Confd组件生成,要求Confd务必要与haproxy安装在同一台主机上,Confd的配置有两种,一种为Confd资源配置文件,默认路径为“/etc/confd/conf.d”目录,另一种为配置模板文件,默认路径为“/etc/confd/templates”。具体配置如下:
创建配置文件目录
# mkdir -p /etc/confd/{conf.d,templates}
(1)配置资源文件
        详细见以下配置文件,其中“src”为指定模板文件名称(默认到路径/etc/confd/templates中查找);“dest”指定生成的Haproxy配置文件路径;“keys”指定关联Etcd中key的URI列表;“reload_cmd”指定服务重载的命令,本例中配置成haproxy的reload命令。
【/etc/confd/conf.d/ haproxy.toml】

(2)配置模板文件
        Confd模板引擎采用了Go语言的文本模板,更多见http://golang.org/pkg/text/template/,具备简单的逻辑语法,包括循环体、处理函数等,本示例的模板文件如下,通过range循环输出Key及Value信息。
【/etc/confd/templates/haproxy.cfg.tmpl】

(3)模板引擎说明
        本小节详细说明Confd模板引擎基础语法与示例,下面为示例用到的KEY信息。

1、base
    作为path.Base函数的别名,获取路径最后一段。
{{ with get "/app/servers/prickly_blackwell"}}
    server {{base .Key}} {{.Value}} check
{{end}}

2、get
    返回一对匹配的KV,找不到则返回错误。
{{with get "/app/servers/prickly_blackwell"}}
    key: {{.Key}}
    value: {{.Value}}
{{end}}

3、gets
    返回所有匹配的KV,找不到则返回错误。
{{range gets "/app/servers/*"}}
    {{.Key}} {{.Value}}
     {{end}}

4、getv
    返回一个匹配key的字符串型Value,找不到则返回错误。
{{getv "/app/servers/cocky_morse"}}

5、getvs
    返回所有匹配key的字符串型Value,找不到则返回错误。
        {{range getvs "/app/servers/*"}}
           value: {{.}}
        {{end}}

6、split
    对输入的字符串做split处理,即将字符串按指定分隔符拆分成数组。
        {{ $url := split (getv "/app/servers/cocky_morse") ":" }}
          host: {{index $url 0}}
          port: {{index $url 1}}

7、ls
    返回所有的字符串型子key,找不到则返回错误。
{{range ls "/app/servers/"}}
   subkey: {{.}}
{{end}}

8、lsdir
    返回所有的字符串型子目录,找不到则返回一个空列表。
{{range lsdir "/app/"}}
   subdir: {{.}}
{{end}}

(4)启动confd及haproxy服务
        下面为启动Confd服务命令行,参数“interval”为指定探测etcd的频率,单位为秒,参数“-node”为指定etcd监听服务主地址,以便获取容器信息。

3、容器配置
        前面HECD架构说明内容,有讲到容器的操作会即时注册到etcd组件中,是通过curl命令进行REST-API方式提交的,下面详细介绍通过SHELL及Python-api两种方式的实现方法,支持容器启动、停止的联动。

    3.1、SHELL实现方法
        实现的原理是通过获取“Docker run ***”命令输出的Container ID,通过“docker inspect Container ID”得到详细的容器信息,分析出容器服务映射的外部端口及容器名称,将以“/app/servers/容器名称”作为Key,“主宿机: 映射端口”作为Value注册到etcd中。其中Key信息前缀(/app/servers)与“/etc/confd/conf.d/haproxy.toml”中的keys参数是保持一致的。
【docker.sh】

docker.sh使用方法:
    1) 启动一个容器
    # ./docker.sh run yorko/webserver:v3(镜像)
    2) 停止一个容器
    # ./docker.sh stop berserk_hopper(容器名)

3.2、Docker-py API实现方法
        通过Python语言调用Docker-py的API实现容器的远程操作(创建、运行、停止),并结合python-etcd模块对etcd进行操作(set、delete),达到与SHELL方式一样的效果,很明显,Docker-py方式更加容易扩展,可以无缝与现有运营平台对接。
        为兼顾到远程API支持,需对docker启动文件“exec”处进行修改,详细见如下:
# vi /etc/init.d/docker

启动容器的程序如下:
【docker_run.py】

停止容器的程序如下:
【docker_stop.py】

注意:
        由于容器是无状态的,尽量让其以松散的形式存在,映射端口选项要求使用“-P”参数,即使用随机端口的模式,减少人手干预。

四、业务上线
        HECD架构已部署完毕,接下来就是让其为我们服务,案例中使用的镜像“yorko/webserver:v3”为已经构建好的LAMP平台。类似的镜像也可以在docker-pub中下载到,开始跑起,运行dockery.sh创建两个容器:

        访问Haproxy监控地址:http://192.168.1.20/admin-status,刚创建的容器已经添加到haproxy中,见图1-3。
点击在新窗口中浏览此图片

图1-3 Haproxy监控后台截图


        1)观察Haproxy的配置文件(更新部分):

        2)访问php测试文件http://192.168.1.20/info.php
点击在新窗口中浏览此图片

图1-4 php测试文件截图


        从图1-4可以看出,获取的服务器端IP为容器本身的IP地址(172.17.0.11),在System环境变量处输出容器名为“598cf10a50a2”的信息。

参考:
http://ox86.tumblr.com/post/90554410668/easy-scaling-with-docker-haproxy-and-confd
https://github.com/AVGP/forrest/blob/master/forrest.sh
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]