在生产环境中,服务器每每不止一两台,通常都是成千上万台服务器。这对运维人员来讲管理难度太大了,而saltstack是一个新的基础平台管理工具,能够支持管理上万台服务器规模,数秒钟便可完成数据传递,是如今用的比较多的自动化运维工具之一。 Salt是一个基础平台管理工具。SaltStack采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间经过ZeroMQ消息队列通讯。master监听4505和4506端口,4505为master和minion认证通讯端口,4506为master用来发送命令或者接收minion的命令执行返回信息。
一、基于python语言开发的node
二、轻量级管理工具,批量执行命令python
三、经常使用模板linux
名称 | 含义 |
---|---|
pkg | 包,有增删更新 |
file | 用于管理文件,包括同步文件、设置文件权限和所属用户组、删除文件等操做 |
cmd | 在minion上执行命令或者脚本 |
use | 管理系统帐户操做 |
service | 管理系统服务操做 |
cron | 管理crontab任务 |
四、saltstack数据系统web
Grains(静态数据)shell
远程执行apache
配置管理vim
SaltStack客户端(Minion)在启动时,会自动生成一套密钥,包含私钥和公钥。以后将公钥发送给服务器端,服务器端验证并接受公钥,以此来创建可靠且加密的通讯链接。同时经过消息队列ZeroMQ在客户端与服务端之间创建消息发布链接。
Minion是SaltStack须要管理的客户端安装组件,会主动去链接 Master端,并从Master端获得资源状态信息,同步资源管理信息。ruby
Master做为控制中心运行在主机服务器上,负责Salt命令运行和资源状态的管理,Master上执行某条指令经过队列下发到各个Minions去执行,并返回结果。bash
速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的;很是灵活,源码是python,方便理解和自定义模块(由于python相对于其余的perl、ruby等仍是很好理解的) 命令简单,功能强大。
部署minion端较为不便。
grains是在minion(客户端)启动时收集到的一些信息,好比操做系统类型、网卡ip等静态信息。 grains 的信息并非动态的,并不会时时变动,它只是在 minion 启动时收集到的。
pillar和grains不同,是在master上定义的,而且是针对minion定义的一些信息。像一些比较重要的数据(密码)能够存在pillar里,还能够定义变量等。
state是saltstack的最核心的功能,经过预先指定好的sls文件对 被控主机进行管理(包括:包、网络配置、系统服务、系统用户等)
salt 'client2' cp.get_file salt:#apache.sls /tmp/cp.txt
salt 'client2' cp.get_dir salt:#test /tmp
salt-run manage.up
#编辑脚本 vim /srv/salt/test/shell.sh #! /bin/sh echo "salt server do run shell script on client" > /tmp/shell.txt #执行脚本 salt 'client2' cmd.script salt:#test/shell.sh
准备三台机器,这三台机器都关闭selinux,清空防火墙规则。
服务器角色 | IP地址 | 主机名称 |
---|---|---|
master | 192.168.142.123 | master.saltstack.com |
minion01 | 192.168.142.124 | web01.saltstack.com |
minion02 | 192.168.142.166 | web02.saltstack.com |
#分别为三台机器添加epel源,本地有官方源 yum install -y epel-release #安装epel源 #服务器安装 yum -y install salt-master
#安装完成修改主配置文件 vim /etc/salt/master #修改以下内容 #15行 interface: 192.168.175.132 #监听地址 #215行 auto_accept: True #避免要运行salt-key来确认证书认证 #416行 file_roots: base: - /srv/salt #saltstack文件根目录位置,目录须要建立 #710行组分类 nodegroups: group1: 'web01.saltstack.com' group2: 'web02.saltstack.com' #552行 pillar_opts: True #开启pillar功能,同步文件功能 #529行 pillar_roots: base: - /srv/pillar #pillar的主目录,须要建立 cat /etc/salt/master | grep -v ^$ | grep -v ^# #查看对主配置文件作的更改
#开启服务 systemctl start salt-master #设定服务开机自启 systemctl enable salt-master #查看服务端口监听状态 netstat -anpt | egrep '4505|4506'
mkdir /srv/salt mkdir /srv/pillar
#在两台服务器上分别安装 yum -y install salt-minion
#修改/etc/salt/minino主配置文件 vim /etc/salt/minion #修改配置以下 #16行 master: 192.168.175.132 #指定主控端IP #78行 id: web01.saltstack.com #指定被控端主机名 启动被控端服务 systemctl start salt-minion
#查看通讯状态 salt '*' test.ping #查看全部被管理端的挂载状态 salt '*' cmd.run 'df -h' #查看在 master 上已经被接受过的客户端 salt-key #查看被控主机上grains全部值(每次minion在启动是都会获取客户端信息) #静态数据 salt 'web01.saltstack.com' grains.items #动态数据 salt 'web01.saltstack.com' pillar.items
#修改主配置文件 vim /etc/salt/master file_roots: base: - /srv/salt/ #注意:环境:base、dev(开发环境)、test(测试环境)、prod(生产环境)。 #建立工做目录 mkdir /srv/salt vim /srv/salt/top.sls base: '*': - apache #注意:'*',则表示在全部的客户端执行apache模块。 vim /srv/salt/apache.sls apache-service: pkg.installed: - names: # 若是只有一个服务,那么就能够写成–name: httpd不用再换一行 - httpd - httpd-devel service.running: - name: httpd - enable: True #注意:apache-service是自定义的id名。pkg.installed为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。 #重启服务 systemctl restart salt-master #执行刷新state配置命令 salt '*' state.highstate
#查看服务端口监听状态 netstst -ntap | grep 80 #查看生成的配置文件 rpm -qc httpd