saltstack简介:
saltstack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMwarre vSphere环境。
saltstack采用C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。minion上线后先与master端联系,把自己的pub key法发过去,这时master端通过salt-key -L 命令就会看到minion的key,接收该minion-key后,也就是master与minion已经互信。master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带里,它们通常在python库中,local salt | grep /apps/nsl/python/bin/salt可以看到salt自带的所有东西。这些模块是python写成的文件,里面会有很多函数,如cmd.run,当我们执行/apps/nsl/python/bin/salt '*' cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUBsystem,用来发送消息,4506对应的是REPsystem是来接收消息的。saltstack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp等。
实验环境:
rhel6.5 selinux和iptables均为disabled状态
server1:172.25.254.1 master (haproxy)
server2: 172.25.254.2 minion (httpd)
server3: 172.25.254.3 minion (nginx)
操作步骤:
一:部署saltstack环境
可以下载所需的安装包,也可以将所需的包打包成一个目录放在物理机的发布目录(/var/www/html/)下,然后编辑虚拟机的yum源指向物理机
本实验将所需的包放在rhel6目录下,放在物理机的/var/www/html/,并且给rhel6和该目录下的所有东西给权限大一点
三台虚拟机的yum源指向物理机(本实验只在server1上做了演示,其他两台安装和server1步骤一样)
yum repolist ##查看saltstack包是否有
在server1(master)上安装salt-master,并开启服务
yum install -y salt-master
/etc/init.d/salt-master start
在server2上安装salt-minion
cd /etc/salt/
vim minion
master=172.25.254.1 (第16行)
/etc/init.d/salt-minion start
在server1上查看
cd /etc/salt/
salt-key -L ##列出所有的minion
salt-key -A ##同意所有的minion
(salt-key -a linux* ##同意含有linux的minion | salt-key -D ##删除所有的minion | salt-key -d linux* ##删除所有含有linux的minion)
查看端口 4505
安装lsof更方便查看
在server3中安装,改文件,开启服务
在server1上重新查看minion,会出现server3
在server1上安装python-setproctitle.x86_64
重启服务
进入到/etc/salt/pki/master,生成了master.pem master.pub (钥匙)
md5sum master.pub ##查看钥匙
进入到minion中,会发现两个minion,server2和server3
在server2上,进入到/etc/salt/pki/minion/ , 生成了minion_master.pub minion.pem minion.pub (钥匙)
md5sum minion_master.pub ##查看钥匙
server2与server1的master钥匙一样,且minion的钥匙也一样
在server1中安装tree,便于查看缓存结构
进入到/var/cache/salt/master中tree .
在server1中
vim /etc/salt/master ##编写master文件,因为是python编写,故要注意缩进,缩进两个空格
file_roots:
base:
- /srv/salt
mkdir /srv/salt ##创建目录
重启服务
二:安装apache
在/srv/salt下创建一个名为apache的目录,并且在apache下面新建文件install.sls(文件名字无所谓,但后缀必须为sls)
编写install.sls文件内容为安装apache的脚本内容,注意缩进
salt server2 state.sls apaceh.install ##安装命令
在server2中安装tree,进入到/var/cache/salt/,且tree . ,会发现server2与server1同步,也会有apache目录和其目录下的install.sls
且已安装apache,说明远程操作成功
在server1中编写install.sls,增加功能,给server2开启apache
在server2中查看服务是否开启
在server1中
cd /srv/salt/apache/
mkdir files ##用于存放httpd.conf
cat /etc/passwd ##查看所属用户与所属组
发现所属用户与所属组都是root
在server2中
scp /etc/httpd/conf/httpd.conf server1:/srv/salt/apache/files/ ##前提是server2上做好server1的解析,或者直接输入ip也可以
在server1中编写install.sls文件
在server1中复制一份install.sls成为service.sls,改动service.sls
salt server2 state.sls apache.service ##利用service.sls来执行给server2安装apache
三:安装nginx
在server1中
cd /srv/salt/
mkdir nginx
cd nginx
touch install.sls
mkdir files/
cd files/
下载nginx-1.14.0.tar.gz
在server1中
cd /srv/salt/
mkdir pkgs ##创建一个包目录,以后要用到则直接调用,不用重复来
cd pkgs/
vim make.sls
在server1中编辑nginx的安装文件
在server3中查看是否有/usr/local/nginx/conf/nginx.conf
把server3中的nginx.conf传到server1中去
可以在server3中先下载一个nginx服务,再把/etc/init.d/nginx传到server1中去(本实验是拷贝别的虚拟机中的nginx)
然后再删除nginx
在server1中查看是否传过来了
编写service.sls,开启nginx服务的文件
在server1中编写top.sls文件,实现高可用开启
salt '*' state.highstate ##执行命令,所有的minion均按照文件内容开启
成功后,在server3中查看是否开启服务
四:安装haproxy
本应该apache,nginx,haproxy安装在不同的虚拟机,但是本实验只创建了三个虚拟机,所以,在master上安装minion,当作一个minon,在其上安装haproxy,这也是可以的
安装minon
改写/etc/salt/minion,将master的ip改成172.25.254.1
开启服务
将server1加到salt中去
在/srv/salt/创建haproxy目录,这个目录下的东西都是跟安装,开启haproxy有关的东西
在files下下载hproxy需要的源码安装包
在haproxy/编写install.sls (这只是个简单的安装文件,不是最终的安装文件)
salt server1 state.sls haproxy.install ##安装haproxy服务
安装成功后,再次编写install.sls文件,这次是源码编译安装
salt server1 state.sls haproxy.install ##给server1上安装haproxy服务
安装成功之后,查看/usr/local/haproxy 是否已经做好软连接
先手动解压安装包,将里面的两个文件复制到/srv/salt/haproxy/files/
在/srv/salt/下新建users目录,在users目录下编写haproxy.sls,用来创建haproxy用户
在/srv/salt/haproxy下编写service.sls文件,用来开启服务
进入到/srv/salt/haproxy/fiels/,编写haproxy.cfg文件,做好轮循
salt server1 state.sls haproxy.service ##开启服务
查看haproxy服务是否开启
编写top.sls文件,实现三个服务同时开启
salt '*' state.highstate 执行命令
在server2中,编写apache发布文件,以便测试
在server3中,编写nginx发布目录,以便测试
在浏览器上172.25.254.1,会出现轮循结果
在浏览器172.25.254.1/admin/stats
停掉server2的apache
编写top.sls文件
这时刷新浏览器,只会出现server3的页面
salt '*' state.highstate #会调用top.sls文件实现多节点推送
此时访问浏览器,就会发现轮循了
在server1中,可以通过grains.item 查看相应 minion的相关信息
在server2的minion文件里加上roles:apache
重启server2的minion服务
可以查看到server2的roles
在server3中新建编写 /etc/salt/grains
在server1中能查看到
编写top.sls文件,加入grain
重新安装
导入模块:
1.grains
grains的信息不是动态的,不会随时更新,只是在minion启动时会收集到
在server1中编写.py文件
将模块同步到server2中去
在server2中通过tree可以查看到
在server1中查看server2的信息
2.pillar
pillar和grains不一样,是master上定义的,并且是针对minion定义的一些信息,还可以定义变量
编写master文件,去掉注释的pillar
重启服务
编写web中的install.sls,编写pillar中的top.sls
在server1中查看minion信息
刷新pillar
jinja
第一种方式:
第二种方法:
第三种方法: