CMDB介绍及四种实现方式

2019-01-08  本文已影响0人  aq_wzj

1. 作用:

自动帮我们收集服务器的信息, 并记录我们的变更信息

2. 收集服务器的元数据:

在实际开发中,收集服务器的信息总共有4种方案:

方案一: agent方式
执行流程
    1. 在每台服务器上放python脚本, 取得服务器的信息, 通过requests模块发送给API
    2. 服务器设置定时任务(crontab), 定时执行一次
    3. API起一个Django, 接收到数据以后写入数据库
    4. 将数据库的数据通过浏览器展示给用户
    
适用场景: 服务器很多的公司
优点: 速度快
缺点: 需要为每台服务器部署python脚本
方案二: ssh方式(可以通过parmiko, frbric, ansible等方式链接ssh,以paramiko为例)
执行流程
    第一步: 由管理员录入资产(主机名,SN等信息),通过后台管理,录入数据库
    第二步: 中控机从数据库获取主机列表
    第三步: 中控机通过paramiko登录到各服务器,执行命令获取服务器的信息, 返回给中控机
    第四步: 将其发送给API,再由API写入数据库
    
适用场景: 服务器不多的公司
优点: 不需要部署agent脚本
缺点: 需要ssh登录, 所以速度慢
import paramiko
   
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='c1.salt.com', port=22, username='root', password='123')
   
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
   
# 关闭连接
ssh.close()
方案三: saltstack方式

此方案本质上和第二种方案大致是差不多的流程,中控机发送命令给服务器执行。服务器将结果放入另一个队列中,中控机获取将服务信息发送到API进而录入数据库。

执行流程:
    第一步: 由管理员录入资产(主机名,SN等信息),通过后台管理,录入数据库
    第二步: salt-master从数据库获取未采集资产信息的服务器
    第三步: salt-master发送命令给salt-minion执行
    第四步: salt-master拿到执行结果
    第五步: 将结果发送给API
    第六步: API将其写入数据库

解释: 
    salt-master可以理解为主人
    salt-minion可以理解为奴隶

适用场景: 之前就在用saltstack的企业
优点: 速度快, 开发成本低
缺点: 依赖于第三方工具

saltstack的安装与配置

  1. 安装与配置

    master端:
    1. 安装salt-master
        yum install salt-master
    2. 修改配置文件:vim /etc/salt/master
        interface: 0.0.0.0    # 表示Master的IP 
    3. 启动
        service salt-master start
        
    slave端:
    1. 安装salt-minion
        yum install salt-minion
    2. 修改配置文件 vim /etc/salt/minion
        master: 10.211.55.4   # master的地址
        或
        master:
            - 10.211.55.4
            - 10.211.55.5
        random_master: True
        id: c2.salt.com   # 客户端在salt-master中显示的唯一ID
    3. 启动
        service salt-minion start
    
  2. 授权

    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
    
  3. 执行命令

    在master服务器上对salve进行远程操作

    salt 'c2.salt.com' cmd.run  'ifconfig'
    

    基于API的方式

    import salt.client
    local = salt.client.LocalClient()
    result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])
    
    

    参考安装:
    http://www.cnblogs.com/tim1blog/p/9987313.html
    https://www.jianshu.com/p/84de3e012753

方式四: Puppet(ruby语言开发)(了解)

每隔30分钟,通过RPC消息队列将执行的结果返回给用户

上一篇下一篇

猜你喜欢

热点阅读