配置管理数据库方案
CMDB实现的四种方式
1.Agent脚本实现
本质:就是在各个服务器通过python运行脚本里的命令(用到了subprocess模块),然后将每台机器上执行的结果,返回给主机API,然后主机API收到这些数据之后,放入到数据库中,最终通过web界面展现给用户
2.SSH实现方式
本质:中控机通过Paramiko(py模块)登录到各个服务器上,然后执行命令的方式去获取各个服务器上的信息。(Paramiko,ansible和shell都是通过SSH远程连接服务器的)
服务器比较少,可以用下面方法实现
import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='10.0.0.100', port=22, username='root', password=1) # 执行命令 stdin, stdout, stderr = ssh.exec_command('ifconfig') # 获取命令结果 result = stdout.read() print(result) # 关闭连接 ssh.close()
3.saltstack方式
本质:和第二种方案大致是差不多的流程,中控机发送命令给服务器执行。服务器将结果放入另一个队列中,中控机获取将服务信息发送到API进而录入数据库。
(1)saltstack安装配置
master端(中控机): """ 1. 安装salt-master yum install salt-master 2. 修改配置文件:/etc/salt/master interface: 0.0.0.0 # 表示Master的IP 3. 启动 service salt-master start """ slave端(服务器端): """ 1. 安装salt-minion yum install salt-minion 2. 修改配置文件 /etc/salt/minion master: 10.0.0.100 # 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 # 授权所有 salt-key -a salve_id # 接受指定id的salve salt-key -r salve_id # 拒绝指定id的salve salt-key -d salve_id # 删除指定id的salve 等命令 """
(3)执行命令
salt 'localhost' cmd.run 'ifconfig'
基于API方式(有点兼容问题)
import salt.client local = salt.client.LocalClient() result = local.cmd('10.0.0.200', 'cmd.run', ['ifconfig'])
安装使用参考
4.Puppet(ruby语言开发)(很老)
每多少分钟,通过RPC消息队列将执行结果返回
各种方式应用
三种CMDB采集的方案: agent方式采集: 场景: 服务器比较多 缺点: 需要每一台服务器上部署 优点: 速度快 ssh类(parmiko fabric ansible): 缺点: 速度慢(通过ssh登陆[要有网络]到服务器上执行命令返回数据)需要一台中控机 优点: 不需要部署agent脚本 场景: 服务器比较少 salt-stack方式: 缺点: 每一台需要部署这个软件 优点: 速度快, 开发成本低 场景: 企业之前已经在用