一、SaltStack基本介绍:
(一)SaltStack作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行。实现这一点,此时Salt Master可以发出命令,如salt '*' cmd.run 'ls -l /'。
除了运行远程命令,SaltStack允许管理员使用“grain”。 grain可以在SaltStack仆从运行远程查询,因此收集仆从的状态信息并允许管理员在一个中央位置存储信息。SaltStack也可以帮助管理员 定义目标系统上的期望状态。这些状态在应用时会用到.sls文件,其中包含了如何在系统上获得所需的状态非常具体的要求。
由于它提供了在管理远程系统的灵活性,SaltStack-based产品迅速获得利益。该功能可以对比由状态管理系统提供的功能,如Puppet和Ansible。SaltStack很大程度上得益于快速的采用率,它包括一个在管理系统上运行远程命令的有效方式。
(二).Salt的核心功能
1.使命令发送到远程系统是并行的而不是串行的
2.使用安全加密的协议
3.使用最小最快的网络载荷
4.提供简单的编程接口
Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。
(三).salt使用Python客户端接口
为了允许简单的扩展,Salt执行程序可以写为纯Python模块。数据从Salt执行过程中收集到可以发送回master服务端,或者发送到任何任意程序。Salt可以从一个简单的Python API调用,或者从命令行被调用,所以Salt可以用来执行一次性命令,也可以作为一个更大的应用程序的一个组成部分。
配置环境(rhel6.5虚拟机)
172.25.45.1 server1 master
172.25.45.2 server2 minion
172.25.45.3 server3 minion
二.安装salt
1.配置yum源
将要用包所在的文件目录(此处是rhel6)放到物理机apache默认发布目录下(/var/www/html)
在server1和server2中:
vim /etc/yum.repos.d/rhel-source.repo
yum clean all
yum repolist
2.安装服务
在两台机器/etc/hosts加入本地解析
在server1上:
yum install salt-master -y
etc/init.d/salt-master start
在server2上:
yum install salt-minion -y
编辑server2的minion配置文件,指定master
vim /etc/salt/minion
/etc/init.d/salt-minion start
在server1中:
salt-key -L ###查看到已经签名的客户端
salt-key -A ##添加所有
salt server2 test.ping ##检测网路是否通
salt server2 cmd.run hostname ##显示server2主机名称
salt server2 cmd.run 'df -h' ##查看磁盘空间使用情况
在minion(server2)端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件
与master(server1)端的 master.pub一致
yum install -y lsof ##列出当前系统打开文件的工具
lsof -i: 4505
在server3上做和server2一样的配置,然后在在server1中:salt-key -L 查看到已经签名的客户端 salt-key -A ##添加所有
lsof -i: 4505 ##查看server3是否连接上
在server1上:
netstat -antlp
4505端口:用来链接slave,发布订阅
4506端口:请求响应,模式为:zmq(消息队列)
####也可以安装tree(yum install -y tree)来查看master和minion连接情况
三、配置自动化部署
修改master端的配置文件
vim /etc/salt/master
file_roots:
base:
- /srv/salt # 这个目录没有,自己建立
(一)一键部署httpd:自动重启httpd服务,更改httpd的默认端口
1.mkdir /srv/salt
/etc/init.d/salt-master restart
2.配置自动化安装httpd的脚本
在server1上:
cd /srv/salt/
mkdir apache
cd apache
vim install.sls
mkdir files
cd files
salt server2 state.sls apache.install
##出现后两个任务执行失败的结果 但此时server2上已经安装好apache
在server2上:
scp /etc/httpd/conf/httpd.conf server1:/srv/salt/apache/files
运行,在minion端自动安装了httpd服务,将httpd的配置文件放到master的base/httpd/files下
salt server2 state.sls apache.install
测试:自动重启httpd服务,更改httpd的默认端口
在server1中:vim/srv/salt/apache/files/httpd.conf # 编辑配置文件,修改httpd服务的端口为8080
salt server2 state.sls apache.install 重新执行此脚本发现端口改变
在server2中:netstat antlp ##发现最新的端口号已经从master端推送到minion端
做完本次实验将端口号还原到80 并执行脚本推送到server2
(二)salt源码编译安装nginx
yum install python-setproctitle.x86_64 -y ##由于salt软件使用python写的 所以源码编译需要
1.在master端:
mkdir /srv/salt/nginx/files -p
cd /srv/salt/nginx/files # 将nginx的源码包放进去
vim install.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel # 安装源码编译的依赖项
file.managed:
- name: /opt/nginx-1.10.1.tar.gz
- source: salt://nginx/files/nginx-1.10.1.tar.gz # 源码包存放的位置
cmd.run: ......
- creates: /usr/local/nginx # 检验条件,当存在这个目录时,就不再编译安装
2.执行脚本
salt server3 state.sls nginx.install
3.编辑执行脚本
执行:salt server3 state.sls nginx.service
4.在server3中查看是否已经安装nginx
netstat -antlp ##看出nginx80端口已开启
(三) nginx的工作进程
在server3上:
cd /usr/local/nginx/conf/
scp nginx.conf server1:/srv/salt/nginx/files
nginx是自己编辑的脚本
在server1上:
vim /srv/salt/nginx/service.sls
salt server3 state.sls nginx.service
在server3上:ps ax
在server1改变进程数再次推送
vim /srv/salt/nginx/files/nginx/conf
在server3上:ps ax
(四)实现创建ngxin用户并且自动启动加载
1.在master端,base目录下建立users/编辑创建用户和用户组
vim files/nginx.conf
mkdir /srv/salt/users
vim users/nginx.sls
vim /srv/salt/nginx/service.sls
在server3中查看:
###############一键推送##########
在上面配置好前提下,可以设置多台机器一键推送,在base目录下建立编辑top.sls,即可实现
salt '*' state.highstate