Saltstack快速入门简单汇总

saltstack是使用python编写的开源自动化部署与管理工具,拥有良好的扩展性以及优秀的执行效率,配置简单,可以工作在多平台上,经常被描述为 Func加强版+Puppet精简版。

saltsatck优点:首先,速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的;其次,非常灵活,源码是python,方便理解和自定义模块;最后,命令简单,功能强大。

前言:在很久以前,只有几台主机的时候当然不需要什么自动糊工具,但是随着硬件成本越来越低廉的今天,随随便便就好几十台服务器,靠手工不是搞不定,但是反复的重复着没有太多技术的操作一定会让人抓狂的的,所以有必要选择一个可以批量操作部署的自动化工具,诸如Pupet,ansible,rundeck,faric之类的工具不少少,碍于水平有限,暂时就saltstack稍微溜一点,简单汇总一下基本的概念,操作等。

参考环境centos6.5

安装:

代码如下:

rpm -Uvh http://mirror.pnl.gov/epel/6/x86_64/epel-release-6-8.noarch.rpm

最新的似乎是2015.8.1,如果用pip安装的话

master安装

代码如下:

yum install salt-master -y
chkconfig salt-master on
sed -i "s/# interface: 0.0.0.0/ interface: MasterIP地址/" /etc/salt/master ###绑定master端IP地址
service salt-master start ###启动salt-master

Minion安装

代码如下:

yum install salt-minion –y
chkconfig salt-minion on
sed -i "s/#master: salt/ master: MasterIP地址/" /etc/salt/minion ###传入Master端IP地址
service salt-minion start ###启动salt-minion

如果开启防火墙的话,需要配置防火墙,参考https://docs.saltstack.com/en/latest/topics/tutorials/firewall.html#iptables

代码如下:

# Allow Minions from these networks
-I INPUT -s 10.1.2.0/24 -p tcp -m multiport --dports 4505,4506 -j ACCEPT
-I INPUT -s 10.1.3.0/24 -p tcp -m multiport --dports 4505,4506 -j ACCEPT
# Allow Salt to communicate with Master on the loopback interface
-A INPUT -i lo -p tcp -m multiport --dports 4505,4506 -j ACCEPT
# Reject everything else
-A INPUT -p tcp -m multiport --dports 4505,4506 -j REJECT

在master,minion分别启动后会minion端会到master这里申请认证

master执行:

代码如下:

salt-key –L ##列出所有认证的客户端
Accepted Keys:(已经接受的)
minion-id-1
Denied Keys:(未被允许的)
Unaccepted Keys:(未接受的)
minion-id-2
Rejected Keys:(拒绝的)
# salt-key –A ##接受所有

每个minion客户端的都有一个minion_id 即上面的minion-id-1 minion-id-2 就是客户端的minion_id 默认是取得客户端的主机名,而minion-id是不能重复的!!!

注:如需更改需要在客户端修改/etc/salt/minion_id配置文件,此文件只有在salt-minion启动后才会生成

Salt-key常用命令

代码如下:

salt-key –a 接受某个客户端请求
salt-key –A 接受所有客户端请求
salt-key –d 删除单个客户端
salt-key –D 删除所有客户端

注:删除之后,如需重新认证,重启客户端即可

Salt配置文件

两个重要的配置参数是file_roots(定义环境的目录),nodegroups(定义组)

主要配置文件在/etc/salt/master(master端)

/etc/salt/minion(minion端)

注:master端配置文件默认是会加载所有/etc/salt/master.d/(此目录默认不存在,需自己创建)目录下的所有以.conf结尾的配置文件,为了更易阅读,我将所有的自定义参数每个单一的创建一个配置文件,如环境变量,可以分别设置生产,测试,开发环境,在往下分就是主机的应用级别分类,根据具体环境,具体设置。

代码如下:

/etc/salt/master.d/env.conf
file_roots:
base:
- /data/salt/base
- /data/salt/base/sls
apache:
- /data/salt/apache
- /data/salt/apache/confsls
nginx:
- /data/salt/tomcat
- /data/salt/nginx/confsls
mysql:
- /data/salt/mysql

如上述配置所述,一共定义了四个个环境,分别是base,apache,nginx,mysql等,环境变量的作用在下面会说到,主要是配合sls文件使用

不同环境的sls配置文件的目录分别放在对应的目录,比如base环境的sls文件,既可以放在/data/salt/base 也可以放在/data/salt/base/sls,其中sls文件是什么会在后面说到

接下来配置所有minion的分组信息,按照用途或者不同ip等分类信息分别定义组名

代码如下:

/etc/salt/master.d/groups.conf
nodegroups:
redis: 'redis*'
mysql: 'mysql*'
apache: 'tomcat* not apache-[1][3-4]'
nottom: '* not tomcat*'

如上所述上面一共定义了四个组

注:注意上面的格式,salt几乎所有的配置文件遵循两个空格为一个递进的方式(即file_root下面空两个的都是它的参数,二它参数下面空两格的又是它参数的参数,后面写配置文件会更全面的介绍),而且不能用tab键补全!!!

Salt常用命令:

Salt语法

salt [客户端id,即目标] [模块名,如state,cmd。其实都是salt的模块] [动作]

接触saltstack的第一个salt命令一定是test.ping,主要用于探测客户端的存活状态

注:常用的两个模块主要是state,cmd两个模块,分别对应的功能就是state(状态,在后面会详细叙述,什么是状态),以及cmd(远程执行,而用到此模块的方法一般就是cmd.run)

首先介绍target,目标,或者说客户端id的匹配方式

代码如下:

[root@master~]# salt \* test.ping
minion-1:
True
minion-2:
True
minion-3:
True
minion-4:
True

True代表正常,没有响应当然代表客户端没有启动或者没有认证成功之类的。

指定目标主要有五种方式

一: Global,即salt默认的匹配方式,能识别终端常用的通配符,如*代表所有

如,salt '*' test.ping

二: List,列表,需-L指定。

如,salt -L 'foo,bar' test.ping 其中foo,bar是完整的minion_id

三:正则表达式,需-E指定。

如,salt -E 'pre[1-7]' test.ping 会匹配pre1,pre2..pre7,并且匹配到左右minion_id里面含有1-7的,如pre-11,pre7也会匹配到,如果只匹配1-7可使用参照下面

如,salt -E ^pre[1-7]$ test.ping或者 salt pre[1-7] test.ping

四:混合模式,需-C指定。里面可以既有正则表达式也有列表等

salt -C "apache* or E@ngin*" test.ping 匹配所有tomcat开头,或者mon开头的

五:分组,需要-N指定,其中组名就是上面/etc/salt/master.d/groups.conf文件里面配置的配置信息。

如,salt -N apache test.ping

然后是模块,主要介绍state,cmd,cp模块

注:想了解某个模块的功能或者具体参数可以

salt \* sys.doc [模块名,如cmd]

即salt \* sys.doc cmd 就会列出相关操作及示例了

远程命令执行

远程命令执行大概是最常用的操作的,比如获取所有minion端的ip地址,查看同一个目录下的文件,全部增加一条环境变量到/etc/profile文件里并刷新环境变量等等操作

cmd模块

主要用此模块的run方法,即cmd.run

使用方式如下,

salt \* cmd.run 'ls /root'

如上所示,选择了所有的客户端,master端用cmd.run模块,把''里面的'ls /root'命令全部分发下去,其中单引号''也可以用双引号""代替,引号的作用就是把被引号的命令传给salt-master,然后master分发给所有的minion执行,上述命令就会列出所有minion端/root目录下的文件

注:引号里面的命令跟在任何一台机器上的命令没有任何区别,唯一的区别就是salt执行的命令默认用的是sh,而我们常用的shell是bash,比如bash中ll是ls –l的别名,而sh里面是没有做ll的别名的,所以引号里面的命令如果用ll命令会提示找不到此命的

cmd有几个有用的参数,在可以着重介绍一下

cwd 定义命令所在的目录,即工作目录,在哪个目录执行操作
如:

代码如下:

Salt \* cmd.run cwd=/opt ‘pwd'
minion-id-1:
/opt

runas,定义执行此条命令的用户,使用哪个用户执行这条命令
如:

代码如下:

Salt \* cmd.run runas=nobody ‘touch /tmp/file'

然后去客户端就会发现,在/tmp/目录下有一个file文件,拥有者是nobody

然后就state模块了

主要用到的几个方法是sls,highstate,show_sls

在讲state模块的时候首先得了解sls文件。

Sls文件用.sls结尾,放在指定的环境目录下,即提到的/data/salt/base /data/salt/base/sls或者/data/salt/apache/sls等目录

注:假如在这两个目录下有两个一样的sls文件,那么会file_root配置的第一个环境目录,即

比如环境:

base:

代码如下:

/data/salt/base
/data/salt/base/sls

会执行/data/salt/base里的sls文件,因为它在前一行

sls文件基本格式如下:

例子一

代码如下:

/tmp/ttt20:
file.managed:
- source: salt://files/tst
- mode: 700
- backup: minion
- makedirs: True

例子二

代码如下:

testfile:
file.managed:
- name: /tmp/ttt20
- source: salt://files/tst
- mode: 700
- backup: minion
- makedirs: True

如上所示,其实例子一与例子二是达成了一样的效果,只不过写法不一样
像例子一,因为没有- name: /tmp/ttt20所以,它会去第一行的标识作为name
,而例子二的testfile可以任意起名,只要不与该文件中的其他标识一样即可。

上面的例子达到的功能就是,将/srv/salt/files/tst文件复制到客户端的/tmp/ttt20位置,如果存在则替换,如果已存在且一样则提示is correct state,即已经是正确的状态了。

然后就是top.sls

在每个独立的salt环境下有且只能有一个top.sls文件,这个文件为该环境的入口文件,里面记录了目标主机对应的sls文件
如:

base:

minion-id-1:
- test1
- test2

minion-id-2:
- test1
- test3

以tomcat-1为例

它匹配了

- test1
- test2

上面一共是一个2个sls配置文件,即匹配该环境下的test11.sls,test2.sls文件
所以在执行state模块的时候,它会去检索这些对应的配置文件并执行该配置文件里的内容。
注:在前面提到过,这些参数前面的空格不能用tab键补全或者少写,不然会报错,再者就是如果配置文件为xxxx.sls 在调用这个配置文件的时候只要写xxxx,即它的文件名,没有后缀

以test1为例

代码如下:

/tmp/testfile.txt:
file.managed:
- source: salt://test.txt
- mode: 700
- user: root
- mode: 644
- makedirs: True

功能就是调用file模块,将salt://test.txt(其中,salt://对于该环境的file_root目录,即/data/salt/base)与目标的/tmp/testfile.txt文件做比对,如不一致则更新。

并且此文件的拥有者为root mask码为644,如果目标文件目录不存在就创建

现在回到highstate,sls,show_sls方法

执行如下

代码如下:

salt \* state.sls test
salt \* state.highstate
salt \* state.show_sls test

上面的意思依次是

1.在当前环境下寻找test.sls文件并执行

2.匹配当前环境的top.sls文件所有的sls文件并执行

3.查看当前环境test.sls文件的执行内容,但是不在客户端执行。

注:上面特别提到了是在当前环境,默认情况下,salt只会查找执行base环境下的sls文件,不会执行其他环境的配置文件,所以在不同环境下,需要指定要执行的配置环境,比如apache环境,只是执行apache的sls文件的话,则需声明saltenv=apache,如下

代码如下:

salt \* state.sls test saltenv=apache
salt \* state.highstate saltenv=apache
salt \* state.show_sls test saltenv=apache

(0)

相关推荐

  • 通过Python使用saltstack生成服务器资产清单

    SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的puppet和加强版的func.SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq.PyCrypto.Pyjinjia2.python-msgpack和PyYAML等)构建. 通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理.分发文件.采集服务器数据.操作系统

  • Saltstack快速入门简单汇总

    saltstack是使用python编写的开源自动化部署与管理工具,拥有良好的扩展性以及优秀的执行效率,配置简单,可以工作在多平台上,经常被描述为 Func加强版+Puppet精简版. saltsatck优点:首先,速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的:其次,非常灵活,源码是python,方便理解和自定义模块:最后,命令简单,功能强大. 前言:在很久以前,只有几台主机的时候当然不需要什么自动糊工具,但是随着硬件成本越来越低廉的今天,随随便便就好几十台服务器,靠手工不是搞不定,

  • Vuex 快速入门(简单易懂)

    一.vuex介绍  (1)vuex是什么? 1. 借鉴 了Flux.Redux. The Elm Architecture 2. 专为 Vue.js 设计 的状态管理模式 3. 集中式存储和管理应用程序中所有组件的状态 4. Vuex 也集成到 Vue 的官方调试工具 5. 一个 Vuex 应用的核心是 store(仓库,一个容器),store包含着你的应用中大部分的状态 (state). (2)什么情况下我应该使用 Vuex? 1. 不适用:小型简单应用,用 Vuex 是繁琐冗余的,更适合使用

  • SpringBoot MyBatis简单快速入门例子

    目录 一.MyBatis简介 二.MyBatis使用步骤 一.MyBatis简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型.接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录. 二.MyBatis使用步骤 1.MyBatis工程总体目录结构 2

  • MongoDB快速入门笔记(二)之MongoDB的概念及简单操作

    MongoDB是面向集合的文档式数据库,不像关系数据库那样,有表,列.行,mongoDB数据库则是由一系列的文档组成.下面给大家介绍MongoDB的概念及简单操作. 1.以下列举普通的关系型数据库和MongoDB数据库简单概念上的区别: 2.MongoDB的简单操作 (1)启动MongoDB数据库之后,使用命令mongo,显示如下,默认连接到test数据库. MongoDB shell version: 3.2.6 connecting to: test 使用命令show dbs,可以查看所有的

  • mybatis新手快速入门以及一些错误汇总

    一.使用maven加载依赖 加载了连接数据库的依赖.mybatis的依赖以及lombok的依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> &

  • hibernate4快速入门实例详解

    Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(Object RelationalMapping) ORMapping基本对应规则: 1:类跟表相对应 2:类的属性跟表的字段相对应 3:类的实例与表中具体的一条记录相对应 4:一个类可以对应多个表,一个表也可以对应对个类 5:DB中的表可以没有主键,但是Object中必须设置主键字段 6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系 7:Object中属性的个数和名称可

  • 新手如何快速入门Python(菜鸟必看篇)

    学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如何开始入门Python.只要方向对了,就不怕路远. 设定目标 当你决定入门 Python 时,需要一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作,目标明确后,你需要了解企业对初级程序员有哪些技能要求,下面是我从拉勾网找的一个初级 Python 工程师的任职要求: 1.熟悉 Pytho

  • DB2 9(Viper)快速入门

    正在看的db2教程是:DB2 9(Viper)快速入门. 为了帮助您快速掌握 DB2 自身的 XML 特性,请完成几个普通的任务,比如: 创建用于管理 XML 数据的数据库对象,包括一个测试数据库.一些示例表和视图. 使用 INSERT 和 IMPORT 语句将 XML 数据填充到数据库中. 验证您的 XML 数据.使用 DB2 开发和注册您的 XML 模式,并在导入数据时使用 XMLVALIDATE 选项.后续文章将包括其他主题,比如使用 SQL 查询.更新和删除 DB2 XML 数据,使用

  • jQuery Easyui快速入门教程

    1.什么是JQuery EasyUI jQuery EasyUI是一组基于JQuery的UI插件集合,而JQueryEasyUI的目标就是帮助开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂的JavaScript,也不需要对css样式有深入的了解,开发者需要了解的只是一些简单的html标签. 2.学习jQuery EasyUI的条件 因为JQueryEasyUI是基于jQuery的UI库,所以,必须需要JQuery课程的基础. 3.JQuery EasyUI的特点 基于JQu

  • Spring Boot 快速入门指南

    最近因为项目的缘故,需要接触 Spring Boot,详细的介绍可以参考官方的文档,这里主要根据自己学习的实践进行简单分享.版本:1.3.6 简介 Spring 框架是非常著名的 Java 开源框架,历经十多年的发展,整个生态系统已经非常完善甚至是繁杂,Spring Boot 正是为了解决这个问题而开发的,为 Spring 平台和第三方库提供了开箱即用的设置,只需要很少的配置就可以开始一个 Spring 项目.当然,建议使用 Java 8 来进行开发. Spring Boot 实际上走的是 Se

随机推荐