首页 > 数据库技术 > 详细

CMDB04 /cmdb项目完善、总结

时间:2019-11-19 22:46:02      阅读:126      评论:0      收藏:0      [点我收藏+]

CMDB04 /cmdb项目完善、总结

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

2.远程连接服务器

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

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

3.向服务器上传文件

  • FTP/xftp6

  • lrzsz

  • scp命令

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

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

一般情况下:

  • windows

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

    scp

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命令,并返回。

5.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)
                                                                     ...

6.cmdb项目测试

6.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 
6.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 

7.公司里的规范

公司里对于服务器很多都是用主机名,不用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去连接他并采集资产。 

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

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

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

9.前端示例 cmdbmanage.py

  • 安装python2.7

  • 安装django

    pip2 install django==1.7.6
  • 安装MySQLdb / 安装pymysql

    pip2 install pymysql
    
    
    import pymysql
    pymysql.install_as_MySQLdb()
  • 安装 xlrd (读excel)

    pip2 install xlrd
  • 安装paramiko

    pip2 install paramiko
  • 安装 pillow

    pip2 install pillow 
  • 在数据库中导入数据

    create databse cmdb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    
    mysql -u root -p  cmdb < cmdb.sql
  • 在项目中修改数据库连接

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'cmdb',
            'USER': 'root',
            'PASSWORD': '222',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }
  • 运行项目

    python2 manage.py runserver 
  • 登录

    用户名:wupeiqi
    密码:123

项目总结

  • 项目名称

    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个月
        质疑时间短,开发资产采集很简单;资产管控平台也是有你来开发。

    注意:

    1.修改配置的路径

    BASE_DIR = os.path.dirname(os.path.abspath(__file__))

    2.为什么公司有ansible还要用paramiko去实现

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

CMDB04 /cmdb项目完善、总结

原文:https://www.cnblogs.com/liubing8/p/11892794.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!