基础篇

--------------------------------------------------------------------------------------------------------

  概述:SaltStack简单来说是一个基础架构管理工具,这个比较抽象,说白就是一个运维管理工具,底层是使用python实现,C/S架构,支持分布式部署,据说可以轻松管理上W台服务器,和Puppet这类工具很类似,其主要的功能:

  • 基于Key的远程连接并执行命令;

  • 强大的搜索器,多种方式过滤服务器;

  • 灵活的远程部署实现方式;

  • 基于YAML格式对文件、用户、用户组及服务等资源灵活管理;

极简易安装

  本实例采用CentOS6.5_x86_64操作系统,在安装之前请先配置好Yum源

salt-master服务端安装

 yum -y install salt-master    /安装
rpm -aq|grep salt-master /检测
salt-master配置文件: /etc/salt/master

salt-minion客户端安装

 yum -y install salt-minion   /安装
rpm -aq|grep salt-minion /检测
salt-minion配置文件: /etc/salt/minion

添加客户端

 salt-key -L    /列出所有key,key格式是minion-id,如果没有配置minion-id,则是主机名
salt-key -A /接受所有key
salt-key -a “ZK-YJY-APP-” /接受指定的key
salt-key -R /拒绝所有未接受的key
salt-key -D /删除所有key
salt-key -d “ZK-YJY-APP-” /删除指定的key

Target搜索器

  添加了minion的key后就可以免密码将命令传输到minion,并把执行结果返回来,方便的进行批量操作了,想象一下,如果有上W台服务器,而只想查看某些服务器的配置信息,怎么实现 ? 当然要有一个目标搜索器才行,saltstack的target搜索器非常强大,基于minion的id进行匹配,所以我们在部署minion之前要事先对minion的id做好规划(如果不配置minion的id,则默认是使用主机名,也要对主机名做好规划)

glob方式

 salt “*” test.ping
salt “ZK-YJY-APP-” test.ping

正则表达式

 salt  “web*” test.ping
salt “web[-]NaNdb?” test.ping
salt “web-[x-z]” test.ping

grains类

 salt -G “os:CentOS” test.ping
salt -G "cpuarch:x86_64"test.ping

基于IP

 salt -S "192.168.153.130"test.ping
salt -S "192.168.153.0/24"test.ping

基于节点组

需要先在/etc/salt/master中定义nodegroups,如下:

 nodegroups:
group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com’
group2: 'G@os:Debian and foo.domain.com'
group3: 'L@webserver01,webserver02'
 salt -N group3 test.ping

复合方式

本质是上面的方式结合在一起,形成更为复杂的条件:

 salt -C 'webserv* and G@os:Debian orE@web-dc1-srv.*' test.ping

Grains是啥

grains简单来说就是一个字典,{“os”:CentOS, “num_cpus”:8},字典就是这样的key-value的键值对的一个无序集合,里面存放着minion端的所有配置信息,

列出配置信息的分类,其实就是查看有哪些key

 salt “*” grains.ls

列出配置信息的分类和具体分类信息,其实就是查看key-value

 salt “*” grains.items

列出某个配置信息项的具体信息

 salt “*” grains.item cpu_model

==========================================================================================

进阶篇States
-------------------------------------------------------------------------------------------------------
这篇是为自动化部署作准备的,核心就是弄清楚States的使用技巧

YAML基本格式

 nginx_package:      //声明id
file.managed: //文件模板的managed函数,作用是实现从master下载文件
- name: /tmp/nginx-1.8..tar.gz //定义名称空间
- source: salt://nginx/files/nginx-1.8.0.tar.gz //指定文件在master上的位置

难点说明:

saltstack的YAML格式通常以声明id开始,名称空间会覆盖id,也就是说,如果没有name,则id就是name,如果有name,id只作为标识,且在一个sls文件中,id不能重复,在states中有很多模块函数,可以对文件,用户,用户组,服务,定时任务等资源进行操作,我们只要调用并定义一些参数即可。

这里要注意下缩进和空间,仔细观察就明白了

条件判断和先决条件

 extract_nginx:    //声明id
cmd.run: //这个模块是表示要执行一些系统命令
- cwd: /tmp //切换到指定目录下
- names: //具体的命令,如果有多条可依次向下排列
- tar zxf nginx-1.8..tar.gz
- unless: test -d /tmp/nginx-1.8. //这里是一个条件判断
- require: //先决条件
- file: nginx_source //具体条件

难点说明:

  第一个要注意的地方是unless这个判断条件,这个条件如果返回false,cmd.run才执行,否则不执行,unless可以很好的控制同步配置后重复执行某些命令

  第二个需要注意的地方是先决条件require,先决条件除了require之外还是watch,但require可以用在任何模块中,watch只能用在service.running模块中

用户和组模块

nginx_user:     //声明id
user.present: //用户管理模块,以下是一些参数
- name: nginx
- uid:
- gid:
- createhome: true
- shell: /bin/bash
- require: //先决条件,表示要创建nginx用户先创建nginx这个组
- group: nginx
group.present:
- name: nginx
- gid:

服务模块

 nginx_service:     //声明id
service.running: //服务运行模块
- name: nginx
- enable: True
- reload: True
- watch: //监测以下条件是否变化,如果改变则重启服务
- file: /usr/local/nginx/conf/nginx.conf

我开始以为是修改minion的nginx配置会自动重启,后面验证不对,应该是修改了master上nginx的配置源文件,执行同步才会重启,使minion的nginx配置文件始终与master配置文件保持一致,这个是我测试的结果,也可能理解有误,后面再去研究吧。

Template模板

 {% for usr in['moe','larry','curly'] %}
{{ usr }}:
user.present
{% endfor %}

这个就是python中的模板标签的定义{%%},{{}}在,sls中,或者在配置源文件中都可以使用模板标签。

 apache:
pkg.installed:
{% if grains['os'] =='RedHat' %}
- name: httpd
{% elif grains['os'] =='Ubuntu' %}
- name: apache2
{% endif %}

使用模板可以比较灵活的对可变的部分进行控制

include引入

如果有多个sls文件,我们可以在一个sls文件中引入另一个sls,在init.sls文件顶部添加如下内容:

 include:
- install.sls
- conf.sls

批量部署nginx

有了以上的基础,就可以很方便的部署任何软件包了,这里重点讲下步骤:

编辑master配置文件,将如下内容注释去掉

 file_roots:
base: //此处的base标识在top.sls文件中引用
- /srv/salt //配置管理文件存放的root目录

当然,这里可以根据需要创建多个不同的file_roots目录

创建指定的目录

默认/srv目录下是空的,需要创建salt目录

创建top.sls文件

在/srv/salt目录下创建top.sls文件

 base:   //此处的base即在file_roots中定义的base
'*': //这里是表示target目标,可以使用搜索器定义
- nginx.install //表示file_roots目录下的nginx目录下的install.sls
- nginx.conf //表示file_roots目录下的nginx目录下的conf.sls

top.sls是一个入口文件,master同步时首先会去读取top.sls ,通过top.sls去找对应目录下的其它sls文件

编写install.sls和conf.sls

此处略去无数行

将软件包和配置文件和启动脚本放到指定目录

你懂的

网上有大量的部署配置,推荐一些比较好的网址,个人建议学saltstack之前最好有一些python基础,毕竟是python写的

http://blog.cunss.com/?p=272

http://docs.saltstack.cn/zh_CN/latest/

https://docs.saltstack.com/en/latest/

【SaltStack】SaltStack研究心得的更多相关文章

  1. Python字符串的encode与decode研究心得——解决乱码问题

    转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x8 ...

  2. WordPress研究心得

    WordPress,当初之所以研究这个,目的是在于开发一个多租户系统应用.总的来说,WordPress给了我不少启发和影响.为此,我决定这个研究心得分享出去. 总的来说,这篇文章参考了很多朋友们的博客 ...

  3. Python字符串的encode与decode研究心得乱码问题解决方法

    为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式? 为什么会报错“UnicodeEncodeError: 'asc ...

  4. Python字符串的encode与decode研究心得 乱码问题解决方法

    以下摘自:http://www.jb51.net/article/17560.htm 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x ...

  5. Javascript面向对象研究心得

    这段时间正好公司项目须要,须要改动fullcalendar日历插件,有机会深入插件源代码.正好利用这个机会,我也大致学习了下面JS的面向对象编程,感觉收获还是比較多的. 所以写了以下这篇文章希望跟大家 ...

  6. Flume研究心得

    最近两天,仔细的看了一下Flume中央日志系统(版本号:1.3.X),Flume在本人看来,还是一个非常不错的日志收集系统的,其设计理念非常易用,简洁.并且是一个开源项目,基于Java语言开发,可以进 ...

  7. Node稳定性的研究心得

    目前大部分Web服务器,如Apache,都使用多线程的方式响应多用户请求,即一个线程服务一个用户请求.这种模式其中一个好处是,当某个请求的线程上抛出的异常没被捕获,只会影响当前这个线程,不会影响其他请 ...

  8. pdf 转图片,提取图片研究心得

    1.pdf 中的数据是有多种编码的,详情请看:http://www.cnblogs.com/zendu/p/7644465.html 2.我的工作场景比较特殊,pdf中全部是图片,所以pdf转图片就有 ...

  9. scratch学习研究心得_逐步更新

    2019-10-30: Scratch对对象a克隆,不能选择克隆自己,这样可能下次一下子同时产生两个克隆体,要设置克隆a scratch3.0采用全新html5技术,图片和其他对象放大缩小,效果几乎不 ...

随机推荐

  1. OS 内存泄漏 导致 整个aix主机block

    问题 aix 主机 1.数据库主机使用vmstat 监控,隔几分钟 就是block 爆满. cpu 没有瓶颈,I/O 显示本地磁盘hdisk0和hdisk 1 是爆满. vmstat 同时显示大量pa ...

  2. 108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树.此题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1.示例:给定有序数组: [-10,-3,0,5,9], ...

  3. python_15(jquery)

    第1章 iquery 1.1 官网 1.2 流程图 1.3 Javascripts方法 1.4 书写格式 1.5 jQuery 的两大特 1.6 对比javascript代码量 第2章 入口函数(重要 ...

  4. SSH的端口转发

    这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 可以将远端服务器一 ...

  5. 再看SpringMVC通过一个DispatcherServlet处理Servlet

    初始入口: org.springframework.web.context.ContextLoaderListener org.springframework.web.context.ContextL ...

  6. 如何在asp.net mvc中添加自定义的HTML辅助种方法

    很久没在博客园发表文章了,今天来总结一下如何在asp.net mvc中添加自定义的HTML辅助方法.我们现在设计这么一个目前,利用自定义的HTML方法来渲染一个普通的img标记.直接进入主题吧: 首先 ...

  7. 接口文档管理工具rap

    git地址:  https://github.com/thx/RAP wiki : https://github.com/thx/RAP/wiki/home_cn 视频教程: http://thx.g ...

  8. C#实现MD5WITHRSA签名

    这是很久以前的写的一篇博客了,今天把他重新找出来整理一下发布到博客园 当时对接银联的时候搞了很久都没搞出来,后来一个偶然的机会发现类似的一个代码参考了一下终于弄好了 这段代码主要是实现了C#服务端对接 ...

  9. mybatis 部署日志

    <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> &l ...

  10. MYSQL 中随机读取一条数据

    SELECT * FROM res AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM res) - (SELECT MIN(id) FRO ...