1.salt介绍
saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。
slat的强大之处
系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等。如果主机数量庞大,单靠人工维护实在让人难以忍受。
早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。
系统管理员面临的问题主要是
1、系统配置管理
2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。
salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。
不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。
Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
2.salt部署基本架构
在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
1.服务器环境部署
服务器环境 | Centos7 | Centos7 | Centos7 |
---|---|---|---|
ip地址 | 192.168.13.139 | 192.168.13.140 | 192.168.13.141 |
主机名 | salt-master | salt-minion1 | salt-minion2 |
软件包 | salt-master | salt-minion | salt-minion |
配置epel源
salt软件包需要epel源的支持,需要提前安装好
三台虚拟机都要配置
[root@salt-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@salt-master ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@salt-master ~]# yum clean all #清空缓存
[root@salt-master ~]# yum makecache #生成yum缓存
[root@salt-master ~]# setenforce 0 && systemctl stopfirewalld #关闭防火墙和selinux
2.Master节点的配置
192.168.13.139
[root@salt-master ~]# yum -y install salt-master #安装salt-master
#默认/etc/salt/master这个配置文件全部都是注释的,我们可以需要自己设置我们想要的功能。在修改配置文件前,先备份一下这个文件是个好习惯。
[root@salt-master ~]# cd /etc/salt
[root@salt-master salt]# cp master master.bak
[root@salt-master salt]# vim master
#在配置文件中添加以下几行(注意配置文件中冒号后有空格不要删除):
interface: 0.0.0.0 //#绑定到本地的0.0.0.0地址
publish_port: 4505 //master的管理端口
user: root //salt运行的用户,影响到salt的执行权限
worker_threads: 5 //#salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506 //#执行结果返回端口
pidfile: /var/run/salt-master.pid //pid文件位置
auto_accept: False // 自动接收秘钥
log_file: /var/log/salt/master //日志文件地址
[root@salt-master salt]# grep -v ^# /etc/salt/master | grep -v ^$ #过滤出我们的配置,检查是否正确
interface: 0.0.0.0
publish_port: 4505
user: root
worker_threads: 5
ret_port: 4506
pidfile: /var/run/salt-master.pid
auto_accept: False
log_file: /var/log/salt/master
[root@salt-master salt]# systemctl start salt-master #启动服务
默认监听2个端口:
4505:publish_port 提供远程命令发送功能
4506:ret_port 提供认证,文件服务,结果收集等功能
3.两个Minion节点的配置
192.168.13.140
[root@salt-minion1 ~]# yum -y install salt-minion #安装salt-minion
#salt-minion的配置文件是/etc/salt/minion 同样备份
[root@salt-minion1 ~]# cd /etc/salt
[root@salt-minion1 salt]# cp minion minion.bak
[root@salt-minion1 salt]# vim /etc/salt/minion
在配置文件中添加一下几行(注意配置文件中冒号后有空格不要删除):
master: 192.168.13.139 #master的ip地址
master_port: 4506
user: root
id: 192.168.13.140 #本机ip
acceptance_wait_time: 10
log_file: /var/log/salt/minion
[root@salt-minion1 salt]# systemctl start salt-minion #启动服务
192.168.13.141
[root@salt-minion2 ~]# yum -y install salt-minion #安装salt-minion
#salt-minion的配置文件是/etc/salt/minion 同样备份
[root@salt-minion2 ~]# cd /etc/salt
[root@salt-minion2 salt]# cp minion minion.bak
[root@salt-minion2 salt]# vim /etc/salt/minion
在配置文件中添加一下几行(注意配置文件中冒号后有空格不要删除):
master: 192.168.13.139 #master的ip地址
master_port: 4506
user: root
id: 192.168.13.141 #本机ip
acceptance_wait_time: 10
log_file: /var/log/salt/minion
[root@salt-minion2 salt]# systemctl start salt-minion #启动服务
4.在master上接收minion秘钥
在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。
[root@salt-master salt]# salt-key -L #你会在Unaccepted Keys:下发现两个minion地址
Accepted Keys: #已经接受的key
Denied Keys: #拒绝的key
Unaccepted Keys: #未加入的key
192.168.13.140
192.168.13.141
Rejected Keys: #吊销的key
#此时还没有真正建立关系,需要我们去连接一下
[root@salt-master salt]# salt-key -a 192.168.13.140
The following keys are going to be accepted:
Unaccepted Keys:
192.168.13.140
Proceed? [n/Y] y
Key for minion 192.168.13.140 accepted.
[root@salt-master salt]# salt-key -L #再次查看
Accepted Keys:
192.168.13.140
Denied Keys:
Unaccepted Keys:
192.168.13.141
Rejected Keys:
#我们给第一个minion执行一个安装nginx的命令
[root@salt-master salt]# salt '192.168.13.140' pkg.install "nginx"
192.168.13.140:
----------
centos-indexhtml:
----------
new:
7-9.el7.centos
old:
dejavu-fonts-common:
----------
..................
nginx-mod-stream:
----------
new:
1:1.16.1-1.el7
old:
然后我们去salt-minion1上查看并开启nginx
[root@salt-minion1 salt]# systemctl start nginx #启动nginx服务
[root@salt-minion1 salt]# yum -y install net-tools
[root@salt-minion1 salt]# netstat -nlp | grep 80 # 查看端口是否开启
访问页面:http://192.168.13.140/
同样我们也可以给第二台slave节点进行同样的操作下载。你也可以写一个脚本来对成百上千台机器同时操作。
3.salt常用命令和参数
只有Master接受了Minion Key后,才能进行管理。具体的认证命令为salt-key常用的有如下命令。
salt-cp '*' 1.txt /opt/ #将本地文件发给所有minion的opt目录下
salt-key -L #查看KEY状态
salt-key -a (Slaver节点ip) -y #添加指定minion的key
salt-key -A -y #添加所有minion的key
salt-key -d (Slaver节点ip) -y #删除指定的key
salt-key -D -y #删除所有的key
salt-key -r #注销掉指定key(该状态为未被认证)
你们的评论和点赞是我写文章的最大动力,蟹蟹。