saltstack 自动化运维神器(三)节点组及复合匹配器

saltstack实现远程配置管理功能首先是要先匹配到对应的target minion,然后才会将命令发送到匹配到的minion上去执行。这里介绍两种比较强大的匹配方法,一是创建节点组;二是使用复合匹配器。

节点组将不同的主机分配到不同的组中去,便于实现主机的集中化管理,接下来首先看salt分组功能的实现。

要使用salt的分组功能,需要在master节点上进行配置,配置的方式有两种:

(1)、将分组的信息写在master的主配置文件

(2)、将分组的信息写在一个单独的配置文件中,然后主配置文件来include分组配置文件

这里我们选择第二种方式来降低耦合性。

1、master的配置

[[email protected] ~]# vim /etc/salt/master
default_include: master.d/*.confdefault_include: master.d/*.conf

[[email protected] ~]# mkdir /etc/salt/master.d/
[[email protected] ~]# cat /etc/salt/master.d/group.conf 
nodegroups:
  group1: ‘[email protected],computer4‘
  group2: ‘[email protected]:RedHat‘

## [email protected]表示匹配的是一个minions列表,列表成员为每个minion的id,这个id在minion配置文件中声明

## [email protected]表示匹配的是grains的属性

## 分组的意图:将computer3,computer4 加入到group1中,将系统为RedHat的主机加入到group2(所有的都是RedHat系统)

## 接着重启master服务
[[email protected] salt]# /etc/init.d/salt-master restart 
Stopping salt-master daemon:                               [  OK  ]
Starting salt-master daemon:                               [  OK  ]

验证是否成功

[[email protected] ~]# salt -N group1 test.ping
computer4:
    True
computer3:
    True
[[email protected] ~]# salt -N group2 test.ping
computer5:
    True
computer7:
    True
computer6:
    True
computer3:
    True
computer8:
    True
computer4:
    True

我们可以看到,实现salt的分组就是这么的简单,那么在top.sls中如何匹配你所创建的组呢?

##在这里试用pillar 为group1的成员创建一个属性operation,值为nova computer

[[email protected] pillar]# pwd
/srv/pillar
[[email protected] pillar]# cat top.sls 
base:
  group1:
    - match: nodegroup
    - operation
[[email protected] pillar]# cat operation.sls 
operation: nova-computer

[[email protected] pillar]# salt ‘*‘ pillar.items //将状态同步到minions上 

[[email protected] pillar]# salt ‘*‘ pillar.item operation
computer5:
    ----------
computer3:
    ----------
    operation:
        nova-computer
computer7:
    ----------
computer6:
    ----------
computer4:
    ----------
    operation:
        nova-computer
computer8:
    ----------

//由于computer5、computer6、computer7、computer8不属于group1 所以该minion没有peration属性,而group1中的computer3、computer4已经有该属性了。

接下来我们来看Compound matchers(复合匹配器),复合匹配器能够提供灵活的匹配方式,常用的如下表:

Letter Match Type Example
G Grains glob [email protected]:CentOS
E PCRE Minion ID [email protected]\d+
P Grains PCRE [email protected]:(RedHat|CentOS|Ubuntu)
L List of minions [email protected],uadoop2,uadoop3
I Pillar glob [email protected]:kora:1000
S Subnet/IP address [email protected]/24

直接看例子

//
//先进行单个Letter测试
//

//使用grains属性的os属性匹配
[[email protected] ~]# salt -C ‘[email protected]:RedHat‘ test.ping
computer5:
    True
computer6:
    True
computer7:
    True
computer4:
    True
computer3:
    True
computer8:
    True
//
//使用Minion ID的正则表达式来匹配
[[email protected] ~]# salt -C ‘[email protected]\d+‘ test.ping
computer5:
    True
computer7:
    True
computer6:
    True
computer4:
    True
computer3:
    True
computer8:
    True
//
//使用grains属性的正则表达式匹配
[[email protected] ~]# salt -C ‘[email protected]:(RedHat|Ubuntu|CentOS)‘ test.ping
computer5:
    True
computer6:
    True
computer7:
    True
computer3:
    True
computer8:
    True
computer4:
    True
//
//使用Minion ID属性匹配
[[email protected] ~]# salt -C ‘[email protected],computer4‘ test.ping
computer4:
    True
computer3:
    True
//
//使用pillar定义的属性来匹配
[[email protected] ~]# salt -C ‘[email protected]:nova-computer‘ test.ping 
computer4:
    True
computer3:
    True
//
//使用IP段进行匹配
[[email protected] ~]# salt -C ‘[email protected]/24‘ test.ping
computer5:
    True
computer6:
    True
computer7:
    True
computer8:
    True
computer4:
    True
computer3:
    True

## 接着看多个Letter复合后的测试

//
//匹配grains中的os属性不是Ubuntu的(我的测试环境都是RedHat,所以都匹配上了。)
[[email protected] ~]# salt -C ‘* and not [email protected]:Ubuntu‘ test.ping          
computer5:
    True
computer8:
    True
computer7:
    True
computer6:
    True
computer3:
    True
computer4:
    True
//
//匹配Minion ID 为computer3或者nodename为computer4的
[[email protected] ~]# salt -C ‘computer3 or [email protected]:computer4‘ test.ping  
computer4:
    True
computer3:
    True
//
//匹配除computer7、computer8之外的所有以computer开头后面跟数字1以上的数字的Minion
[[email protected] ~]# salt -C ‘[email protected]\d+ and not computer[7-8]‘ test.ping
computer5:
    True
computer6:
    True
computer4:
    True
computer3:
    True
//
// 有点编程基础的朋友都知道and、or、not
// and 和的意思,必须匹配左右两边都成功
// or  或的意思,匹配左右两边任意一个
// not 是除了的意思,就是匹配除了剩下的项。
// 三个优先级高低排序:not、and、or 
//

认识了Compound matchers后,那么在top.sls中如何匹配你所创建的组呢?

//
//这里使用pillar为复合匹配到的主机创建一个属性webserver,值为nginx
[[email protected] pillar]# cat top.sls 
base:
  group1:
    - match: nodegroup
    - operation

  ‘[email protected]\d+ and not computer[5-8]‘: //最终会匹配到computer3-4
    - match: compound			 //这行是必须的,表示使用复合匹配
    - webserver				 //调用同一目录下的webserver.sls文件
[[email protected] pillar]# cat webserver.sls 
webserver: nginx
[[email protected] pillar]# salt ‘*‘ pillar.item webserver
computer5:
    ----------
computer6:
    ----------
computer7:
    ----------
computer3:
    ----------
    webserver:
        nginx
computer8:
    ----------
computer4:
    ----------
    webserver:
        nginx
//最终匹配到了computer3、computer4,所以返回结果如上,表示正确匹配并创建属性。

通过上面的测试我们可以发现,salt提供了比较强大的minion匹配功能,但salt所提供的又不止于此,最后我们来看salt的batch size功能,选项为-b(--batch-size),值只能为百分比和有限大小的正数

首先看如下的例子

//不使用batch size
//
[[email protected] pillar]# salt ‘*‘ -b 1 test.ping
computer5 Detected for this batch run
computer8 Detected for this batch run
computer6 Detected for this batch run
computer7 Detected for this batch run
computer3 Detected for this batch run
computer4 Detected for this batch run

Executing run on [‘computer8‘]

computer8:
    True

Executing run on [‘computer7‘]

computer7:
    True

Executing run on [‘computer6‘]

computer6:
    True

Executing run on [‘computer5‘]

computer5:
    True

Executing run on [‘computer4‘]

computer4:
    True

Executing run on [‘computer3‘]

computer3:
    True

根据官方文档的解释,使用batch size(这里设置的是1),所以同一时间远程执行命令会只在一个minion上执行直到这个minion完成相应的操作后,执行命令会发送到下一个minion,执行同样的操作,最终完成所有的minion上的命令执行。从上面的对比结果也可以看出不同。到这您不禁要问,这种方式的结果是一批接一批的minions分批执行,效率肯定不如所有的minion同时执行高,为什么还要用呢?

假设这样一种场景,你有一个100个节点的web服务器集群,集群的前端是一个反向代理来实现负载均衡,您已经对web站点进行了升级,现在需要重启后端的web服务,由于已经做了负载均衡,那么你肯定也不想一次性重启所有的web服务,因为这样会造成应用在瞬间是不可用的,理想的做法是重启集群中的部分节点上的服务,这样就保证了这部分节点重启服务时,仍有部分节点对外提供服务,待刚才重启的那部分节点成功启动完毕后,再来重启剩余的部分节点,最终就能实现web站点的平滑升级。这个时候就是salt batch size大展身手的时候了,看下面的例子

salt -G ’os:RedHat’ --batch-size 25% apache.signal restart

这条命令就能实现每次只重启总minions数的25%,等这25%的节点重启完成后,再重启下一个25%,就这样分批次的重启完所有节点的httpd服务。

大隐隐于市。虽然saltstack这个工具很小巧,但是提供给我们的功能是如此的惊艳,甚至是powerful!哈哈,所以我们要多花点时间来拜访这位大隐,不为别的,就为生活变得更美好。

未完待续……

时间: 2024-10-26 09:58:23

saltstack 自动化运维神器(三)节点组及复合匹配器的相关文章

自动化运维神器之saltstack (三)节点组及复合匹配器

saltstack实现远程配置管理功能首先是要先匹配到对应的target minion,然后才会将命令发送到匹配到的minion上去执行.这里介绍两种比较强大的匹配方法,一是创建节点组:二是使用复合匹配器. 节点组将不同的主机分配到不同的组中去,便于实现主机的集中化管理,接下来首先看salt分组功能的实现. 看下环境先: hadoop0.updb.com    192.168.0.100    OS:CentOS 6.5        Role:master uadoop1.updb.com  

saltstack 自动化运维神器(四)salt-ssh

satlstack号称自动化运维的利器,那么saltstack能不能实现自身的批量部署呢?如果你也有这样的疑问,那么就更要看这篇文章了.答案当然是肯定的啦!saltstack可以利用salt-ssh来实现自身的批量部署.首先看待salt-ssh,很容易想到它是一个依赖 ssh 来进行远程命令执行的工具,这样做的好处是你不必在客户端安装minion程序,就可以实现远程命令的执行,而且salt-ssh支持salt的绝大部分功能. 10.10.10.4      salt-master    os:r

saltstack 自动化运维神器(二)文件同步

文件同步: 其实在做openstack的运维对一些文件的同步其实是很繁琐.有一个配置项或者一行代码的源码文件进行同步.那么现在我们就开始介绍saltstack的文件同步功能 环境说明:操作系统版本:rhel6.5x64 1.master配置同步根目录 在开始saltstack的配置管理之前,要首先指定saltstack所有状态文件的根目录,在master上做如下操作 ## 首先修改master的配置文件,指定根目录,注意缩进全部使用两个空格来代替Tab(python规范)## 确定指定的目录是否

saltstack 自动化运维神器(二)

文件同步: 其实在做openstack的运维对一些文件的同步其实是很繁琐.有一个配置项或者一行代码的源码文件进行同步.那么现在我们就开始介绍saltstack的文件同步功能 环境说明:操作系统版本:rhel6.5x64 1.master配置同步根目录 在开始saltstack的配置管理之前,要首先指定saltstack所有状态文件的根目录,在master上做如下操作 ## 首先修改master的配置文件,指定根目录,注意缩进全部使用两个空格来代替Tab(python规范)## 确定指定的目录是否

saltstack 自动化运维神器(一)

随着服务器的增多,越来越多的工作是反复一样的操作,这时候我们开始烦恼.介绍一款很好用的批量操作的软件系统:saltstack.废话少说. 环境说明:操作系统版本:rhel6.5x64 软件下载:http://yunpan.cn/cKvxxLbmaQiMM  访问密码 166e 官方下载:http://docs.saltstack.cn/zh_CN/latest/ 1.安装 master 节点 yum install salt-master minion 节点 yum install salt-m

saltstack 自动化运维安装

saltstack --自动化运维 saltstack-master 安装:yum -y install salt-mastersaltstack-master配置:如下图,修改 salt-master本身监听地址sed -i 's/#interface: 0.0.0.0/interface: 192.168.1.26/g' /etc/salt/mastersed -e '/^$/d;/^#/d' /etc/salt/master #查看配置 可以在master 端使用自动认证(可选)vim /

Saltstack自动化运维工具 实战与部署

自动化工具比较 Puppet也许是四款工具中最深入人心的.就可用操作.模块和用户界面而言,它是最全面的.Puppet呈现了数据中心协调的全貌,几乎涵盖每一个运行系统,为各大操作系统提供了深入的工具.初始设置比较简单,只需要在需要加以管理的每个系统上安装主服务器和客户端代理软件.命令行接口(CLI)简单直观,允许通过puppet命令下载和安装模块.然后,需要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端通过立即触发更改配置文件的推送(pu

saltstack自动化运维

一.Saltstack架构 Saltstack基于C/S架构,服务端master:192.168.179.128和客户端minions :192.168.179.129 二.Saltstack的安装配置 1.master的安装 rpm -ivhhttp://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpmyum install salt-master默认配置文件位于/etc/salt/master ,默认不需要更改

Saltstack 自动化运维工具详细介绍

Saltstack 简介 什么是saltstack ? Saltstack是基于python开发的一套C/S架构配置管理工具 ? 使用SSL证书签方的方式进行认证管理 ? 底层使用ZeroMQ消息队列pub/sub方式通信 – 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作 – 采用RSA Key方式确认身 主要功能 ? Saltstack最主要的两个功能是:配置管理与远程执行 ? Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器 ? S