菜鸟玩云计算之二十

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入门初步的更多相关文章

  1. 菜鸟玩云计算之十二:KVM虚拟机更改大小

    菜鸟玩云计算之十二:KVM虚拟机更改大小 参考: http://www.missionfamilybank.org/expanding-resizing-your-qcow2-virtual-mach ...

  2. 菜鸟玩云计算之十六:Ubuntu14.04上创建的虚拟机迁移到RHEL6.4

    菜鸟玩云计算之十六:Ubuntu14.04上创建的RHEL6.4虚拟机迁移到RHEL6.4主机上 RHEL6.4 Server作为虚拟机的HOST,执行以下的命令检查配置和安装相关软件: # egre ...

  3. 菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题

    菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题 今天早上,我的Ubuntu12.04.3LTS Desktop提示升级,升级. 从vm-ubuntu12.04克隆出虚拟机vm-thrift: $ s ...

  4. 菜鸟玩云计算之廿二: saltstack 配置

    菜鸟玩云计算之廿二: saltstack 配置 要求环境: RHEL6.4+ >=Python2.6.6, < Python 3.0 关闭salt-master/minion服务:   # ...

  5. 菜鸟玩云计算之廿一: saltstack之pillar

    菜鸟玩云计算之廿一: saltstack之pillar 参考: 点击打开链接 查看pillar数据: # salt '*' pillar.items pillar的默认根目录在:/srv/pillar ...

  6. 菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机

    菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机 chedou@hgdb.net 虚拟机给工作带来巨大的便利,不仅仅体现在资源的按需使用,而且配置的迁移特别方便.本文将使用Ubuntu ...

  7. 菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章

    菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章 cheungmine, 2014-10-26 在上一章中,我们准备好了计算机和软件.本章开始部署hadoop 高可用集群. 2 部署 ...

  8. 菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章

    菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章 cheungmine, 2014-10-25 0 引言 在生产环境上安装Hadoop高可用集群一直是一个需要极度耐心和体力的细致工作 ...

  9. 菜鸟玩云计算之十七:RHEL克隆虚拟机后改变网卡地址

    菜鸟玩云计算之十七:RHEL克隆虚拟机后改变网卡地址 (一)更改hostname # vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=your-vm ...

随机推荐

  1. The type org.apache.commons.lang.exception.NestableRuntimeException cannot be resolved.

    最近自己练手写项目时,遇到了这个错,写个文章记录下, The type org.apache.commons.lang.exception.NestableRuntimeException canno ...

  2. Android 实现串口的移植

    安卓串口的实现,需要底层C++配合,不过这次我们根据framework中的思想,直接用API修改提供给JAVA层调用,这个就比较简单了. DEV项目需要,要实现在Android中实现串口的收发功能,有 ...

  3. 快速排序quick_sort(python的两种实现方式)

    排序算法有很多,目前最好的是quick_sort:unstable,spatial complexity is nlogN. 快速排序原理 python实现 严蔚敏的 datastruct书中有伪代码 ...

  4. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

  5. 大数据基础知识问答----hadoop篇

    handoop相关知识点 1.Hadoop是什么? Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速 ...

  6. 下载Android源代码编译错误总结

    错误1: prebuilts/sdk/api/18.txt:22055: error 9: Removed public method android.telephony.gsm.SmsMessage ...

  7. 开发人员需要熟知的常用Linux命令Version、Kernel查看

    当我们需要在Linux系统中安装一些软件而去下载安装文件时,一般都需要确认到底下载哪个版本的安装包,这就需要我们知道自己的Linux系统到底是什么版本.什么内核,常见的版本.内核查看命令或者文件有如下 ...

  8. 早期Swift中Cocos2D初始化代码的重构

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在早期的Swift中在子类里只能调用超类的design ...

  9. (七十二)自定义通知NSNotification实现消息传递

    众所周知,iOS中一般在类之间传递消息使用较多的是delegate和block,还有一种是基于通知进行的消息传递,我们常常是使用系统的通知,来实现一些功能,例如利用键盘尺寸改变的通知,我们可以根据键盘 ...

  10. ffplay for mfc 代码备忘

    之前上传了一个开源播放器工程ffplay for mfc.它将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下,并且使用MFC做了一套界面.它可以完成一个播放器播放视频的 ...