saltstack 自动化运维神器(二)文件同步

文件同步:

其实在做openstack的运维对一些文件的同步其实是很繁琐。有一个配置项或者一行代码的源码文件进行同步。那么现在我们就开始介绍saltstack的文件同步功能

环境说明:操作系统版本:rhel6.5x64

1、master配置同步根目录

在开始saltstack的配置管理之前,要首先指定saltstack所有状态文件的根目录,在master上做如下操作

## 首先修改master的配置文件,指定根目录,注意缩进全部使用两个空格来代替Tab(python规范)## 确定指定的目录是否存在,如果不存在,需要手动来创建目录

[[email protected] ~]# vim /etc/salt/master 
file_roots:
  base:
    - /srv/salt
  dev:
    - /srv/salt/dev/

[[email protected] ~]# mkdir -p /srv/salt/dev
[[email protected] ~]# ls -ld /srv/salt/dev
drwxr-xr-x 2 root root 4096 Feb  3 21:49 /srv/salt/dev

重启master服务

[[email protected] ~]# service salt-master restart
Stopping salt-master daemon:                               [  OK  ]
Starting salt-master daemon:                               [  OK  ]

2、介绍cp.get_file

首先介绍cp.get_file,用来从master端下载文件到minion的指定目录下,如下

## 在master上创建测试用的文件

[[email protected] ~]# echo ‘This is test file with saltstack module to  cp.get_file‘ >/opt/getfile.txt        
[[email protected] ~]# cat /opt/getfile.txt 
This is test file with saltstack module to  cp.get_file

将文件拷贝到master的同步根目录下

[[email protected] ~]# cp /opt/getfile.txt /srv/salt/

在master上执行文件下发

[[email protected] ~]# salt ‘computer3‘ cp.get_file salt://getfile.txt /tmp/getfile.txt  
computer3:
    /tmp/getfile.txt

登录到computer3上查看同步情况

[[email protected] ~]# cat /tmp/getfile.txt 
This is test file with saltstack module to  cp.get_file

分发文件的一些属性:

(1)压缩  gzip

使用gzip的方式进行压缩,数字越大,压缩率就越高,9代表最大的压缩率

[[email protected] ~]# salt ‘computer8‘ cp.get_file salt://getfile.txt /tmp/getfile.txt gzip=9
computer8:
    /tmp/getfile.txt

(2)创建目录 makedirs(当分发的位置在目标主机上不存在时,自动创建该目录)

[[email protected] ~]# salt ‘computer8‘ cp.get_file salt://getfile.txt /tmp/srv/getfile.txt makedirs=True
computer8:
    /tmp/srv/getfile.txt

[[email protected] opt]# ll /tmp/srv/getfile.txt 
-rw-r--r-- 1 root root 56 Feb  3 22:14 /tmp/srv/getfile.txt

3、grains

先介绍一下grains,这个接口的作用是在minion端的minion服务启动时,调用这个接口,收集minion端的信息,这些信息数据可以在salt的其他模块中直接使用,需要注意的是,这个接口只在minion端的minion服务启动时被调用一次,所以收集的数据是静态的,不会改变的,除非你重启了minion端的服务

grains的基本用法:

[[email protected] ~]# salt ‘computer3‘ grains.ls
computer3:
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - defaultencoding
    - defaultlanguage
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - gpus
    - host
    - hwaddr_interfaces
    - id
    - ip_interfaces
    - ipv4
    - ipv6
    - kernel
    - kernelrelease
    - localhost
    - manufacturer
    - master
    - mem_total
    - nodename
    - num_cpus
    - num_gpus
    - os
    - os_family
    - osarch
    - oscodename
    - osfinger
    - osfullname
    - osmajorrelease
    - osrelease
    - path
    - productname
    - ps
    - pythonpath
    - pythonversion
    - saltpath
    - saltversion
    - saltversioninfo
    - serialnumber
    - server_id
    - shell
    - virtual
    - zmqversion

使用grains.items模块列出所有可用grains的具体数据

[[email protected] ~]# salt ‘computer3‘ grains.items
computer3:
  biosreleasedate: 08/28/2013
  biosversion: 2.10.0
  cpu_flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt aes lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
  cpu_model: Intel(R) Xeon(R) CPU E7- 4820  @ 2.00GHz
  cpuarch: x86_64
  defaultencoding: UTF8
  defaultlanguage: en_US
  domain: 
  fqdn: computer3
  fqdn_ip4:
      192.168.100.23
  fqdn_ip6:
  gpus:
      {‘model‘: ‘MGA G200eW WPCM450‘, ‘vendor‘: ‘unknown‘}
  host: computer3
  hwaddr_interfaces: {‘lo‘: ‘00:00:00:00:00:00‘, ‘tap002cf093-0c‘: ‘fe:16:3e:cf:43:28‘, ‘em4‘: ‘f0:1f:af:90:38:65‘, ‘eth1.2‘: ‘f0:1f:af:90:37:fd‘, ‘em3‘: ‘f0:1f:af:90:38:63‘, ‘brq8f15ee7f-54‘: ‘f0:1f:af:90:37:fd‘, ‘brqadf94242-74‘: ‘f0:1f:af:90:37:fd‘, ‘eth1.400‘: ‘f0:1f:af:90:37:fd‘, ‘eth1‘: ‘f0:1f:af:90:37:fd‘, ‘eth0‘: ‘f0:1f:af:90:37:fb‘}
  id: computer3
  ip_interfaces: {‘lo‘: [‘127.0.0.1‘], ‘tap002cf093-0c‘: [], ‘em4‘: [], ‘eth1.2‘: [], ‘em3‘: [], ‘brq8f15ee7f-54‘: [], ‘brqadf94242-74‘: [], ‘eth1.400‘: [], ‘eth1‘: [], ‘eth0‘: [‘192.168.100.23‘]}
  ipv4:
      127.0.0.1
      192.168.100.23
  ipv6:
      ::1
      fe80::60f7:96ff:feab:3d44
      fe80::f21f:afff:fe90:37fb
      fe80::f21f:afff:fe90:37fd
      fe80::f8e7:cdff:fe54:7d02
      fe80::fc16:3eff:fecf:4328
  kernel: Linux
  kernelrelease: 2.6.32-431.el6.x86_64
  localhost: computer3
  manufacturer: Dell Inc.
  master: 192.168.100.200
  mem_total: 225995
  nodename: computer3
  num_cpus: 64
  num_gpus: 1
  os: RedHat
  os_family: RedHat
  osarch: x86_64
  oscodename: Santiago
  osfinger: Red Hat Enterprise Linux Server-6
  osfullname: Red Hat Enterprise Linux Server
  osmajorrelease:
      6
      5
  osrelease: 6.5
  path: /sbin:/usr/sbin:/bin:/usr/bin
  productname: PowerEdge M910
  ps: ps -efH
  pythonpath:
      /usr/bin
      /usr/lib64/python26.zip
      /usr/lib64/python2.6
      /usr/lib64/python2.6/plat-linux2
      /usr/lib64/python2.6/lib-tk
      /usr/lib64/python2.6/lib-old
      /usr/lib64/python2.6/lib-dynload
      /usr/lib64/python2.6/site-packages
      /usr/lib64/python2.6/site-packages/gtk-2.0
      /usr/lib/python2.6/site-packages
      /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
  pythonversion: 2.6.6.final.0
  saltpath: /usr/lib/python2.6/site-packages/salt
  saltversion: 2014.1.10
  saltversioninfo:
      2014
      1
      10
      0
  serialnumber: XXXXXX
  server_id: 111111111
  shell: /bin/bash
  virtual: physical
  zmqversion: 4.0.5

ping测试grains中os的值为RedHat的主机通信是否正常

[[email protected] ~]# salt -G ‘os:RedHat‘ test.ping 
computer5:
    True
computer8:
    True
computer6:
    True
computer7:
    True
computer4:
    True
computer3:
    True

查看uadoop2主机的ip地址,注意这里不是items噢,而是item

[[email protected] ~]# salt ‘*‘ grains.item ipv4
computer5:
  ipv4:
      127.0.0.1
      192.168.100.25
computer7:
  ipv4:
      127.0.0.1
      192.168.100.27
computer4:
  ipv4:
      127.0.0.1
      192.168.100.24
computer3:
  ipv4:
      127.0.0.1
      192.168.100.23
computer8:
  ipv4:
      127.0.0.1
      192.168.100.28
computer6:
  ipv4:
      127.0.0.1
      192.168.100.26

好了,在介绍了grains接口之后,接下来看下在cp模块中如何简单的使用grains的数据呢

先确定os是什么版本

[[email protected] RedHat]# salt ‘computer4‘  grains.item os         
computer4:
  os: RedHat
[[email protected] ~]# mkdir /srv/salt/RedHat/
[[email protected] ~]# mv /srv/salt/getfile.txt  /srv/salt/RedHat/
[[email protected] RedHat]# salt ‘computer4‘ cp.get_file "salt://{{grains.os}}/getfile.txt" /opt/getfile.txt template=jinja
computer4:
    /opt/getfile.txt

4、目录同步

介绍cp.get_dir,get_dir与get_file的用法十分相似,用来将整个目录分发到minions

创建测试文件

[[email protected] ~]# mkdir /srv/salt/test_dir
[[email protected] ~]# echo ‘hello word !!‘ >>/srv/salt/test_dir/hello1.txt
[[email protected] ~]# echo ‘hello2 word !!‘ >>/srv/salt/test_dir/hello2.txt
[[email protected] ~]# ll /srv/salt/test_dir/
total 8
-rw-r--r-- 1 root root 14 Feb  4 14:49 hello1.txt
-rw-r--r-- 1 root root 15 Feb  4 14:49 hello2.txt

测试分发: 执行目录文件的分发,并使用压缩传输

[[email protected] ~]# salt ‘computer4‘ cp.get_dir salt://test_dir /tmp gzip=9 
computer4:
    - /tmp/test_dir/hello1.txt
    - /tmp/test_dir/hello2.txt

 登录到目标节点查看分发状态:
[[email protected] ~]# ll /tmp/test_dir/
total 8
-rw-r--r-- 1 root root 14 Feb  4 14:52 hello1.txt
-rw-r--r-- 1 root root 15 Feb  4 14:52 hello2.txt

5、数据的灵活变更

在往下介绍之前,首先介绍一下salt的pillar接口,pillar是salt中比较重要的组件,跟grains有些相似,但是pillar相比于grains更加灵活,而且是动态的,数据可以随时更新,只要你愿意的话。而grains只在minion启动时采集一次数据,关于pillar官网描述如下,简单翻译一下,但不保证翻译的到位,意思是说pillar是salt实现部署功能的最重要的组件,能够为minions生成非常灵活的数据,这些数据可以被salt的其他的组件所使用。

   The pillar interface inside of Salt is one of the most important components of a Salt deployment. Pillar is the interface used to generate arbitrary data for specific minions. The data generated in pillar is made available to almost every component of Salt.

grains的基本用法

(1)配置master

[[email protected] ~]# vim /etc/salt/master 
pillar_roots:
  base:
    - /srv/pillar
[[email protected] ~]# service salt-master restart
Stopping salt-master daemon:                               [  OK  ]
Starting salt-master daemon:                               [  OK  ]
[[email protected] ~]# mkdir /srv/pillar
[[email protected] ~]# mkdir /srv/pillar/user   //创建一个user的测试目录

(2)创建入口文件

首先在/srv/pillar目录中要有一个入口文件top.sls

[[email protected] pillar]# cat top.sls 
base:
  ‘computer3‘:
    - date         ## 为uadoop2定义了一个属性数据,引用了跟top.sls同目录下的data.sls

  ‘computer4‘:
    - webserver    ## 为uadoop3定义了一个属性数据,引用了跟top.sls同目录下的web.sls

  ‘*‘:
    - user         ## 为所有节点定义了一个属性数据,引用了/srv/pillar/user/init.sls
                   ## 这里指定的是一个目录,salt会自动在top.sls文件中的引用目录中寻找状态文件
                   ## 因此会找到位于user目录中的init.sls文件
                   ## 在测试请不要有任何的‘#’
编写其他两个属性:
[[email protected] pillar]# cat date.sls 
date: some date
[[email protected] pillar]# cat webserver.sls 
webserver: test_dir

测试:

# salt ‘*‘ pillar.items

computer3:
    ----------
    date:
        some date
    master:
        ----------
        auth_mode:
            1
        auto_accept:
        ....省略N行...........
    user:
        ----------
        foway:
            1200
        kadefor:
            1000
        kora:
            1000
computer4:
    ----------
    master:
        ----------
        auth_mode:
            1
        auto_accept:
            False
        cachedir:
            /var/cache/salt/master
         .........省略N行..........
    user:
        ----------
        foway:
            1200
        kadefor:
            1000
        kora:
            1000
    webserver:
        test_dir
computer5:
    ----------
    master:
        ----------
        auth_mode:
            1
        auto_accept:
            False
        cachedir:
            /var/cache/salt/master
            ......省略N行......
    user:
        ----------
        foway:
            1200
        kadefor:
            1000
        kora:
            1000
            ...............

在master上远程获取刚刚定义的属性

[[email protected] pillar]# salt ‘computer3‘ pillar.items
computer3:
    ----------
    date:
        some date
    master:
        ----------
        auth_mode:
            1
        auto_accept:
            False
        cachedir:
        ..........省略N行..........
    user:
        ----------
        foway:
            1200
        kadefor:
            1000
        kora:
            1000
           
[[email protected] pillar]# salt ‘computer4‘ pillar.items 
computer4:
    ----------
    master:
        ----------
        auth_mode:
            1
        auto_accept:
            False
       ..........省略N行..........
    user:
        ----------
        foway:
            1200
        kadefor:
            1000
        kora:
            1000
    webserver:
        test_dir

## 可以看到刚刚为不同的minion定义的属性已经同步到了各个minion上,从这个测试可以看出,使用pillar

## 我们可以为不同的minion或者不同的minion组定义不同的属性,极其灵活。

好了,在介绍了pillar接口之后,接下来看下在cp模块中如何简单的使用pillar定义的属性数据呢

我们可以利用之前定义的属性来匹配不同的minion

首先先同步一下pillar到每个节点上

[[email protected] ~]# salt ‘*‘ saltutil.refresh_pillar
computer8:
    None
computer4:
    None
computer5:
    None
computer6:
    None
computer3:
    None
computer7:
    None

测试一下匹配

[[email protected] ~]# salt -I -v ‘date:some date‘ test.ping                    
Executing job with jid 20150204164730224160
-------------------------------------------

computer3:
    True
[[email protected] ~]# salt -I -v ‘webserver:test_dir‘ test.ping
Executing job with jid 20150204165017170702
-------------------------------------------

computer4:
    True
[[email protected] ~]# salt -I -v ‘users:foway:1200‘ test.ping   
Executing job with jid 20150204165053938046
-------------------------------------------

computer5:
    True
computer6:
    True
computer7:
    True
computer3:
    True
computer8:
    True
computer4:
    True

匹配computer3,然后在master上远程分发文件到computer上去

[[email protected]troller1 salt]# salt -I -v ‘webserver:test_dir‘ cp.get_dir "salt://{{pillar.webserver}}" /opt/ gzip=9 template=jinja
Executing job with jid 20150204165518149257
-------------------------------------------

computer4:
    - /opt//test_dir/hello1.txt
    - /opt//test_dir/hello2.txt

感觉saltstack的功能很强大,有没有把你震惊到。继续学习把。。。。。

时间: 2024-08-07 17:40:59

saltstack 自动化运维神器(二)文件同步的相关文章

saltstack 自动化运维神器(二)

文件同步: 其实在做openstack的运维对一些文件的同步其实是很繁琐.有一个配置项或者一行代码的源码文件进行同步.那么现在我们就开始介绍saltstack的文件同步功能 环境说明:操作系统版本:rhel6.5x64 1.master配置同步根目录 在开始saltstack的配置管理之前,要首先指定saltstack所有状态文件的根目录,在master上做如下操作 ## 首先修改master的配置文件,指定根目录,注意缩进全部使用两个空格来代替Tab(python规范)## 确定指定的目录是否

saltstack 自动化运维神器(四)salt-ssh

satlstack号称自动化运维的利器,那么saltstack能不能实现自身的批量部署呢?如果你也有这样的疑问,那么就更要看这篇文章了.答案当然是肯定的啦!saltstack可以利用salt-ssh来实现自身的批量部署.首先看待salt-ssh,很容易想到它是一个依赖 ssh 来进行远程命令执行的工具,这样做的好处是你不必在客户端安装minion程序,就可以实现远程命令的执行,而且salt-ssh支持salt的绝大部分功能. 10.10.10.4      salt-master    os:r

saltstack 自动化运维神器(三)节点组及复合匹配器

saltstack实现远程配置管理功能首先是要先匹配到对应的target minion,然后才会将命令发送到匹配到的minion上去执行.这里介绍两种比较强大的匹配方法,一是创建节点组:二是使用复合匹配器. 节点组将不同的主机分配到不同的组中去,便于实现主机的集中化管理,接下来首先看salt分组功能的实现. 要使用salt的分组功能,需要在master节点上进行配置,配置的方式有两种: (1).将分组的信息写在master的主配置文件 (2).将分组的信息写在一个单独的配置文件中,然后主配置文件

saltstack 自动化运维神器(一)

随着服务器的增多,越来越多的工作是反复一样的操作,这时候我们开始烦恼.介绍一款很好用的批量操作的软件系统:saltstack.废话少说. 环境说明:操作系统版本:rhel6.5x64 软件下载:http://yunpan.cn/cKvxxLbmaQiMM  访问密码 166e 官方下载:http://docs.saltstack.cn/zh_CN/latest/ 1.安装 master 节点 yum install salt-master minion 节点 yum install salt-m

saltstack 自动化运维安装

saltstack --自动化运维 saltstack-master 安装:yum -y install salt-mastersaltstack-master配置:如下图,修改 salt-master本身监听地址sed -i 's/#interface: 0.0.0.0/interface: 192.168.1.26/g' /etc/salt/mastersed -e '/^$/d;/^#/d' /etc/salt/master #查看配置 可以在master 端使用自动认证(可选)vim /

Saltstack自动化运维工具 实战与部署

自动化工具比较 Puppet也许是四款工具中最深入人心的.就可用操作.模块和用户界面而言,它是最全面的.Puppet呈现了数据中心协调的全貌,几乎涵盖每一个运行系统,为各大操作系统提供了深入的工具.初始设置比较简单,只需要在需要加以管理的每个系统上安装主服务器和客户端代理软件.命令行接口(CLI)简单直观,允许通过puppet命令下载和安装模块.然后,需要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端通过立即触发更改配置文件的推送(pu

Saltstack 自动化运维工具详细介绍

Saltstack 简介 什么是saltstack ? Saltstack是基于python开发的一套C/S架构配置管理工具 ? 使用SSL证书签方的方式进行认证管理 ? 底层使用ZeroMQ消息队列pub/sub方式通信 – 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作 – 采用RSA Key方式确认身 主要功能 ? Saltstack最主要的两个功能是:配置管理与远程执行 ? Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器 ? S

gitolite mirror+capistrano2.1.5+hudson3.2.1实现半自动化运维(二)

第一节介绍了gitolite mirror,使得代码能够被传送到服务器组的内部网络中,但是接下来如何将代码再部署到上千台服务器上,而且还能够实现代码回滚呢? shell工具?目前对我来说可以很快的做出来,而且比学一个新的软件快多了.但是记得老男孩的李某某曾经写过一个博客"哥们别逗了,写个脚本那真不叫运维自动化!",人家Python脚本都不叫自动化,我还是不写shell了.所以就必须学习"批量代码部署.回滚.执行"工具了,比如capistrano. capistran

saltstack自动化运维

一.Saltstack架构 Saltstack基于C/S架构,服务端master:192.168.179.128和客户端minions :192.168.179.129 二.Saltstack的安装配置 1.master的安装 rpm -ivhhttp://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpmyum install salt-master默认配置文件位于/etc/salt/master ,默认不需要更改