CMDB04 /流程梳理、cmdb总结

1. 流程梳理

1.1 环境

  • 开发环境,在我们自己电脑上进行项目开发。

    例如:开发一个网站。 在自己电脑上开发+连接自己电脑的数据库。
  • 测试环境

    公司会给你提供一台服务器(阿里云)。
    IP:47.93.2.18
    用户名:root
    密码:123123
    把你开发的网站要部署在这个服务器上。
    - 安装必要的环境:python/django/requests/mysql
    - 把代码拷贝到这个服务器上
    - 让我们的程序运行起来。
    python aa.py
    python manage.py runserver 0.0.0.0:8000
  • 线上环境

    公司会给运维一个台服务器(阿里云)。
    IP:47.93.2.22
    用户名:root
    密码:123123 把你开发的网站要部署在这个服务器上。
    - 安装必要的环境:python/django/requests/mysql
    - 把代码拷贝到这个服务器上
    - 让我们的程序运行起来。
    python aa.py
    python manage.py runserver 0.0.0.0:8000

1.2 远程连接服务器

  • 开发者一般都是用xshell,通过ssh连接上远程服务器然后进行操作。

    ssh root@192.168.16.85
    • 用户名和密码连接
    • 公钥和私钥进行连接

1.3 向服务器上传文件

  • FTP/xftp6

  • lrzsz

  • scp命令

    scp 文件 root@目标服务器:目录
  • 基于git ( 公司做代码上线会利用 )

    开发:git push origin master
    运维:git clone xxx

一般情况下:

  • windows

    FTP
    lrzsz
    git终端来继续操作 scp
  • mac/linux

    scp

1.4 运维管理服务器

  • 运维管理500台服务器,由于数量太多,所以他们会借助于一些管理工具,例如:saltstack / ansible(paramiko)

  • 未借助工具

                                                                   服务器A(公钥)
    服务器B(公钥)
    运维 电脑(私钥) 服务器C(公钥)
    服务器D(公钥)
    服务器E(公钥)
    服务器...(公钥)
  • 借助工具(ansible/saltstack)

                                                                   服务器A(公钥)minion
    服务器B(公钥)minion
    运维 电脑(私钥) 服务器(salt-master) 服务器C(公钥)minion
    服务器D(公钥)minion
    服务器E(公钥)minion
    服务器...(公钥)minion
  • 单独操作

    在自己电脑上连接远程服务器A
    ssh root@服务器A
  • 批量操作

    在自己电脑上连接salt-master
    ssh root@salt-master
    在master服务器上执行命令
    salt "*" cmd.run "ifconfig"
    让所有的minion都去执行ifconfig命令,并返回。

2. cmdb项目

2.1 cmdb实现方式

  • 基于ssh实现,适用场景:公司没有用 saltstack/用了ansible/没有任何工具

    服务器(autoserver)       服务器(autoclient)
    服务器A(公钥)
    DB API 中控机(私钥) 服务器B(公钥)
    后台管理 服务器C(公钥)
    人 服务器D(公钥)
    服务器E(公钥)
    ...
  • 基于salt实现,使用场景:公司本身就有saltstack

    服务器(autoserver)       服务器(autoclient)
    服务器A(salt-minion)
    DB API 中控机(salt-master) 服务器B(salt-minion)
    后台管理 服务器C(salt-minion)
    人 服务器D(salt-minion)
    服务器E(salt-minion)
    ...

2.2 cmdb项目测试

2.2.1 salt模式进行
  • 我们需要三台服务器进行测试。

    192.168.16.64     做API和后台管理项目的部署
    192.168.16.85 做salt-master,在上面部署autoclient,用于资产采集。
    192.168.16.22 做salt-minion,让master去连接他并采集资产。
  • 第一步:安装并使用salt (运维)

    • master(192.168.16.85)

      1. 安装salt-master
      yum install salt-master
      2. 修改配置文件:/etc/salt/master
      interface: 0.0.0.0 # 表示Master的IP
      3. 启动
      service salt-master start
    • minion(192.168.16.22)

      1. 安装salt-minion
      yum install salt-minion 2. 修改配置文件 /etc/salt/minion
      master: 10.211.55.4 # master的地址
      id: c2.salt.com # 客户端在salt-master中显示的唯一ID
      3. 启动
      service salt-minion start
    • 在master上进行授权

      salt-key -L                # 查看已授权和未授权的slave
      salt-key -a salve_id # 接受指定id的salve salt-key -r salve_id # 拒绝指定id的salve
      salt-key -d salve_id # 删除指定id的salve
    • 在master上远程执行命令

      salt 'c2.salt.com' cmd.run  'ifconfig'
      
      
  • 第二步:项目开发

    • ......
    • ......
    • .......
  • 第三步:项目部署

    • 运行autoserver

      在django项目的setting中要修改
      
      ALLOWED_HOSTS = ["*",]
      
      
      # 启动配置
      python manage.py runserver 0.0.0.0:8000
      # 其他人可以使用IP地址进行访问
      http://192.168.16.64:8000/server/index/
    • 运行autoclient

      # 将autoclient上传到192.168.16.85
      scp
2.2.2 SSH模式
  • 第一步:生成一对公钥和私钥

    ssh-keygen
    
    
  • 第二步:公钥拷贝到远程服务器

    ssh-code-id -i id_rsa.pub root@192.168.16.22
    
    
  • 第三步:修改配置文件

    在settings中修改:
    SSH_PRIVATE_KEY_PATH = r'..id_rsa'
    MODE = "SSH" # SALT/SSH
  • 第四步:运行程序

    python app.py 
    
    

2.3 公司里的规范

  • 公司里对于服务器很多都是用主机名,不用IP。

    c1-bj-zw-shopping.com   192.168.16.64   做API和后台管理项目的部署
    c2-bj-zw-shopping.com 192.168.16.85 做salt-master,在上面部署autoclient,用于资产采集。
    c3-bj-zw-shopping.com 192.168.16.22 做salt-minion,让master去连接他并采集资产。

2.4 资产采集多久进行一次?如何进行?

  • 定时任务在中控机上定期执行脚本。

    crontab -e
    30 1 * * * /opt/python367/bin/python3 /data/app.py

3. 项目总结

  • 项目名称

    CMDB / 资产管理系统 / 服务器配置管理系统 / 运维自动化平台
    
     Configuration Management Database
    
    
  • 项目描述

    CMDB是一套用于自动化采集服务器资产信息的项目,由于公司对于资产维护成本比较高并且数据准确性越来越低,因为原来都是搭建了samba服务,在内部共享了excel实现。通过cmdb项目可以改善资产采集的功能,减低人员成本提高工作效率,本项目实现主要有 采集中控机/restful api/资产管控平台 实现。
    
    对于采集中控机可以支持多种模式进行操作,如:saltstack/ansible/paramiko默认,并且开发过程中遵循开放封闭原则并且利用 工厂模式 实现可扩展性的插件。
    
    对于api,是严格是遵循restful规范并使用 django rest framework框架实现,并在内通过反射机制实现资产变更记录以及资产的持久化处理。
    
    资产管控平台主要为运维及主管提供数据支持和部分报表,支持excel批量导入导出,支持利用时间轴清晰的展示服务器生命周期,基于highcharts实现数据报表的展示。 
    
    
  • 技术点(项目功能/我的职责)

    • 针对不同公司的业务开发,使用 paramiko/ansible/saltstack 实现远程采集资产的扩展。

    • 参考 middleware 实现源码并结合工厂模式,开发出了可插拔式的采集资产插件。

    • 考虑到项目的严谨性,对于项目中的插件使用主动抛出异常进行约束。

      - 有没有其他的约束?
      通过abc实现抽象类和抽象方法实现约束。
      - 你为什么不用abc?而用异常?
      abc 操作起来比较麻烦,也可以实现。
      我觉得异常会更加简洁一些,并且我参考了一些源码,他们内部也是通过异常实现。 import abc # 抽象类
      class Base(metaclass=abc.ABCMeta): # 抽象方法
      @abc.abstractmethod
      def process(self):
      pass
      class Foo(Base):
      pass
      Foo()
    • 通过定制和扩展drf 内置authentication组件,实现用户认证。

    • 在restful api中实现api/版本/认证的功能。

    • 支持对服务器资产进行批量的导入导出,内部使用xlrd/xlwt模块进行操作。

    • 对于公司的服务器资产进行根据业务线做 数据报表的处理。

    • 基于rbac实现权限的信息的校验。

  • 面试题相关

    • cmdb是怎么实现?

      cmdb是由三部分组成,其中包含:资产采集的中控机、API、资产管控平台。
      1.对于资产采集部分,先会通过requests向api请求今日未采集的服务器ip或者其服务器对应的域名,通过paramiko远程操作服务器(本质SSH)并采集资产信息,然后将资产信息汇报到API,在资产采集部分还继承了可扩展的功能,让我们定制插件时可以更加方便,实现起来也比较简单,参考django中间件的原理、开放封闭原则、工厂模式实现可插拔式的插件。
      2.api,基于restful规范和drf组件来实现完成,主要做资产入库以及资产变更处理。
      3.资产管控平台,对资产数据进行数据呈现和报表的处理。
    • 为什么要开发cmdb?

      公司以后想要搭建自动化运维平台,CMDB是搭建平台的基石。
      目前而言,公司资产信息不够准确,因为都维护在excel中,维护主要人,通过cmdb可以自动采集资产信息以及做资产变更记录。
    • 你们公司有多少台服务器?(物理机)

      70台服务器
      
      
    • 什么是品牌的服务器?

      戴尔
      
      
    • 资产采集都用到了那些命令?

      demidecode
      Megacli board -- sudo dmidecode -t1
      cpu -- cat /proc/cpuinfo
      disk -- sudo MegaCli -PDList -aALL
      memory -- sudo dmidecode -q -t 17 2>/dev/null
      nic -- sudo ip link show/sudo ip addr show
    • cmdb都用到了那些表?(13张表)

      用户表
      部门
      机房IDC
      服务器
      硬盘
      网卡
      内存
      变更记录 菜单表
      权限
      角色表
      角色和权限关系
      用户和角色的关系表
    • 多少人开发?

        1个人/2个人 + 运维人员
      
      
    • 开发了多久?

        3个月 ~ 6个月
      质疑时间短,开发资产采集很简单;资产管控平台也是有你来开发。
    • 为什么公司有ansible还要用paramiko去实现

      1.ansible的本质也是基于paramiko去实现的,
      2.ansible会使性能降低一些

CMDB04 /流程梳理、cmdb总结的更多相关文章

  1. zookeeper心跳机制流程梳理

    zookeeper心跳机制流程梳理 Processor链Chain protected void setupRequestProcessors() { RequestProcessor finalPr ...

  2. Eureka服务端源码流程梳理

    一.简述 spring cloud三步走,一导包,二依赖,三配置为我们简化了太多东西,以至于很多东西知其然不知其所以然,了解底层实现之后对于一些问题我们也可以快速的定位问题所在. spring clo ...

  3. .16-浅析webpack源码之编译后流程梳理

    这节把编译打包后的流程梳理一下,然后集中处理compile. 之前忽略了一个点,如下: new NodeEnvironmentPlugin().apply(compiler); // 引入插件加载 i ...

  4. 北航操作系统实验2019:Lab4-1流程梳理

    北航操作系统实验2019:Lab4-1流程梳理 前言 操作系统的实验课实在令人头秃.我们需要在两周时间内学习相关知识.读懂指导书.读懂代码.补全代码.处理玄学bug和祖传bug,以及回答令人窒息的思考 ...

  5. wordpress插件开发流程梳理

    1.声明一个插件 首先我们必须明白,wordpress的插件可以是单文件,也可以是多文件,css/html都不是必须的,以下举例暂且在单文件模式下 比如我们要创建一个名为 hellophp的插件,那我 ...

  6. K2 BPM_【解决方案】从流程梳理到落地,K2为企业打造流程管理闭环_全业务流程管理专家

    很多企业在进行流程管理体系建设的过程中,往往急于求成,还没有理清楚要“做什么”和“怎么做”,就开始大刀阔斧地进行改革优化.管理目标.建设标准的不统一,使得体系建设之间内容重复.要求冲突等现象层出不穷. ...

  7. APP测试流程梳理

    APP测试流程梳理 1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试 ...

  8. jeecg流程梳理学习

    jeecg 流程梳理 角色admin 管理员 fgld学校分管领导 bgs学校办公室 xbld系部领导 xbky系部科员jxky bmld部门领导 发文申请applyUserIdadmin${assi ...

  9. 智能问答中的NLU意图识别流程梳理

    NLU意图识别的流程说明 基于智能问答的业务流程,所谓的NLU意图识别就是针对已知的训练语料(如语料格式为\((x,y)\)格式的元组列表,其中\(x\)为训练语料,\(y\)为期望输出类别或者称为意 ...

随机推荐

  1. [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式

    题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...

  2. uiautomatorviewer 截取手机屏幕报错

    1. 解决办法: 1.在e盘新建一个文件夹,命名为app.uix 2.打开cmd命令,输入命令adb pull /sdcard/app.uix E:/app.uix 3.打开uiautomatorvi ...

  3. 文本溢出后,隐藏显示"..."和margin边距重叠

    一.隐藏加省略 单行文本: overflow: hidden; white-space: nowrap; text-overflow: ellipsis; 多行文本: overflow: hidden ...

  4. Android学习笔记长按事件的处理

    常见的长按事件 代码示例: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns ...

  5. 【JMeter_03】JMeter GUI操作界面介绍

    JMeter主界面主要分为 标题栏.菜单栏.工具栏.测试计划树形目录.内容展示区 标题栏:主要展示JMeter的程序版本.当前脚本的名称.脚本的储存路径 菜单栏:程序基本上所有功能的所属分类目录,基本 ...

  6. CSS中 隐藏元素的常用方法

    在CSS中,使某个元素在页面中消失的方法有很多,今天为大家介绍几种我常用的方式 . 一.display:none;   让元素直接从页面消失,不占用尺寸,会改变页面布局. 代码演示: 页面演示:在页面 ...

  7. 用python玩推理游戏还能掌握基础知识点,有趣又充实,你不试试吗?

    可能更多的人依然还在苦苦的学python各种知识点,但其实同样很多人,玩着游戏就把python学会了.     用python玩推理游戏,是这份python教程中的12个游戏的其中之一. 有关这份Py ...

  8. 01 . ELK Stack简介原理及部署应用

    简介 ELK并不是一款软件,是一整套解决方案,是由ElasticSearch,Logstash和Kibana三个开源工具组成:通常是配合使用,而且先后归于Elastic.co公司名下,简称ELK协议栈 ...

  9. 729. My Calendar I

    原题链接:https://leetcode.com/problems/my-calendar-i/description/ 我的答案 虽然自己实现出来了,但是没看懂这道题目考查的是什么?编程语言的熟练 ...

  10. 入门大数据---Hadoop是什么?

    简单概括:Hadoop是由Apache组织使用Java语言开发的一款应对大数据存储和计算的分布式开源框架. Hadoop的起源 2003-2004年,Google公布了部分GFS和MapReduce思 ...