
Saltstack快速入门
1.1Saltstack基本概述
SaltStack是一个异构平台基础设施管理工具,具有远程执行、配置管理、云管理,只需要花费数分钟即可运行起来,扩展性组以支撑管理上万台服务器,速度快,服务器之间秒级通讯数秒钟即可完成数据传递。
SaltStack三大功能
- 远程执行
- 配置管理(状态)
- 云管理
SaltStack四种运行方式
- Local本地运行
- Minion/Master 传统方式运行
- Syndic分布式
- Salt SSH
SaltStack常用网址
- SaltStack官方网站 http://www.saltstack.com/
- SaltStack官方文档 http://docs.saltstack.cn/zh_CN/latest/
2.Saltstack快速安装
SaltStack支持多种操作系统,如CentOS、RedHat、Debian、Ubuntu、FreeBSD、Solaris、Fedora、SuSe、Gentoo、MAC OS X、Archlinux等,以及Windows(仅支持Minion)
1.配置salt官方阿里云yum仓库
[root@salt0-master ~]# yum install -y \ https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm [root@salt0-master ~]# sed -i \ "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo [root@salt0-master ~]# yum makecache2.安装Master,并启动服务
[root@salt0-master ~]# yum install salt-master -y [root@salt0-master ~]# systemctl enable salt-master [root@salt0-master ~]# systemctl start salt-master遇到无法启动问题:
1.重新导入安装包
sudo pip uninstall markupsafe sudo pip install markupsafe2.导入失败的解决方案
pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com3.安装Salt-Minion指向Salt-Master网络地址
[root@salt1-minion ~]# yum install salt-minion -y #配置master地址或主机名, 建议使用主机名方式 [root@salt1-minion ~]# sed -i '/master: /c\master: salt-master' /etc/salt/minion [root@salt1-minion ~]# systemctl enable salt-minion [root@salt1-minion ~]# systemctl start salt-minion4.如启动时发生异常可以查看SaltStack相关日志
#服务端日志 [root@salt0-master ~]# tail -f /var/log/salt/master #客户端日志 [root@salt1-minion ~]# tail -f /var/log/salt/minion
3.Saltstack认证方式
Salt的数据传输是通过AES加密,Master和Minion之间在通信之前,需要进行认证。
Salt通过认证的方式保证安全性,完成一次认证后,Master就可以控制Minion来完成各项工作了。
- 1.minion在第一次启动时, 会在/etc/salt/pki/minion/下自动生成minion.pem(private key)和minion.pub(public key)然后将minion.pub发送给master
- 2.master在第一次启动时, 会在/etc/salt/pki/master下自动生成master.pem和master.pub会接收到minion的public key通过salt-key命令接收minion public key, 则会在master的/etc/salt/pki/master/minions目录下存放以minion id命名的public key同时minion会保存一份master public key在/etc/salt/pki/minion_master.pub
Salt认证原理小结
- minion将自己的公钥发送给master
- mastr认证后会将自己的公钥也放置minion端
Master端Key认证示例
在上面一个小节已经提到了Master与Minion的认证方式,只有Master接受了Minion Key后,才能进行管理。具体的认证命令为salt-key常用的有如下命令。[root@linux-node1 ~]# salt-key -L Accepted Keys: #已经接受的key Denied Keys: #拒绝的key Unaccepted Keys:#未加入的key Rejected Keys:#吊销的key #常用参数 -L #查看KEY状态 -A #允许所有 -D #删除所有 -a #认证指定的key -d #删除指定的key -r #注销掉指定key(该状态为未被认证) #在master端/etc/salt/master配置 auto_accept: True #如果对Minion信任,可以配置master自动接受请求salt-key使用
#列出当前所有的key [root@salt0-master ~]# salt-key Accepted Keys: salt1-minion.example.com salt2-minion.example.com salt3-minion.example.com salt4-minion.example.com Denied Keys: Unaccepted Keys: Rejected Keys: #添加指定minion的key [root@salt0-master ~]# salt-key -a salt1-minion.example.com -y #添加所有minion的key [root@salt0-master ~]# salt-key -A -y #删除指定的key [root@salt0-master ~]# salt-key -d salt1-minion.example.com -y #删除所有的key [root@salt0-master ~]# salt-key -D -y
4.Saltstack远程执行
远程执行是SaltStack的核心功能之一。主要使用salt模块可以批量给选定的Minion端执行相应的命令,并获得返回结果。
1.判断Salt的Minon主机是否存活
[root@salt0-master ~]# salt '*' test.ping salt3-minion.example.com: True salt2-minion.example.com: True salt1-minion.example.com: True salt4-minion.example.com: True # salt 是一个命令 # * 表示目标主机, 在这里代表所有目标主机 # test.ping是salt远程执行的一个模块下面的方法。2.SaltStack可以使用cmd.run模块远程执行shell命令
//让指定目标Minion节点运行uptime命令 [root@salt0-master ~]# salt 'salt1-minion.example.com' cmd.run 'uptime' salt1-minion.example.com: 14:45:50 up 1 day, 1:25, 2 users, load average: 0.00, 0.02, 0.05 # Salt提供了大量的模块执行不同的操作, 不建议生产频繁使用cmd.run
5.Saltstack配置管理
salt通过状态模块来识别配置描述文件State状态文件,格式是YAML扩展名后缀是.sls
1.YAML基础语法YAML: 1.缩进(层级关系) 2个空格,不能试用Tab。 2.冒号 key: value 3.短横线 - list1 - list21.缩进
YAML使用一个固定的缩进风格表示数据层级结构关系,每个缩进由两个空格组成, 不要使用tabs。2.冒号
以冒号结尾, 以冒号为路径的除外,其他所有冒号后面所有必须有空格。3.短横线 表示列表项,使用一个短横杠加一个空格。
多个项使用同样的缩进级别作为同一列表2.YAML配置,设置base环境
#定义基础环境目录位置 [root@salt0-master ~]# vim /etc/salt/master file_roots: base: - /srv/salt #修改配置必须重启服务 [root@salt0-master ~]# systemctl restart salt-master3.编写yaml语法文件
[root@salt0-master ~]# mkdir -p /srv/salt/app [root@salt0-master ~]# cd /srv/salt/app #编写sls文件, apache安装并启动 [root@salt0-master app]# cat apache.sls apache-install: pkg.installed: - name: httpd apache-systemctl: service.running: - name: httpd - enable: True #编写sls文件, vsftpd安装并启动 [root@salt0-master app]# cat vsftpd.sls vsftpd_install: pkg.installed: - names: - vsftpd - httpd-tools vsftpd_systemctl: service.running: - name: vsftpd - enable: True #编写sls文件, nginx安装并启动 [root@salt0-master app]# cat nginx.sls nginx-install: pkg.installed: - name: nginx nginx-systemctl: service.running: - name: nginx4.使用salt命令的state状态模块让所有Minion都应用该配置
[root@linux-node1]# salt '*' state.sls app.vsftpd [root@linux-node1]# salt '*' state.sls app.vsftpd5.如果想不同的主机应用不同的配置, 则需要使用到salt高级状态模块
# topfile入口文件只能放置在base环境 [root@salt0-master ~]# cat /srv/salt/top.sls base: 'salt1-minion.example.com': - app.nginx 'salt2-minion.example.com': - app.nginx 'salt3-minion.example.com': - app.apache - app.vsftpd 'salt4-minion.example.com': - app.apache - app.vsftpd6.当使用salt命令执行高级状态, 会将topfile当做入口文件,进行调用
# 将高级状态应用到所有主机 [root@linux-node1]# salt '*' state.highstate
6.SaltStack消息队列
SaltStack可以支数以千计,甚至更多的服务器。这些性能的提供主要来自于ZeroMQ,因为SaltStack底层是基于ZeroMQ进行高效的网络通信。ZeroMQ是一个简单好用的传输层,像框架一样的一个套接字库,他使得Socket编程更加简单、简洁和性能更高。
发布与订阅
ZeroMQ支持Publish/Subscribe即发布与订阅模式,我们经常简称Pub/Sub
Salt Master运行两个网络服务
一个是ZeroMQ PUB消息发布与订阅系统,默认监听4505端口, 主要用于Master对Minion下发指令
#所有的Minion连接到Master的4505端口TCP状态持续保持为ESTABLISHED [root@linux-node1]# yum install lsof -y [root@linux-node1]# lsof -i :4505 注意: 可以修改/etc/salt/master配置文件的publish_port参数设置端口。 请求与响应 ZeroMQ支持Request-Reply请求与响应模式,简称REQ/REP
Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口salt客户端与服务端通信的端口
同时也主要用于Master接收Minion执行某个命令后的返回值注意: 可以修改/etc/salt/master配置文件的ret_port参数设置。 显示SaltStack进程名称方式 [root@linux-node1]# yum install -y python-setproctitle [root@linux-node1]# ps aux | grep salt /usr/bin/salt-master -d ProcessManager #中心进程管理器 /usr/bin/salt-master -d _clear_old_jobs #清除旧的Jobs文件及更新fileserver /usr/bin/salt-master -d Publisher #将任务PUB到Minion端 /usr/bin/salt-master -d EventPublisher #Event Publisher进程 /usr/bin/salt-master -d ReqServer_ProcessManager #ReqServer进程管理器 /usr/bin/salt-master -d MWorker #工作进程 /usr/bin/salt-master -d MWorker #工作进程 /usr/bin/salt-master -d MWorker #工作进程 /usr/bin/salt-master -d MWorker #工作进程 /usr/bin/salt-master -d MWorker #工作进程 /usr/bin/salt-master -d MWorkerQueue #将Ret接口(ROUTER)数据转发到Worker(DEALER)
7.SaltStack常用配置
1.Salt Master配置
Salt Master端的配置是修改/etc/salt下master配置文件。以下是Master端常用的配置。
interface: //指定bind 的地址(默认为0.0.0.0) publish_port: //指定发布端⼝(默认为4505) ret_port: //指定结果返回端⼝, 与minion配置⽂件中的master_port对应(默认为4506) user: //指定master进程的运⾏⽤户,如果调整, 则需要调整部分目录的权限(默认为root) timeout: //指定timeout时间, 如果minion规模庞⼤或⺴络状况不好,建议增⼤该值(默认5s) keep_jobs: //minion执⾏结果返回master, master会缓存到本地的cachedir目录,该参数指定缓存多⻓时间,可查看之间执行结果会占⽤磁盘空间(默认为24h) job_cache: //master是否缓存执⾏结果,如果规模庞⼤(超过5000台),建议使⽤其他⽅式来存储jobs,关闭本选项(默认为True) file_recv : //是否允许minion传送⽂件到master 上(默认是Flase) file_roots: //指定file server目录, 默认为: file_roots: base: - /srv/salt pillar_roots : //指定pillar ⺫录, 默认为: pillar_roots: base: - /srv/pillar log_level: //⽇志级别 ⽀持的⽇志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)2.Salt Minion配置
Minion端配置非常简单,一般只需要修改两个配置即可。[root@minion ~]# vim /etc/salt/minion master: 192.168.56.11 //修改master为master的IP地址 id: //客户端的id,默认不设置会取客户端的完整主机名Salt Minion端常用配置
master: //指定master 主机(默认为salt) master_port: //指定认证和执⾏结果发送到master的哪个端⼝, 与master配置⽂件中的ret_port对应(默认为4506) id: //指定本minion的标识, salt内部使⽤id作为标识(默认为主机名) user: //指定运⾏minion的⽤户.由于安装包,启动服务等操作需要特权⽤户, 推荐使⽤root( 默认为root) cache_jobs : //minion是否缓存执⾏结果(默认为False) backup_mode: //在⽂件操作(file.managed 或file.recurse) 时, 如果⽂件发⽣变更,指定备份目录.当前有效 providers : //指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5 renderer: //指定配置管理系统中的渲染器(默认值为:yaml_jinja ) file_client : //指定file clinet 默认去哪⾥(remote 或local) 寻找⽂件(默认值为remote) loglevel: //指定⽇志级别(默认为warning) tcp_keepalive : //minion 是否与master 保持keepalive 检查, zeromq3(默认为True)



