目录:zabbix其他篇

01:saltstack 基本使用

02:saltstack-api使用详解

目录:

1.1 准备实验环境: 安装系统返回顶部

  1)硬件配置如下

      

  2) 先把光标放到”install CentOS 7”,按 Tab键编辑内核参数,添加 (net.ifnames=0 biosdevname=0)

    作用:使网卡名称为 eth0 这样的格式

    

  3) 建议安装语言改成 简体中文,其他保持默认即可

      

  4)设置完root密码等待安装完成重启即可完成系统安装

  5)配置 VMware NAT 模式默认地址池

      编辑----》虚拟网络编辑器

      

1.2 克隆一台虚拟机完成使用环境返回顶部

  1)配置网卡

      vi /etc/sysconfig/network-scripts/ifcfg-eth0

        

      systemctl restart network

      systemctl disable firewalld

      systemctl disable NetworkManager

  2)设置主机名

      vi /etc/hostname

        linux-node1.example.com

  3)设置主机名解析

      vi /etc/hosts

        192.168.56.11 linux-node1 linux-node1.example.com

        192.168.56.12 linux-node2 linux-node2.example.com

  4)设置DNS

      vi /etc/resolv.conf

        nameserver 192.168.56.2

  5)安装最新epel yum源

    注:此地址中有各种源(https://opsx.alibaba.com/mirror)

      rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

  6)yum安装 一些基础包

      yum -y install net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap

   7)关闭selinux

      vim /etc/selinux/config

        SELINUX=disabled

   8)重启系统

      yum update -y && reboot          # 升级所有包同时也升级软件和系统内核, 并重启

   9)确认是否一些服务是否已按计划关闭

      getenforce          # selinux是否关闭

      firewall-cmd --state         # 防火墙是否关闭

1.2 克隆一台虚拟机完成使用环境   

   注:克隆虚拟机必须要先关闭(shutdown)

   1)右键 “管理” ----》“克隆” ----》

   2)选择 从哪个状态创建克隆

      

  3)克隆类型(创建完整克隆)

      

  4)新建虚拟机名称

      

  5)点击 “完成” 即可完成虚拟机克隆

  6)对克隆的虚拟机 node2 进行一些简单修改

      vim /etc/hostname       # 1、修改主机名

          linux-node2.example.com

      vi /etc/sysconfig/network-scripts/ifcfg-eth0 

          IPADDR=192.168.56.12

      reboot

1.3 saltstack介绍返回顶部

  1、saltstack说明

      1)salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ
      2)用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎
      3)也有一个强大的配置管理系统,通常叫做Salt State System。

      4)主要作用: 远程执行、配置管理、事件驱动

          a.  远程执行: 及支持 使用agent 支持 使用ssh远程执行

          b. 配置管理: 如果用salt描述nginx,没有就会帮你安装,如果nginx配置不对就会帮你改对(保证机器状态和你描述一致)

      5)特点:即可支持 agent 方式,也支持 ssh方式

  2、基本原理

      1)SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信

      2)minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信

      3)master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中

  3、saltstack具体步骤如下

      1)Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc

      2)salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。

      3)master接收到命令后,将要执行的命令发送给客户端minion。

      4)minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理

      5)minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master

      6)master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中

      7)salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。

  4、saltstack认证原理

      1)salt-master和salt-minion第一次启动时会在 /etc/salt/pki/master目录下生成公钥和私钥用于身份验证

          [root@linux-node1 master]# cd /etc/salt/pki/master

          [root@linux-node1 master]# ll -lh
          -r-------- 1 root root 1.7K Jan 7 05:36 master.pem
          -rw-r--r-- 1 root root 450 Jan 7 05:36 master.pub

      2)所有未认证minion的私钥都会放到master的  /etc/salt/pki/master/minions_pre/ 文件夹下

      3)当minion通过认证后就会放到 /etc/salt/pki/master/minions 文件夹下

      4)master通过在认证的同时会把自己的公钥发送给minion, minion会放到 /etc/salt/pki/minion/minion_master.pub

      5)这样就实现了双向密钥交换

1.4 saltstack安装返回顶部

  注:saltstack官方提供了各种版本系统安装方法(地址:http://repo.saltstack.com/#rhel)

    1、在linux-node1 中安装saltstack master 和 minion

        yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

        yum -y install salt-master salt-minion

          /etc/salt/master(master配置文件)

          /etc/salt/minion(minion配置文件)

    2、在linux-node2 中安装saltstack minion

        yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

        yum -y install salt-minion

          /etc/salt/minion(minion配置文件)

    3、在linux-node1中配置 salt-minion

        vim /etc/salt/minion

          #master: salt   修改为(master: 192.168.56.11) ----》配置master IP

          #id:           修改为(id: linux-node1.example.com)   ---》告诉master自己是谁,默认会读取当前主机名

        注:saltstack是以主机名区分不同 agent 需保证主机名唯一

    4、在linux-node2中配置 salt-minion     

        vim /etc/salt/minion

          #master: salt   修改为(master: 192.168.56.11) ----》配置master IP

          #id:           修改为(id: linux-node2.example.com)   ---》告诉master自己是谁,默认会读取当前主机名

    5、启动linux-node1中salt-maser 和 salt-minion

        systemctl start salt-master       # 启动salt-master

        systemctl enable salt-master       # 设置salt-master开机自启动

        systemctl start salt-minion        # 启动

        systemctl enable salt-minion     # 开机自启动

    6、启动linux-node2中salt-minion

        systemctl start salt-minion        # 启动

        systemctl enable salt-minion      # 开机自启动

    7、认证

        salt-key             # 在master中查看所有key的状态

        salt-key -a linux-node1.example.com      # 认证 linux-node1.example.com的key

        salt-key -A          # 一次性认证所有key

    8、远程执行测试

        salt  \*  test.ping         # 测试saltstack minion与master的连通性

        salt \* cmd.run 'df -h'     # 在所有minion中批量执行 df -h 命令

1.5 saltstack常用模块返回顶部

  1、cmd.run (远程执行)

      功能:  实现远程命令执行

      salt '*'   cmd.run 'free -m'  

  2、cp模块

      功能: 实现远程文件、目录复制,下载Url文件等操作

# 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
vim /etc/salt/master file_roots:
base:
- /srv/salt
dev:
- /srv/salt/dev systemctl restart salt-master # 需要重启master # 2、创建同步目录文件夹,和测试文件 /srv/salt/test.sh
mkdir -p /srv/salt/dev
vim /srv/salt/test.sh #创建测试文件 # 3、将 /srv/salt/ 下的test.sh文件同步到所有minion
salt '*' cp.get_file salt://test.sh /tmp/test.sh # 4、创建目录 makedirs(当分发的位置在目标主机上不存在时,自动创建该目录)
salt '*' cp.get_file salt://test.sh /aaa/test.sh makedirs=True # 5、将 /srv/salt 中的testdir 目录复制到所有minion
mkdir /srv/salt/testdir/
salt '*' cp.get_dir salt://testdir /aaa/ # 6、下载百度首页内容保存到所有minion中
salt '*' cp.get_url http://www.baidu.com /tmp/index.html

  3、状态管理(神笔马良)

    1)修改 /etc/salt/master 文件

# 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
vim /etc/salt/master file_roots:
base:
- /srv/salt
dev:
- /srv/salt/dev systemctl restart salt-master # 需要重启master

    2)在 /srv/salt/ 下配置状态管理

        [root@linux-node1 /]#  vim /srv/salt/web/apache.sls

# 1.描述了要装一个httpd服务
apache-install: # 这个是一个名称,可以随便写
pkg.installed: # pkg是状态模块,installed是状态模块中的方法
- name: httpd # 描述了我在里要装一个httpd包 # 2.描述了httpd服务是启动状态,并且是开机自启动状态
apache-service: # 这个是一个名称,可以随便写
service.running: # 描述了httpd服务是运行的状态
- name: httpd
- enable: True # 描述httpd服务开机自动启动

    3)在 salt-master中执行命令让 linux-node2按照描述完成按照

        [root@linux-node1 web]# salt   linux-node2.example.com  state.sls  web.apache

        1)通过远程执行,通知node2进行配置管理
        2)state.sls        # 远程执行的一个方法
        3)web.apache      # 执行web目录下的apache文件

  4、grains.item模块

      功能:获取机器基本信息(cpu、内存)

# 1、查看系统版本
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item os
linux-node1.example.com:
----------
os:
CentOS # 2、查看cpu型号
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item cpu_model
linux-node1.example.com:
----------
cpu_model:
Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz # 3、获取ipv4地址
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item fqdn_ip4
linux-node1.example.com:
----------
fqdn_ip4:
- 192.168.56.11 # 4、查询内核版本
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item kernelrelease
linux-node1.example.com:
----------
kernelrelease:
3.10.0-957.1.3.el7.x86_64 # 5、查看主机名
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item nodename
linux-node1.example.com:
----------
nodename:
linux-node1.example.com # 6、查看系统版本号 centos6、centos7等
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item osmajorrelease
linux-node1.example.com:
----------
osmajorrelease:
7
# 7、查看salt版本
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item saltversion
linux-node1.example.com:
----------
saltversion:
2018.3.3 # 8、查看cpu数据量
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item num_cpus
linux-node1.example.com:
----------
num_cpus:
1 # 9、查看内存大小
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item mem_total
linux-node1.example.com:
----------
mem_total:
1819 # 10、查看ipv4地址
[root@linux-node1 salt]# salt 'linux-node1.example.com' grains.item ipv4
linux-node1.example.com:
----------
ipv4:
- 127.0.0.1
- 192.168.56.11

grains.item获取主机基本信息

  5、Service模块

      salt '*' service.reload nginx

1.6 salt ssh详解返回顶部

  1、安装(master和minion中都需要安装)

      yum -y install salt-ssh

  2、配置花名册,配置要管理的机器

      vim /etc/salt/roster

# Sample salt-ssh config file
#web1:
# host: 192.168.42.1 # The IP addr or DNS hostname
# user: fred # Remote executions will be executed as user fred
# passwd: foobarbaz # The password to use for login, if omitted, keys are used
# sudo: True # Whether to sudo to root, not enabled by default
#web2:
# host: 192.168.42.2 linux-node1.example.com:
host: 192.168.56.11
user: root
passwd: chnsys@2016
port: 22 linux-node2.example.com:
host: 192.168.56.12
user: root
passwd: chnsys@2016
port: 22

/etc/salt/roster

  3、常用命令 

      salt-ssh '*' test.ping -i                    # 使用salt自身模块

      salt-ssh '*' cmd.run 'df -lh'

      salt-ssh '*' -r 'ifconfig'                    # 执行原生shell命令

-r, –raw, –raw-shell # 直接使用shell命令
–priv #指定SSH私有密钥文件
–roster #定义使用哪个roster系统,如果定义了一个后端数据库,扫描方式,或者用户自定义的的roster系统,默认的就是/etc/salt/roster文件
–roster-file #指定roster文件
–refresh, –refresh-cache #刷新cache,如果target的grains改变会自动刷新
–max-procs #指定进程数,默认为25
-i, –ignore-host-keys #当ssh连接时,忽略keys
–passwd #指定默认密码
–key-deploy #配置keys 设置这个参数对于所有minions用来部署ssh-key认证,
这个参和–passwd结合起来使用会使初始化部署很快很方便。当调用master模块时,并加上参数 –key-deploy 即可在minions生成keys,下次开始就不使用密码

salt-ssh命令用法

1.7 Salt Grains返回顶部

  1、grains作用

      grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。

      其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。

      grains 的作用是在每个minion中配置 key value进行标识,使批量执行时可以区分

      salt 'linux-node1*' grains.ls          # grains支持通配符

  2、salt grains原生命令

      1. salt '*' grains.items                                          # 查看minion的全部静态变量

      2. salt '*' grains.ls                                                # 显示grains的变量名称

      3. salt '*' grains.item os                                       # 显示某一个变量

      4. salt '*' grains.get  ip4_interfaces:eth0              # 直接获取内容

      5. salt -G 'os:CentOs' test.ping                             # 所有os的centos的 执行test.ping (-G就是grains)

  3、自定义grains:需要重启 minion

# 1、编辑 minion 文件,配置角色名
vim /etc/salt/minion
'''
grains:
roles: apache
''' # 2、重启minion
systemctl restart salt-minion # 3、查看所有机器都有哪些roles
[root@linux-node1 ~]# salt '*' grains.item roles
linux-node1.example.com:
----------
roles:
apache
linux-node2.example.com:
----------
roles: # 4、让所有角色为apache的机器执行命令'w',-G表示以grains进行目标选择
salt -G 'roles:apache' cmd.run 'w'

自定义grains:需要重启 minion

  4、自定义grains:无需重启minion

# 1、在minion中新建文件/etc/salt/grains,添加一个 key value
vim /etc/salt/grains
'''
test-grains: test-grains-value
''' # 2、让minion到所有grains中读取配置
salt '*' saltutil.sync_grains # 3、查看所有 key为test-grains的minion
[root@linux-node1 ~]# salt '*' grains.item test-grains
linux-node1.example.com:
----------
test-grains:
test-grains-value
linux-node2.example.com:
----------
test-grains: # 4、让所有key=test-grains value=test-grains-value 的机器执行命令'w',-G表示以grains进行目标选择
salt -G 'test-grains:test-grains-value' cmd.run 'w'

自定义grains:无需重启minion

1.8 Salt Pillar返回顶部

  1、Salt Pillar

      1. 存储位置:存储在master端,存放需要提供给minion的信息,minion每次需要动态从master获取

      2. 应用场景:敏感信息,每个minion只能访问master分配给自己的 pillar

  2、在master配置文件中指定pillar位置

vim /etc/salt/master
'''
pillar_roots:
base:
- /srv/pillar
'''

systemctl restart salt-master
mkdir /srv/pillar
cd /srv/pillar

 

  3、编辑一个pillar文件

      需求:在centos(httpd)和Ubuntu(apache2)都需要apache服务,但是两种操作系统安装的包名不同

vim /srv/pillar/apache.sls   # 编辑一个pillar文件

{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

  4、指定这个pillar文件给那个minion使用

vim top.sls  # 指定这个pillar文件给那个minion使用

base:
'linux-node2.example.com':
- apache

  5、确认 pillar中配置的items是否生效

[root@linux-node1 pillar]# salt '*' pillar.items
linux-node1.example.com:
----------
linux-node2.example.com:
----------
apache:
httpd

  6、 Salt Grains 与  Salt Pillar 比较

      

01:saltstack 基本使用的更多相关文章

  1. 01 . SaltStack部署配置及简单应用

    SaltStack简介 SaltStack saltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递. saltstack是使 ...

  2. SaltStack 安装介绍 01

    一.入门指南 1.1 SALTSTACK是什么? The backbone of Salt is the remote execution engine, which creates a high-s ...

  3. 【01】Saltstack:从零开始 Saltstack

    写在前面的话 最近一直都在整理以前的乱七八糟的笔记,所以会有很多老旧的东西都会被拉出来重新遛遛.算是再度系统的进行学习. 关于 Saltstack 的一些概念 Saltstack 是基于 Python ...

  4. SaltStack项目实战(六)

    SaltStack项目实战 系统架构图 一.初始化 1.salt环境配置,定义基础环境.生产环境(base.prod) vim /etc/salt/master 修改file_roots file_r ...

  5. 快速入门SaltStack

    导读 SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS EC2实例),它的底层使用ZeroMQ消息队列pub/sub方式 ...

  6. SaltStack实战

    SaltStack实战 #安装 安装注意几点 python-libs-2.6.6-64.el6.x86_64 conflicts with file from package python-2.6.6 ...

  7. 1.saltstack基础笔记

    环境: master: 节点node1:阿里云:121.42.195.15 centos6.6 minion: 节点node2:腾讯云:182.254.157.19 centos6.6 一.salts ...

  8. saltstack实战4--综合练习4

    Saltstack配置管理-给minion增加Zabbix-agent zabbix-agent的包 [root@A ~]# rpm -qa |grep zabbix zabbix-2.4.8-1.e ...

  9. saltstack实战4--综合练习2

    Saltstack配置管理-功能模块-安装haproxy 配置管理,我们分了3层 最底层是系统初始化部分 倒数二层是功能模块,就是具体的产品的安装了 假如你的环境需要nginx,php,memcach ...

随机推荐

  1. iOS 新浪微博-5.3 首页微博列表_集成图片浏览器

    实际上,我们可以使用李明杰在教程里集成的MJPhotoBrowser,地址: http://code4app.com/ios/快速集成图片浏览器/525e06116803fa7b0a000001 使用 ...

  2. iOS UI基础-10.0 QQ聊天布局之键盘及文本使用

    要实现的效果:   这里只说用到的几个知识点 1.图片包含文字 在设置文字的Frame的时候,使用背景(按钮)的尺寸,文字使用了内边距 背景图片,使用拉伸 /** * 返回一张可以随意拉伸不变形的图片 ...

  3. 一个vue的循环列表,里面的按钮的移入事件

    需求:移入的时候,互相关注变成取消关注 移入移出事件传参$event,把这个参数打印出来看就可以搞定,而不是移入的时候,文本都改变,只改变当前行 的文本 <p @mouseover=" ...

  4. javaIO流

    File类(File类的概述和构造方法) A:File类的概述 File更应该叫做一个路径 文件路径或者文件夹路径 路径分为绝对路径和相对路径 绝对路径是一个固定的路径,从盘符开始 相对路径相对于某个 ...

  5. 第四章 HTML5概述

    HTML5概述1.HTML5优势:解决跨浏览器问题:部分代替原来的js更明确地语义支持:不再单纯使用div增强WEB应用程序地功能:拖拽API等 2.HTML5语法改变标签不再区分大小写元素可以省略结 ...

  6. arcgis api for javascript 添加图层时设置标注,自定义符号

    <!DOCTYPE html> <html> <head> <meta charset="gb2312"> <meta nam ...

  7. Attention Is All You Need 一些好的资料

    The encoders are all identical in structure (yet they do not share weights). Each one is broken down ...

  8. 更换tomcat运行日志目录

    1.在tomcat安装文件夹的bin目录下,修改catalina.sh,改变catalina.out的输出目录 CATALINA_OUT="$CATALINA_BASE"/logs ...

  9. python 简单了解namedtuple

    namedtuple类位于collections模块,有了namedtuple后通过属性访问数据能够让我们的代码更加的直观更好维护 namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引 ...

  10. tiny4412 硬件解码

    今天发现了一个好的资源,上面有三星的一些实例代码.http://git.infradead.org/users/kmpark/public-apps