Saltstack知多少
Saltstack是一种全新的基础设施管理方式,是一个服务器基础
架构集中化管理平台,几分钟之内就可以运行起来,速度特别快
,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务
器,显著的降低人力与运维成本,它具备配置管理,远程执行,监
控等功能,一般可以理解为简化版的puppet和加强版的lunc,通过
部署saltstack环境,可以在成千上万台服务器上做到批量执行命令,
根据不同的业务特性进行配置集中化管理、分发文件、采集服务器信
息,操作系统基础及软件包的管理,saltstack是运维人员很高的工作
效率,规范业务配置与操作的利器。saltstack基于Python语言实现,
结合轻量级消息队列(ZeroMQ) (Saltstack的通信模式总共分为两种模
式,ZeroMQ、REAT,基于REAT目前还不稳定,通常选择ZerMQ模
式,基于REAT目前还不是太稳定,)与Python第三方模块(Pyzmq、P
yCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
Saltstack的运行模式:
local: 本地一台机器玩,不建议。
Master/Minion: 通过server/agent方式进行管理,效率很高,批量的
管理1000台机器,25秒搞定。
Salt SSH: 通过SSH方式进行管理,效率相对来说比较低,(批量管理
机器,83秒搞定)
Saltstack三大功能
远程执行,(执行远程命令)
配置管理(状态管理)
云管理
Ssltstack特征:
1、部署简单,方便
2、支持大部分UNIX/Linux及Windows环境:
3、支持集中化管理
4、配置简单,功能强大,扩展性强。
5、主控端(master)和被控制(minion)基于证书认证,安全可靠
6、支持API及自定义模块,可通过Python轻松扩展
Master与Minion认证:
1、minion在第一次启动时,会在/etc/salt/pki/minion(该路径在/etc/salt
/minion里面进行设置)下自动生成minion.pem (private key) 和 minion.pub
(public.key),然后将minion.pub发送给master。
2、master在接收到minion的public.key后,通过ssh-key命令accept
minion public.key,这样master的/etc/salt/pki/master/minion下的将会
存放minion id 命令的public.key,然后master就能对minion发送指令了。
Master与Minion的连接
1、saltstack master启动后默认监听4505和4506两个端口,4505(pub
lish_port) 为saltstack的消息发布系统,4506(rel_port)为saltstack为
客户端与服务端通信的端口,如果使用isof查看4505端口,就会发现
所有的minion在4505端口持续保持在ESTATBLSHED状态。
2、minion与master之间的通信模式如下:
实验主机:
远程控制主机: 172.25.68.1(server1)
远程主机1: 172.25.68.2(server2)
远程主机2: 172.25.68.3(server3)
进行saltstack软件及其依赖性的安装:
在三台实验机上进行如下操作:
[root@foundation68 2018]# ls
libsodium-1.0.16-1.el7.x86_64.rpm PyYAML-3.11-1.el7.x86_64.rpm
openpgm-5.2.122-2.el7.x86_64.rpm repodata
python2-libcloud-2.0.0-2.el7.noarch.rpm salt-2018.3.3-1.el7.noarch.rpm
python-cherrypy-5.6.0-2.el7.noarch.rpm salt-api-2018.3.3-1.el7.noarch.rpm
python-crypto-2.6.1-2.el7.x86_64.rpm salt-cloud-2018.3.3-1.el7.noarch.rpm
python-futures-3.0.3-1.el7.noarch.rpm salt-master-2018.3.3-1.el7.noarch.rpm
python-msgpack-0.4.6-1.el7.x86_64.rpm salt-minion-2018.3.3-1.el7.noarch.rpm
python-psutil-2.2.1-1.el7.x86_64.rpm salt-ssh-2018.3.3-1.el7.noarch.rpm
python-tornado-4.2.1-1.el7.x86_64.rpm salt-syndic-2018.3.3-1.el7.noarch.rpm
python-zmq-15.3.0-3.el7.x86_64.rpm zeromq-4.1.4-7.el7.x86_64.rpm
yum install -y * ###进行所有软件的安装
在server1上进行服务的开启和端口的查看:
systemctl start salt-master ###进行服务的开启
netstat -antlp ###进行端口的查看
说明:4505为消息发布系统端口,4506为通信端口
在setver2和server3上进行服务的开启和端口的查看
systemctl start salt-minion ###在远程主机上进行服务的开启
netstat -antlp ###进行服务端口的查看
在minion端进行配置文件的修改:
[root@server2 ~]# vim /etc/salt/minion ###进行配置文件的编辑
systemctl restart salt-minion ###进行服务的重启
进行salt-key信息的查看和salt-key信息的添加
salt-key -L ###进行salt-key信息的查看
salt-key -A ###添加系当前可用的节点
进行主机ping通的测试
[root@server1 ~]# salt '*' test.ping ###进行主机ping测试
进行lsof软件的下载,查看端口4505的状态
yum install -y lsof ###进行lsof软件的下载
lsof -i :4505 ###进行端口信息的查看
一直处于连接状态。
我们发现在主控制机和远程主机相互认证完毕之后,他们的公钥将发生交换,简单来说就是
master产生的公钥会复制一份到远程主机,而远程主机也会将自己的公钥复制一份到主控制
机,这样可以实现主控机信息的发送和信息的回收。
在master端:
在server2端:
在server3端:
进行基本salt命令的测试:
[root@server1 ~]# salt '*' cmd.run 'df -h' ###进行远程主机挂载情况的查看
[root@server1 ~]# salt '*' cmd.run 'hostname' ###进行远程主机名的查看
进行配置文件的编辑,使其可以在特定的目录中进行设定发布远程命令
vim /etc/salt/master ###在master端进行配置文件的编辑
mkdir /srv/salt ###进行目录的建立
systemctl restart salt-master ###进行服务的重启
实验测试:使用saltstack实现远程主机httpd软件的安装:
vim /srv/salt/apache/install.sls ###进行发布sls文件的编辑
mkdir /srv/salt/apache/files ###进行配置文件的存放(存放httpd的配置文件)
vim /srv/salt/apache/files/index.html ###进行apache默认发布文件的编辑
cd /srv/salt/apache ###进行目录的切换
[root@server1 apache]# salt '*' state.sls apache.install ###进行测试
install.sls文件:
进行测试:
在浏览器上进行访问测试:
在files中进行配置文件的改变,再次进行测试:
vim /srv/salt/apache/files/httpd.conf ###进行配置文件的修改(修改端口为8080)
[root@server1 apache]# salt '*' state.sls apache.install ###进行测试
在浏览器上进行访问测试:
说明watch监控已经启用.
使用saltstack实验远程主机ngin x的源码安装:
vim /srv/sslt/nginx/install.sls ###进行sls文件的编辑
vim /srv/salt/nginx/service.sls ###进行sls文件的编辑
mkdir files ###进行存放配置文件的建立
cd files ###进行目录的切换
install.sls文件
service.sls文件
files文件中存放的文件:(nginx配置文件,nginx的systemctl 的配置文件)
nginx配置文件:
nginx的systemctl 配置文件
进行测试:
[root@server1 nginx]# salt '*' state.sls nginx.service ###进行推送
在远程主机上进行查看:
编辑top.sls文件,对于不同的主机安装不同的应用
cd /srv/salt/apache ###进行目录的切换
vim instll.sls ###进行sls文件的编辑
vim service.sls ###进行sls文件的编辑
cd /srv/salt/ ###进行目录的切换
vim top.sls ###进行top.sls文件的编辑
install.sls文件:
service.sls文件
top.file文件:
进行测试:
[root@server1 salt]# salt '*' state.highstate ###进行测试
salt的grains主要是存储静态的数据,主要是minion端的一些数据,比如,hostname,内存大小
, IP , CPU等一些数据,主要是为了存储minion端.
minion在启动时会读取grains数据,如果有新的grains数据需要重启minion服务,或者在master
端使用salt命令进行刷新.
进行grains存储信息的查看
[root@server1 salt]# salt '*' grains.items ###进行远程主机信息的查看
在远程主机上进行设定,使用静态grain在配置文件中进行设定:
在server2上:
vim /etc/salt/minion ###进行配置文件的编辑
systemctl restart salt-minion ###进行服务的重启
在server3上:
vim /etc/salt/minion ###进行配置文件的编辑
systemctl restart salt-minion ###进行服务的重启
在主控制机进行测试:
[root@server1 salt]# salt '*' grains.item roles ###进行测试
另一种配置方法:在/etc/salt/grains进行设定
在server2上关闭之前的设定:
vim /etc/salt/minion ###进行配置文件的编辑
systemctl restart salt-minion ###进行服务的重启
在server3上关闭之前的设定:
vim /etc/salt/minion ###进行配置文件的编辑
systemctl restart salt-minion ###进行服务的重启
进行测试:
在/etc/salt/grains中进行设定:
在server2上
vim /etc/salt/grains ###进行grains文件的编辑
在server3上
vim /etc/salt/grains ###进行grains文件的编辑
在hosts上进行刷新和测试:
[root@server1 salt]# salt '*' saltutil.sync_grains ###进行刷新
[root@server1 salt]# salt '*' grains.item roles ###进行测试查看
进行测试:
在master端进行设定grains
mkdir _grains ###进行grains目录的建立
cd _grains ###进行目录的切换
vim my_grains.py ###进行文件的编辑
进行测试:
[root@server1 _grains]# salt '*' saltutil.sync_grains ###进行刷新
[root@server1 _grains]# salt '*' grains.item foo ###进行测试
[root@server1 _grains]# salt '*' grains.item hello ###进行测试
在server2和server3上进行查看:
进行top.sls文件的编辑
vim top.sls ###进行top.sls文件的编辑
进行测试:(根据不同的grain值对于不同的主机安装不同的服务)
[root@server1 salt]# salt '*' state.highstate ###进行测试