• CMDB04 /流程梳理、cmdb总结


    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会使性能降低一些
        
        
  • 相关阅读:
    <Android 基础(二十六)> 渐变色圆角Button
    Java 中父类怎么调用子类的方法?
    <Android 基础(二十五)> Frame Animation
    Java基础知识点
    HTTP请求流程(二)----Telnet模拟HTTP请求
    telnet远程登录协议
    HTTP协议详解
    STM32 SPI接口的NSS引脚
    TCP/IP
    以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解
  • 原文地址:https://www.cnblogs.com/liubing8/p/11892794.html
Copyright © 2020-2023  润新知