菜鸟玩云计算之二十:saltstack入门初步
菜鸟玩云计算之二十
SaltStack 入门初步
0. saltstack 是什么
参考下面的文章:
http://docs.saltstack.com/en/latest/topics/tutorials/walkthrough.html
Salt Stack 初探 之 另外一种用 Python 写的配置管理系统
http://www.mamicode.com/info-detail-461069.html
saltstack这货居然是用python2.6写的,费了好大的劲,才弄出来用python调用它.首先安装好salt-master(或者salt-minion),然后输入下面的命令:
# python2.6
>>> import salt.config
没有错误. 那么接下来就可以用python调用salt的api干活了.
0.1 salt-key 管理
master上执行:
# 列出所有key
# salt-key -L
# 接受所有key
# salt-key -A
# 验证并接受指定minion的key
# salt-key -f '202'
202: fd:c3:43:22:df:14:7e:b9:1e:cd:be:9a:fc:62:17:7c
在minion id: 202上执行:
# salt-call key.finger --local
local:
fd:c3:43:22:df:14:7e:b9:1e:cd:be:9a:fc:62:17:7c
在master上接受202的key:
# salt-key -a '202'
0.2 发送命令
## 测试命令
# salt '*' test.ping
## 打印磁盘使用
# salt '*' disk.usage
## 打印帮助文档
# salt '*' sys.doc
## 执行ls命令
# salt '*' cmd.run 'ls -l /etc'
## 显示minion的网络信息:
# salt '*' network.interfaces
0.3 安装软件包
salt 会调用合适的包管理工具执行软件包的安装(如yum和apt):
# salt '*' pkg.install ${pkgname}
如(节点必须配置好yum源):
# salt '*' pkg.install hadoop-lzo
1. 同步文件
slatsatck用于同步master上的配置文件到minion节点,首先在master上增加设置:
# mkdir -p /srv/salt/dev/services /srv/salt/dev/states /srv/salt/prod/services /srv/salt/prod/services # mkdir /etc/salt/master.d/ # vi fileserver.conf # service salt-master restart
fileserver.conf内容如下:
#### fileserver.conf
# Salt runs a lightweight file server written in zeromq to deliver files to
# minions. This file server is built into the master daemon and does not
# require a dedicated port.
file_roots:
base:
- /srv/salt/
dev:
- /srv/salt/dev/services
- /srv/salt/dev/states
prod:
- /srv/salt/prod/services
- /srv/salt/prod/states
假设在master: /srv/salt/下创建了文件: first.xml, 使用下面的命令可以实现文件first.xml下发到所有minions的/tmp下面:
# salt ‘*‘ cp.get_file salt://first.xml /tmp/first.xml 或 gzip=1-9,数字越大,压缩越高; makedirs=True 自动创建目录 # salt ‘*‘ cp.get_file salt://first.xml /tmp/salt/first.xml gzip=9 makedirs=True
这样我们就可以用脚本灵活控制服务器端(master)的配置文件的分发。
2. 目录同步
cp.get_dir,get_dir与get_file的用法十分相似,用来将整个目录分发到minions. 本例在master的/srv/salt下创建目录和文件:
/srv/salt/hadoop_conf_dir/hadoop.config, 同步到所有minion节点的/tmp/hacl_conf下面, 如果目录不存在则创建,使用压缩
# salt ‘*‘ cp.get_dir salt://hadoop_conf_dir /tmp/hacl_conf gzip=9 makedirs=True
这样,minion上为:
/tmp/hacl_conf/hadoop_conf_dir/hadoop.config
3. grains
1) grains的作用是在minion端的服务启动时,调用这个接口,收集minion端的信息,这些信息数据可以在salt的其他模块中直接使用,需要注意的是,这个接口只在minion端的minion服务启动时被调用一次,所以收集的数据是静态的,不会改变的,除非你重启了minion端的服务. 在master上执行下面的命令(202是minion节点id)收集minion端的信息:
# salt '202' grains.ls
显示:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
...
2) 使用grains.items模块列出所有可用grains的具体数据:
# salt '202' grains.items
3) 查看所有节点的IP地址:
# salt ‘*‘ grains.item ipv4 # NOT grains.items
4) 查看202的os版本:
# salt ‘202‘ grains.item os
4. 自定义grains_module
所有操作都是在master上运行!
4.1 写模块/srv/salt/_grains/${module_name}.py
自定义的grains_module存放在/srv/salt/_grains目录,下面定义一个获取max_open_file的grains:
# vi /srv/salt/_grains/max_open_file.py # chmod a+x /srv/salt/_grains/max_open_file.py
max_open_file.py内容如下:
#!/usr/bin/python2.6
#-*- coding: UTF-8 -*-
# cheungmine
import os,sys,commands
def Grains():
grains = {}
max_open_file=65536
try:
getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')
except Exception,e:
pass
if getulimit[0]==0:
max_open_file=int(getulimit[1])
grains['max_open_file'] = max_open_file
return grains
4.2 同步grains模块
## 到所有节点 # salt '*' saltutil.sync_all ## 到指定minion id的节点 ## salt '202' saltutil.sync_all
得到显示:
203:
----------
grains:
- grains.max_open_file
modules:
outputters:
renderers:
returners:
states:
utils:
202:
----------
grains:
- grains.max_open_file
modules:
outputters:
renderers:
returners:
states:
utils:
4.3 刷新模块(让minion编译模块)
# salt '*' sys.reload_modules 或 #### salt '202' sys.reload_modules
203:
True
202:
True
4.4 验证max_open_file
$ salt '*' grains.item max_open_file
203:
----------
max_open_file:
1024
202:
----------
max_open_file:
1024
5. 自定义module
存放在/srv/salt/_modules下面. 写一个测试的module: /srv/salt/_modules/nodejs.py, 内容如下:
#!/usr/bin/python2.6
#-*- coding: UTF-8 -*-
#
def status(cmd):
ret = {}
ret['Cmd'] = cmd
ret['Msg'] = "Good-Bye"
ret['Result'] = True
return ret
提交到所有minions(虚拟机上时间比较长):
# chmod a+x ./nodejs.py # salt '*' saltutil.sync_all # salt '*' sys.reload_modules
203:
----------
grains:
modules:
- modules.nodejs
outputters:
renderers:
returners:
states:
utils:
202:
----------
grains:
modules:
- modules.nodejs
outputters:
renderers:
returners:
states:
utils:
执行:
# salt '*' nodejs.status "hello"
203:
----------
Cmd:
hello
Msg:
Good-Bye
Result:
True
202:
----------
Cmd:
hello
Msg:
Good-Bye
Result:
True
菜鸟玩云计算之二十:saltstack入门初步的更多相关文章
- 菜鸟玩云计算之十二:KVM虚拟机更改大小
菜鸟玩云计算之十二:KVM虚拟机更改大小 参考: http://www.missionfamilybank.org/expanding-resizing-your-qcow2-virtual-mach ...
- 菜鸟玩云计算之十六:Ubuntu14.04上创建的虚拟机迁移到RHEL6.4
菜鸟玩云计算之十六:Ubuntu14.04上创建的RHEL6.4虚拟机迁移到RHEL6.4主机上 RHEL6.4 Server作为虚拟机的HOST,执行以下的命令检查配置和安装相关软件: # egre ...
- 菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题
菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题 今天早上,我的Ubuntu12.04.3LTS Desktop提示升级,升级. 从vm-ubuntu12.04克隆出虚拟机vm-thrift: $ s ...
- 菜鸟玩云计算之廿二: saltstack 配置
菜鸟玩云计算之廿二: saltstack 配置 要求环境: RHEL6.4+ >=Python2.6.6, < Python 3.0 关闭salt-master/minion服务: # ...
- 菜鸟玩云计算之廿一: saltstack之pillar
菜鸟玩云计算之廿一: saltstack之pillar 参考: 点击打开链接 查看pillar数据: # salt '*' pillar.items pillar的默认根目录在:/srv/pillar ...
- 菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机
菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机 chedou@hgdb.net 虚拟机给工作带来巨大的便利,不仅仅体现在资源的按需使用,而且配置的迁移特别方便.本文将使用Ubuntu ...
- 菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章
菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章 cheungmine, 2014-10-26 在上一章中,我们准备好了计算机和软件.本章开始部署hadoop 高可用集群. 2 部署 ...
- 菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章
菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章 cheungmine, 2014-10-25 0 引言 在生产环境上安装Hadoop高可用集群一直是一个需要极度耐心和体力的细致工作 ...
- 菜鸟玩云计算之十七:RHEL克隆虚拟机后改变网卡地址
菜鸟玩云计算之十七:RHEL克隆虚拟机后改变网卡地址 (一)更改hostname # vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=your-vm ...
随机推荐
- dynamic initializer和全局变量
"慎用全局变量,包括全局静态变量" 是众所周知的原则,因为全局变量除了会增加程序的维护成本. 如果全局变量是个复杂的对象,并且还使用其他的全局变量,那情况就变得复杂的多.因为全局变 ...
- Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的
Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...
- springMVC源码分析--HandlerMethod
在之前的博客中我们已经接触过HandlerMethod,接下来我们简单介绍一下HandlerMethod,简单来说HandlerMethod包含的信息包括类.方法和参数的一个信息类,通过其两个构造函数 ...
- Spring之MVC模块
Spring MVC的Controller用于处理用户的请求.Controller相当于Struts 1里的Action,他们的实现机制.运行原理都类似 Controller是个接口,一般直接继承Ab ...
- SQL语句常见问题的总结(持续更新)
语言问题 修改语言注册表\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432\ORACLE\KEY_DevSuitHome1中的NLS_LANG修改为AMERICAN_AMERIC ...
- [django1.6]跑批任务错误(2006, 'MySQL server has gone away')
有个django的定时任务的需求,调用django的orm来对数据库进行数据处理. 在交互环境下直接启动pyhton脚本没有问题,放在定时任务中时候,总是出现 (2006, 'MySQL serve ...
- FORM当前状态分析
变量 SYSTEM.RECORD_STATUS 确定当前记录状态.有四种返回值:CHANGED表示记录从数据库取来,并且该记录至少一个基表列被更新:INSERT表示给一个非取自数据库记录的基表 ...
- 浅谈hibernate+入门实例
Hibernate是对jdbc进一步的封装,随着项目的开展,小编开始接触到这个概念,一开始接触的时候并没有觉得hibernate有多神秘,没有进一步的研究,只是简单的知道她是对jdbc的进一步的封装, ...
- 1.搜索引擎的历史,搜索引擎起步,发展,繁荣,搜索引擎的原理,搜索技术用途,信息检索过程,倒排索引,什么是Lucene,Lucene快速入门
一: 1 搜索引擎的历史 萌芽:Archie.Gopher Archie:搜索FTP服务器上的文件 Gopher:索引网页 2 起步:Robot(网络机器人)的出现与spider(网络爬虫) ...
- adb -s 设备名 设备名还有非法字符
当有多台安卓设备在同一电脑上时 想敲adb控制某一个设备 需要如下格式 adb -s 设备名 设备名 可以用adb devices获取 当发现adb devices 获取的名字是特别长而且含有非法字符 ...