千家信息网

saltstack详解+部署apache服务

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,saltstack介绍1、 saltstack是使用python语言开发的;2、 轻量级的管理工具,批量执行命令;3、常用模块:pkg(包)、file(文件)、cmd(执行命令或脚本)、user、 s
千家信息网最后更新 2024年11月26日saltstack详解+部署apache服务

saltstack介绍

1、 saltstack是使用python语言开发的;
2、 轻量级的管理工具,批量执行命令;
3、常用模块:pkg(包)、file(文件)、cmd(执行命令或脚本)、user、 service、cron
4、saltstack数据系统
Grains (静态数据)
pillar (动态数据)

saltstack三大功能,远程执行,配置管理,云管理SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

saltstack基本原理

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库中,locate salt | grep /usr/可以看到salt自带的所有东西。这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt '*' cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的。

具体步骤如下

Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipcsalt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。master接收到命令后,将要执行的命令发送给客户端minion。minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给mastermaster接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。

优点:

首先,他速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的
其次,非常灵活,源码是python,方便理解和自定义模块(python 语言相对于其他的perl、ruby等还是很好理解的)
命令简单,功能强大

缺点:部署minion端较为不便

saltstack几个重要的组件
grainsgrains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。
grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的

pillarpillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

State
他是saltstack的最核心功能,通过预先指定好的sls文件对被控主机进行管理:包/文件/网络配置/系统服务/系统用户等。

Saltstack 批量部署apache

实验环境:
master:192.168.136.167
web01:192.168.136.168
web02:192.168.136.185

#添加主机名,三台机器都要添加,并且主机要改成相应的名称[root@master ~]# vim /etc/hosts192.168.136.167 master.saltstack.com192.168.136.168 web01.saltstack.com192.168.136.185 web02.saltstack.com#每台都需要关闭防火墙[root@master ~]# vim /etc/hostname master.saltstack.com[root@web01 ~]# vim /etc/hostname web01.saltstack.com[root@web02 ~]# vim /etc/hostname web02.saltstack.com#安装epel源(三台都要装)[root@master ~]# yum install -y epel-release[root@master ~]# yum -y install salt-master[root@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的主目录,需要创建创建salt与pillar文件根目录:mkdir /srv/saltmkdir /srv/pillar启动服务器:systemctl start salt-mastersystemctl enable salt-masternetstat -anpt | egrep '4505|4506'创建salt与pillar文件根目录:mkdir /srv/saltmkdir /srv/pillar

--------------------以下在被控端上操作-------------------

在两台上分别配置:yum -y install salt-minionvi /etc/salt/minion修改配置如下:16行 master: 192.168.175.132     //指定主控端IP78行 id: web01.saltstack.com     //指定被控端主机名启动被控端服务systemctl start salt-minion在主控端测试与被控端的通信状态!salt '*' test.pingweb01.saltstack.com:Trueweb02.saltstack.com:Truesalt '*' cmd.run 'df -h'   //远程执行命令salt-key   //查看在 master 上已经被接受过的客户端查看被控主机上grains所有值:(每次minion在启动是都会获取客户端信息)salt 'web01.saltstack.com' grains.items (静态数据)salt 'web01.saltstack.com' pillar.items  (动态数据)配置管理安装Apache下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:修改配置文件vi /etc/salt/master     // 打开如下内容的注释file_roots:base:- /srv/salt/注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。mkdir /srv/saltvi /srv/salt/top.slsbase:'*':- apache注意:'*',则表示在所有的客户端执行 apache 模块。vi /srv/salt/apache.slsapache-service:pkg.installed:- names:                // 如果只有一个服务,那么就可以写成 -name: httpd 不用再换一行- httpd- httpd-develservice.running:- name: httpd- enable: True注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动。重启服务#systemctl restart salt-master执行命令#salt '*' state.highstate 
0