zoukankan      html  css  js  c++  java
  • 运维工作梳理

    1.1 Linux运维的主要工作内容

      1、什么是linux运维

          参考博客:https://blog.csdn.net/dxt16888/article/details/80865720

          1. 运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常。

          2. 在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控、应用架构、存储 于一身的技术。

          3. 运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等。

          运维分类:

            1)运维开发是给应用运维开发运维工具和运维平台的

            2)应用运维是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查

            3)系统运维是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等

      2、运维的职责

          1. 保证服务的稳定运行;

          2. 考虑服务的可扩展性;

          3. 从系统的稳定性和可运维性的角度,提出开发需求;

          4. 定位系统的问题,甚至可以直接修正bug;

          5. 对突然出现的问题做到快速响应和处理;

      3、基础运维常见工作内容

          1. 服务监控技术:包括监控平台的研发、应用,服务监控准确性、实时性、全面性的保障

          2. 服务故障管理:包括服务的故障预案设计,预案的自动化执行,故障的总结并反馈到产品/系统的设计层面进行优化以提高产品的稳定性

          3. 服务容量管理:测量服务的容量,规划服务的机房建设,扩容、迁移等工作

          4. 服务性能优化:从各个方向,包括网络优化、操作系统优化、应用优化、客户端优化等,提高服务的性能和响应速度,改善用户体验

          5. 服务全局流量调度:接入服务的流量,根据容量和服务状态在各个机房间分配流量

          6. 服务安全保障:包括服务的访问安全、防攻击、权限控制等

          7. 服务自动发布部署:部署平台/工具的研发,及平台/工具的使用,做到安全、高效的发布服务

          8. 服务集群管理:包括服务的服务器管理、大规模集群管理等

          9. 服务成本优化:尽可能降低服务运行使用的资源,降低服务运行成本

          10. 数据库管理(DBA):通过设计、开发和管理高性能数据库集群,使数据库服务更稳定、更高效、更易于管理。

          11. 平台化的开发:类docker等平台的开发管理,及服务接入技术

    1.2 以devops交付环熟悉运维工作

      1、什么是devops交付环

          1. 我们把开发交付划分为:  计划  --> 编码 --> 构建 --> 测试 --> 版本 --> 部署 --> 运维 --> 监控 的一个闭环

          2. DevOps的目标是通过建立并不断完善持续交付的流水线

          3. 运维的职责覆盖了产品从设计到发布、运行维护、变更升级及至下线的生命周期

          

      2、产品发布前
          注:这个阶段运维工程师的职责是参与设计并把有关运维准入,主要包括

          1.  产品的业务熟悉;

          2. 产品架构设计的合理性评估,包括是否存在单点,是否可容错,是否有强耦合等,

          3. 同时需要提供产品设计的合理性建议以使产品能够满足上线发布并稳定运行的基本要求;

          4. 资源评估,包括所需的服务器资源、网络资源以及资源的分布等,同时把相关产品对资源预算申请的合理性,控制服务成本;

          5. 资源就位,将申请的服务器及基础环境/域名准备就位。

      3、产品发布

          1. 产品发布阶段运维工程师负责发布的具体工作,将具体的软件和系统/硬件资源整合形成产品并对外提供服务。

          2. 对于已在线服务的更新也属于发布范畴,这个时候的产品发布一般要保障在线发布,在不中断对外服务的情况下完成产品的升级。

          3. 对于大型复杂的变更也存在中止服务部署完成后再重新提供服务的情况,但这种情况需要运维工程师通过尽可能的技术手段来避免。

       4、产品运行维护

        1)监控:

            1. 对服务运行的状态进行实时的监控,随时发现服务的运行异常和资源消耗情况;

            2. 输出重要的日常服务运行报表以评估服务/业务整体运行状况,发现服务隐患;

        2)故障处理:

            1. 对服务出现的任何异常进行及时处理,尽可能避免问题的扩大化甚至中止服务。

            2. 这之前运维工程师需要针对各类服务异常,如机房/网络故障、程序bug等问题制定处理的预案,问题出现时可以自动或手动执行预案达到止损的目的。

            3. 除了日常小故障外,运维工程师还需要考虑产品不同程度受损情况下的灾难恢复,包括诸如地震等不可抗力导致大规模机房故障、在线产品被删除等对产品造成致命伤害的情况。

        3)容量管理:

            1. 包括服务规模扩张后的资源评估、扩容、机房迁移、流量调度等规划和具体实施。

      5、产品性能/成本优化

          1. 产品对外提供服务最重要的一点是用户体验,用户体验中非常重要的是产品的可用性和响应速度。

          2. 而如何用最合理的资源(如机器、带宽等)支持产品提供高可用和高速度的用户体验,这也是运维工程师的重要职责。

      6、产品下线

          1. 发展良好的互联网产品将始终在线对外提供服务,但互联网产品快速迭代,也存在相当多孵化的产品最后被淘汰的情况

          2. 这些产品都需要做下线处理,这个过程运维工程师主要做好资源回收的工作,将机器/网络等资源回收后纳入资源池中供其它服务使用

    1.3 Linux运维工作发展过程

                  运维发展过程

          

      1、手工管理阶段  

        1)业务规模

            1. 业务流量不大,服务器数量相对较少,系统复杂度不高。

            2. 对于日常的业务管理操作,大家更多的是逐台登录服务器进行手工操作,属于各自为战。

            3. 每个人都有自己的操作方式,缺少必要的操作标准、流程机制,比如业务目录环境都是各式各样的。

        2)工作职责

            1. 早期的运维团队在人员较少的情况下,主要是进行数据中心建设、基础网络建设、服务器采购和服务器安装交付工作。

            2. 几乎很少涉及线上服务的变更、监控、管理等工作。

            3. 这个时候的运维团队更多的属于基础建设的角色,提供一个简单、可用的网络环境和系统环境即可。

      2、工具批量操作阶段

        1)业务规模

            1. 随着服务器规模、系统复杂度的增加,全人工的操作方式已经不能满足业务的快速发展需要。

            2. 因此,运维人员逐渐开始使用批量化的操作工具,针对不同操作类型出现了不同的脚本程序。

            3. 此时,虽然效率提升了一部分,但很快又遇到了瓶颈,操作的质量并没有太多的提升。

            4. 我们开始建立大量的流程规范,比如复查机制,先上线一台服务器观察10分钟后再继续后面的操作,一次升级完成后至少要观察20分钟等。

            5. 这些主要还是靠人来监督和执行,但在实际过程中执行往往不到位,反而降低了工作效率。

        2)工作职责

            1. 这个时候的运维团队还会承担一些服务器监控的工作,同时会负责LVS、Nginx等与业务逻辑无关的4/7层运维工作。

            2. 这个时候服务变更更多的是逐台的手工操作,或者有一些简单批量脚本的出现。

            3. 监控的焦点更多的在服务器状态和资源使用情况上,对服务应用状态的监控几乎很少,监控更多的使用各种开源系统如Nagios、Cacti、openfalcon、等。

      3、平台管理阶段

        1)业务规模

            1. 在这个阶段,我们决定开始建设运维平台,通过平台承载标准、流程,进而解放人力和提高质量。

            2. 这个时候对服务的变更动作进行了抽象,形成了操作方法、服务目录环境、服务运行方式等统一的标准

            3. 通过平台来约束操作流程,如上面提到的上线一台服务器观察10分钟,程序的启停接口必须包括启动、停止、重载等。

            4. 在平台中强制设定暂停检查点,在第一台服务器操作完成后,需要运维人员填写相应的检查项,然后才可以继续执行后续的部署动作。

        2)工作职责

            1. 由于业务规模和复杂度的持续增加,运维团队会逐渐划分为应用运维系统运维两大块。

            2. 应用运维开始接手线上业务,逐步开展服务监控梳理、数据备份以及服务变更的工作。

            3. 随着对服务的深入,应用运维工程师有能力开始对服务进行一些简单的优化。

            4. 同时,为了应对每天大量的服务变更,我们也开始编写各类运维工具,针对某些特定的服务能够很方便的批量变更。

            5. 随着业务规模的增大,基础设施由于容量规划不足或抵御风险能力较弱导致的故障也越来越多,
                迫使运维人员开始将更多的精力投入到多数据中心容灾、预案管理的方向上。

      4、系统自调度阶段

        1)工作环境

            1. 更大规模的服务数量、更复杂的服务关联关系、各个运维平台的林立,原有的将批量操作转化成平台操作的方式已经不再适合。

            2. 需要对服务变更进行更高一层的抽象,将每一台服务器抽象成一个容器,由调度系统根据资源使用情况,将服务调度、部署到合适的服务器上。

            3. 自动化完成与周边各个运维系统的联动,比如监控系统、日志系统、备份系统等。

            4. 通过自调度系统,根据服务运行情况动态伸缩容量,能够自动化处理常见的服务故障。

            5. 运维人员的工作也会前置到产品设计阶段,协助研发人员改造服务使其可以接入到自调度系统中。

        2)工作职责

            1. 业务规模达到一定程度后,开源的监控系统在性能和功能方面,已经无法满足业务需求;

            2. 大量的服务变更、复杂的服务关系,以前靠人工记录、工具变更的方式不管在效率还是准确性方面也都无法满足业务需求;

            3. 在安全方面也出现了各种大大小小的事件,迫使我们投入更多的精力在安全防御上。

            4. 逐渐的,运维团队形成之前提到的5个大的工作分类,每个分类都需要有专精的人才。

            5. 这个时候系统运维更专注于基础设施的建设和运维,提供稳定、高效的网络环境,交付服务器等资源给应用运维工程师。

            6. 应用运维更专注于服务运行状态和效率,数据库运维属于应用运维工作的细化,更专注于数据库领域的自动化、性能优化和安全防御。

            7. 运维研发和运维安全提供各类平台、工具,进一步提升运维工程师的工作效率,使业务服务运行得更加稳定、高效和安全。

    1.4 Linux运维工作分类

           

      1、系统运维(SYS):

          1. 负责IDC、网络、CDN和基础服务的建设(LVS、NTP、DNS);

          2. 负责资产管理,服务器选型、交付和维修,网络建设、LVS负载均衡和SNAT建设

    '''1.IDC数据中心建设'''
    # 收集业务需求,预估未来数据中心的发展规模
    # 骨干网的分布,数据中心建筑,以及Internet接入
    # 网络攻击防御能力、扩容能力、空间预留、外接专线能力、现场服务支撑能力等方面评估选型数据中心
    
    '''2.网络建设 '''
    # 设计及规划生产网络架构
    # 包括:数据中心网络架构、传输网架构、CDN网络架构等,以及网络调优等日常运维工作。
    
    '''3.LVS 负载均衡 '''
    # LVS 是整个站点架构中的流量入口,根据网络规模和业务需求,构建负载均衡集群。
    # 完成网络与业务服务器的衔接,提供高性能、高可用的负载调度能力,以及统一的网络层防攻击能力。
    
    '''4.CDN 规划和建设 '''
    # CDN 工作划分为第三方和自建两部分
    # 根据业务发展趋势,规划CDN新节点建设布局
    # 完善CDN业务及监控,保障CDN 系统稳定、高效运行
    # 分析业务加速频道的文件特性和数量,制定最优的加速策略和资源匹配
    # 负责用户劫持等CDN日常故障排查工作
    
    '''5.服务器选型、交付和维护 '''
    # 负责服务器的测试选型,包含服务器整机、部件的基础性测试和业务测试,降低整机功率,提升机架部署密度等
    
    '''6.OS、内核选型和 OS 相关维护工作 '''
    # 负责整体平台的 OS 选型、定制和内核优化,以及 Patch 的更新和内部版本发布
    # 建立基础的YUM包管理和分发中心,提供常用包版本库
    # 跟进日常各类 OS 相关故障
    # 针对不同的业务类型,提供定向的优化支持
    
    '''7.资产管理 CMDB '''
    # 记录和管理运维相关的基础物理信息,包括: 数据中心、网络、机柜、服务器、ACL、IP等各种资源信息
    # 制定有效的流程,确保信息的准确性;
    # 开放API接口,为自动化运维提供数据支持
    
    '''8.基础服务建设 '''
    # 业务对 DNS、NTP、SYSLOG 等基础服务的依赖非常高,需要设计高可用架构避免单点,提供稳定的基础服务
    系统运维详细工作职责

      2、应用运维(SRE):

          1. 应用运维负责线上服务的变更、服务状态监控、服务容灾和数据备份等工作,对服务进行例行排查、故障应急处理等工作

          2. 工作职责如下:设计评审、服务管理、资源管理、例行检查、预案管理、数据备份。

          3. 业务运维工作细则

            1)监控线上的服务质量
            2)响应异常/处理突发故障
            3)在线发布/升级产品
            4)和相应产品线的研发和测试协调处理产品问题

    '''1.设计评审 '''
    # 在产品研发阶段,参与产品设计评审,从运维的角度提出评审意见,使服务满足运维准入的高可用要求。
    
    '''2.服务管理 '''
    # 负责制定线上业务升级变更及回滚方案,并进行变更实施
    # 能够发现服务上的缺陷,及时通报并推进解决
    # 完善监控内容,提高报警准确度
    # 在线上服务出现故障时,第一时间响应
    
    '''3.资源管理 '''
    # 对各服务的服务器资产进行管理,梳理服务器资源状况、数据中心分布情况、网络专线及带宽情况
    # 能够合理使用服务器资源,根据不同服务的需求,分配不同配置的服务器,确保服务器资源的充分利用
    
    '''4.例行检查 '''
    # 根据制定的服务排查点,对服务进行定期检查
    # 对排查过程中发现的问题,及时进行追查,排除可能存在的隐患
    
    '''5.预案管理 '''
    确定服务所需的各项监控、系统指标的阈值或临界点,以及出现该情况后的处理预案。
    建立和更新服务预案文档,并根据日常故障情况不断补充完善,提高预案完备性。
    
    '''6.数据备份 '''
    # 制定数据备份策略,按规范进行数据备份工作。
    # 保证数据备份的可用性和完整性,定期开展数据恢复性测试。
    应用运维详细工作职责

      3、运维开发

          1. 是给应用运维开发运维工具和运维平台的

          2. 主要包含的平台:工单系统、CMDB、监控系统、ELK日志系统、CI/CD、LDAP、FAQ、培训系统、OpenStack平台

      4、数据库运维(DBA):

          1. 数据库运维负责数据存储方案设计、数据库表设计、索引设计和SQL优化,

          2. 对数据库进行变更、监控、备份、高可用设计等工作,详细的工作内容如下

          3. 设计评审、容量规划、数据备份与灾备、数据库监控、数据库安全、数据库高可用和性能优化

          4. 自动化系统建设、运维研发、运维平台、监控系统、自动化部署系统

      5、运维安全(SEC):

          1. 运维安全负责网络、系统和业务等方面的安全加固工作

          2. 进行常规的安全扫描、渗透测试,进行安全工具和系统研发以及安全事件应急处理

          3. 工作内容如下:安全制度建立、安全培训、风险评估、安全建设、安全合规、应急响应。

    1.5 Linux运维日常使用软件和技能        

      1、运维工程师使用的运维平台和工具

          1. Web服务器:apache、tomcat、nginx

          2. 监控:prometheus、zabbix、openfalcon、nagios、cacti

          3. 自动部署:ansible、saltstack、sshpt

          4. 配置管理:puppet、cfengine

          5. 负载均衡:keepalive、lvs、haproxy、nginx

          6. 备份工具:rsync、wget

          7. 分布式数据库:hbase、redis、MongoDB

          8. 容器:docker、k8s、docker-compose、swarm

          9. 安全:kerberos、selinux、acl、iptables

          10. 虚拟化:openstack、xen、kvm

          11. 问题追查:netstat、top、tcpdump、last

      2、运维工程师要掌握的技能

          1. 扎实的计算机基础知识,包括计算机系统架构,操作系统,网络技术等;

          2. 通用应用方面需要了解操作系统、网络、安全,存储,CDN,DB等,知道其相关原理;

          3. 编程能力,小到运维工具的开发大到大型运维系统/平台的开发都需要有良好的编程能力;

          4. 数据分析能力:能够整理、分析系统运行的各项数据,从中发现问题及找到解决方向;

          5. 丰富的系统知识,包括系统工具、典型系统架构、常见的平台选型等;

      3、运维工程师的软素质要求(简历中自我评价可以参考)

          1. 时间管理能力,特别是碎片化时间的处理能力;

          2. 沉稳的心态,面对紧急情况时需要处变不惊;

          3. 沟通能力、团队协作,运维工作跨部门、跨工种工作很多,需善于沟通、并且团队协作能力要强;

          4. 工作中需胆大心细:胆大才能创新、不走寻常路,特别对于运维这种新的工种,更需创新才能促进发展;

          5. 心细,运维工程师是最高线上权限者,需要谨慎心细;

          6. 主动性、执行力,能够主动学习国际国内的运维技术,并引入到工作中,提高运维的质量和效率;

  • 相关阅读:
    字符集WideCharToMultiByte
    [HDF]hdf-4.2.6类库的使用
    [GDAL]读取HDF格式的calipso数据
    C#读写BitMap及颜色相乘
    [Slimdx]顶点和索引缓冲,绘制了2个分离的三角形
    [GDAL]写入shp
    几个环境学概念
    MIConvexHull
    几个力学概念
    [转载]如何破解Excel VBA密码
  • 原文地址:https://www.cnblogs.com/jiaxinzhu/p/12507678.html
Copyright © 2011-2022 走看看