Saltstack 远程操作(grains,pillar)服务安装+配置管理

一、Saltstack远程执行命令

如下的操作均是在Salt-master上面进行。

[root@zhdy01 sbin]# salt '*' test.ping
zhdy01:
    True
zhdy02:
    True

//如上的测试: *代表所有已经接受(salt-key)的机器去ping测试。

运行系统的命令:

[[email protected] sbin]# salt '*' cmd.run "hostname"
zhdy01:
    zhdy01
zhdy02:
    zhdy02

// cmd.run代表着运行系统命令。

针对某台client 进行远程操作:

[root@zhdy01 sbin]# salt 'zhdy02' cmd.run "whoami"
zhdy02:
    root

针对某些机器的hostname模糊查询:

[root@zhdy01 sbin]# salt 'zhdy*' cmd.run "whoami"
zhdy02:
    root
zhdy01:
    root

当然也支持正则去匹配:

[root@zhdy01 sbin]# salt -E 'zhdy0[12]+' cmd.run "pwd"
zhdy01:
    /root
zhdy02:
    /root

或者:
[root@zhdy01 sbin]# salt -E 'zhdy(01|02)' cmd.run "pwd"
zhdy02:
    /root
zhdy01:
    /root

二、grains

grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。

列出所有的grains项目名字

salt 'zhdy02' grains.ls

列出所有grains项目以及值

salt 'zhdy02' grains.items

//利用如上的显示值我们可以统计资产管理信息。
  • grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
  • 我们可以根据grains收集到的一些信息,做配置管理工作。
grains支持自定义信息
minion上:

 vim /etc/salt/grains  //添加:
 role: nginx 
 env: test
//一个key和一个vlue
 
 重启minion服务
 systemctl restart salt-minion
master上:

 获取grains:
 
 [[email protected] sbin]# salt '*' grains.item role env
 zhdy02:
     ----------
     env:
         test
     role:
         nginx
 zhdy01:
     ----------
     env:
     role:

可以借助grains的一些属性信息来针对相关机器去操作。

salt -G role:nginx cmd.run 'hostname'

上面的作用在集群中,还是蛮强大的,例如:我们有数百台web机器。我们可以给这些机器设定role:为web,然后针对这些role去操作。

三、pillar

pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

配置自定义pillar

vim  /etc/salt/master
找到如下配置://去掉前面的警号

pillar_roots:
  base: #此行前面有两个空格
    - /srv/pillar #此行前面有4个空格

systemctl restart salt-master

mkdir /srv/pillar

vim /srv/pillar/test.sls  
//内容如下
conf: /etc/123.conf

如上配置完成后,我们还不好去运行,因为这个配置文件没有入口,我们需要定义个:

vim top.sls
写入如下:

base:
  'zhdy02':
    - test

//zhdy02 机器号, test:就是我们刚刚创的test.sls
(当然我们也可以在test下面创建多个,例如test1,test2,然后,再目录下/srv/pillar去一一创建对应的即可)
vim top.sls
base:
  'zhdy02':
    - test
    - test2
    - asd

重启master

systemctl  restart salt-master

当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:

[[email protected] pillar]# salt '*' saltutil.refresh_pillar
zhdy02:
    True
zhdy01:
    True

验证:

[[email protected] pillar]# salt  '*' pillar.item conf
zhdy01:
    ----------
    conf:
zhdy02:
    ----------
    conf:
        /etc/123.conf

这样就获得了咱们刚刚所设置的,例如我们再次增加一个:

vim top.sls

base:
  'zhdy02':
    - test
    - asd
    
vim asd.sls

dir: /usr/local/asd

再次刷新下:
salt '*' saltutil.refresh_pillar

[[email protected] pillar]# salt '*' pillar.item conf dir
zhdy02:
    ----------
    conf:
        /etc/123.conf
    dir:
        /usr/local/asd
zhdy01:
    ----------
    conf:
    dir:

如上配置一定要注意格式!

pillar同样可以用来作为salt的匹配对象。比如

[root@zhdy01 pillar]# salt -I 'conf:/etc/123.conf' cmd.run "w"
zhdy02:
     16:40:25 up  1:52,  1 user,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.59.1     14:49    1:02m  0.03s  0.03s -bash

四、远程安装服务

master上

vi /etc/salt/master
//搜索找到file_roots
打开如下内容的注释:
file_roots:
  base: #前面有两个空格
    - /srv/salt #前面有4个空格
mkdir  /srv/salt ; cd /srv/salt

编辑入口配置文件:

vi /srv/salt/top.sls  
//加入如下内容
base:
  '*':  #前面有两个空格
    - httpd #前面有4个空格

*:代表着所有的机器(当然也可以指定机器), httpd是需要安装的服务。

//在所有的客户端上执行httpd模块

重启

systemctl restart salt-master

master上:编辑配置文件

vi /srv/salt/httpd.sls

//加入如下内容,这个就是httpd模块的内容
httpd-service:
  pkg.installed:
    - names:    //这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

 说明: 
 httpd-service是id的名字,自定义的。
 pkg.installed 为包安装函数。
 下面是要安装的包的名字。
 service.running也是一个函数,来保证指定的服务启动(其主目录在ls /lib/systemd/system/)
 enable表示开机启动。

执行:

先来检测下httpd服务有没有安装:

[[email protected] ~]# ps aux | grep httpd
root       3939  0.0  0.0 112668   972 pts/0    R+   17:01   0:00 grep --color=auto httpd

执行httpd服务安装:

salt 'zhdy02' state.highstate     

//执行过程会比较慢,因为客户端上在 yum install httpd httpd-devel

当然,如果不使用这种模式,使用之前所学的:(server端:)

salt 'zhdy02' cmd.run "yum install -y httpd*"
错误解析:

自己的粗心大意导致了如下错误:

大家仔细看:我的配置(错误前):

错误在 top.sls 缺少了两个 :

正确的配置:

[[email protected] salt]# cat top.sls 
base:
  '*':
    - httpd

五、配置管理文件

日常运维中,少不了对集群内的一组机器进行修改配置文件,首先我们先把模板搞好(详细到具体配置)然后告诉minion把配置文件分发到哪个具体位置:

master上
vi /srv/salt/test.sls  //加入如下内容

file_test:
  file.managed:
    - name: /tmp/zhdy.com
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 600
    
说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它。
source指定文件从哪里拷贝,这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
user,group,mode  分别定义如上文件的所属主所属组以及文件权限是什么。

根据如上配置文件操作:

[[email protected] salt]# vim test.sls
[[email protected] salt]# mkdir -p /test/123/
[[email protected] salt]# cd !$
cd /test/123/
[[email protected] 123]# cp /etc/inittab 1.txt
vi /srv/salt/top.sls //改为如下内容
base:
  '*':
    - test

执行:

[[email protected] salt]# salt 'zhdy02' state.highstate
zhdy02:
----------
          ID: file_test
    Function: file.managed
        Name: /tmp/zhdy.com
      Result: True
     Comment: File /tmp/zhdy.com updated
     Started: 00:00:43.073267
    Duration: 88.68 ms
     Changes:   
              ----------
              diff:
                  New file

Summary for zhdy02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  88.680 ms

检查zhdy02上是否有/tmp/aminglinux.com,检查内容以及权限

[[email protected] ~]# ll /tmp/zhdy.com 
-rw------- 1 root root 511 11月  4 00:00 /tmp/zhdy.com

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

Windows下RabbitMQ安装及入门

1.Windows下安装RabbitMQ需要以下几个步骤    (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,...

3597
来自专栏LhWorld哥陪你聊算法

【Dubbo篇】--Dubbo框架的使用

Provider: 提供者.发布服务的项目. Registry: 注册中心.所有提供者必须去注册中心注册自己所有能发布的服务. Consumer: 消费者.调用...

7831
来自专栏前端小叙

vue报错集锦

1、vue报错: 没安装 less-loader css-loader style-loader        可能的很大原因:没安装less 2、vuex报错...

4536
来自专栏散尽浮华

nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理

Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案。nginx可以用轮询、IP哈希、URL哈希等方式...

7886
来自专栏我是攻城师

使用shell分页读取600万+的MySQL数据脚本

4215
来自专栏用户2442861的专栏

HTTP POST GET 本质区别详解

    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交

3062
来自专栏Laoqi's Linux运维专列

Linux入门到精pao通lu

3654
来自专栏北京马哥教育

Python爬虫基础知识:urllib2的使用技巧

糖豆贴心提醒,本文阅读时间6分钟 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。 1.Proxy 的设置 urllib2 默认...

3095
来自专栏iKcamp

系列3|走进Node.js之多进程模型

文:正龙(沪江网校Web前端工程师) 本文原创,转载请注明作者及出处 之前的文章“走进Node.js之HTTP实现分析”中,大家已经了解 Node.js 是...

4347
来自专栏企鹅号快讯

Java Web 模板代码生成器的设计与实现

起因 项目中需要根据数据库表写很多Meta、Dao、Service代码,其中很多代码都是重复而繁琐的。因此如果有一个模板代码的生成器,就可以一定程度提高开发效率...

28410

扫码关注云+社区

领取腾讯云代金券