Saltstack简单汇总,快速入门

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

   前言:在很久以前,只有几台主机的时候当然不需要什么自动糊工具,但是随着硬件成本越来越低廉的今天,随随便便就好几十台服务器,靠手工不是搞不定,但是反复的重复着没有太多技术的操作一定会让人抓狂的的,所以有必要选择一个可以批量操作部署的自动化工具,诸如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

1
2
3
4
5
6
7
# 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结尾的配置文件,为了更易阅读,我将所有的自定义参数每个单一的创建一个配置文件,如环境变量,可以分别设置生产,测试,开发环境,在往下分就是主机的应用级别分类,根据具体环境,具体设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
/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等分类信息分别定义组名

1
2
3
4
5
6
/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,即目标]  [模块名,如statecmd。其实都是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文件基本格式如下:

例子一

1
2
3
4
5
6
/tmp/ttt20 :
   file .managed:
     source : salt: //files/tst
     - mode: 700
     - backup: minion
     - makedirs: True


 

例子二

1
2
3
4
5
6
7
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文件

如:

1
2
3
4
5
6
7
8
base:
   minion- id -1:
     - test1
     - test2
     
   minion- id -2:
     - test1
     - test3


以tomcat-1为例

它匹配了

1
2
     - test1
     - test2


上面一共是一个2个sls配置文件,即匹配该环境下的test11.sls,test2.sls文件

所以在执行state模块的时候,它会去检索这些对应的配置文件并执行该配置文件里的内容。

注:在前面提到过,这些参数前面的空格不能用tab键补全或者少写,不然会报错,再者就是如果配置文件为xxxx.sls  在调用这个配置文件的时候只要写xxxx,即它的文件名,没有后缀

以test1为例

1
2
3
4
5
6
7
/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


暂时写到这里吧,如有错误还望指正j_0019.gif



本文转自 youerning 51CTO博客,原文链接:http://blog.51cto.com/youerning/1708964


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
消息中间件 监控 网络协议
SaltStack安装Apache/Mysql/PHP部署Wordpress
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。 SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。 master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受
151 0
|
关系型数据库 应用服务中间件 测试技术
|
Python 消息中间件 运维