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的安装与配置
-
安装与配置
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
-
授权
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服务器上对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消息队列将执行的结果返回给用户
网友评论