zoukankan      html  css  js  c++  java
  • saltstack

    saltstack 实现一个快速的远程执行系统

    saltstack的运行方式:
      Local 本地运行,交付管理
      Master/Minion <<< 常用方式
      Salt SSH 不需要客户端

    salt部署基本架构:
      主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
      salt架构中的一种就是master > minion。

    salt的安装

    0.准备两台主机,一台master,一台minion

    master:192.168.11.59

    minion:192.168.11.169

    master的安装和配置

    # 安装
    yum -y install salt-master
    
    # 修改配置文件
    interface: 0.0.0.0          # 绑定本地的地址
    publish_port: 4505        # master的管理端口
    user: root                     # salt运行的用户
    worker_threads: 1         # salt的运行线程,一般不要超过CPU的个数
    ret_port: 4506               # 跟minion的通讯端口,用于文件服务,认证,接受返回结果等
    pidfile: /var/run/salt-master.pid       # 指定pid文件位置
    log_file: /var/log/salt/master           # 指定log文件位置
    
    #auto_accept: False                       # 自动接收minion的key
    
    # 修改hosts文件
    vim /etc/hosts
    
    192.168.11.169 minion
    
    # 启动master
    systemctl start salt-master

    minion的安装和配置

    # 安装
    yum -y install salt-minion
    
    # 修改配置文件
    vim /etc/salt/minion
    
    master: master
    master_port: 4506
    user: root
    id: 192.168.11.169-slave
    acceptance_wait_time: 10
    log_file: /var/log/salt/minion
    
    # 修改hosts文件
    vim /etc/hosts
    
    192.168.11.59 master
    
    # 启动
    systemctl start salt-minion

    检测master和minion的密钥

    # master
    [root@master ~]# salt-key -f slave1
    Unaccepted Keys:
    slave1:  5a:47:81:44:36:0d:03:0b:55:2a:2e:de:f5:c3:37:19
    
    
    # minion
    [root@minion ~]# salt-call --local key.finger
    local:
        5a:47:81:44:36:0d:03:0b:55:2a:2e:de:f5:c3:37:19

     

    master管理minion的密钥

    在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

    [root@master ~]# salt-key -L
    Accepted Keys:              # 已经接收的minion
    Denied Keys:                 # 拒绝的minion
    Unaccepted Keys:          # 未加入的minion
    slave1                          
    Rejected Keys:               # 吊销的minion
    
    
    #常用参数
    -L  #查看KEY状态
    -A  #允许所有
    -D  #删除所有
    -a  #认证指定的key
    -d  #删除指定的key
    -r  #注销掉指定key(该状态为未被认证)
    
    #在master端/etc/salt/master配置
    auto_accept: True   #如果对Minion信任,可以配置master自动接受请求

     

     日常命令参数

    master端

    [root@master ~]# rpm -ql salt-master
    /etc/salt/master              #  master主配置文件
    /usr/bin/salt                    # master 核心操作命令
    /usr/bin/salt-cp               # master 文件传输命令
    /usr/bin/salt-key             # master 证书管理命令
    /usr/bin/salt-master         # master 服务命令
    /usr/bin/salt-run              # master runner命令

     

    minion端

    [root@minion ~]# rpm -ql salt-minion
    /etc/salt/minion                  # minion配置文件
    /usr/bin/salt-call                  # minion 拉取命令
    /usr/bin/salt-minion            # minion 服务命令
    /usr/lib/systemd/system/salt-minion.service      # minion启动脚本

     

    salt命令,基本都在master上操作

    salt '*' test.ping       # 探测minion主机存活命令
    
    salt '*' sys.list_functions test  # 查看test模块的命令
    
    salt '*' sys.list_functions cmd   # 查看cmd模块的命令
    
    salt 'slave1' sys.list_functions   # 查看所有的模块
    
    
    参数:
    --summary         # 显示salt命令的概要
    --out=json         # 结果以json格式显示
    --out=yaml         # 结果以yaml格式显示

     

    JSON格式和YAML格式

    [root@master ~]# salt --out=json '*' cmd.run_all 'hostname -I'
    {
        "slave1": {
            "pid": 1794, 
            "retcode": 0, 
            "stderr": "", 
            "stdout": "192.168.11.169"
        }
    }
    
    [root@master ~]# salt --out=yaml '*' cmd.run_all 'hostname -I'
    slave1:
      pid: 1800
      retcode: 0
      stderr: ''
      stdout: 192.168.11.169

    YAML语法

    语法规则
        大小写敏感
        使用缩进表示层级关系   
        缩进时禁止tab键,只能空格
        缩进的空格数不重要,相同层级的元素左侧对其即可
        # 表示注释行
    
    yaml支持的数据结构
        对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict    冒号表示 key: value   key冒号后必须有
        数组: 一组按次序排列的值,又称为序列sequence 列表list     短横线  - list1
        纯量: 单个不可再分的值
    # YAML的编写
    slave: 
     pid: 1794
     port:
      - 3306
      - 80
      - 22
     ip: 192.168.11.169
    
    
    # 对应的json格式
    { slave: { 
        pid: 1794, 
        port: [ 3306, 80, 22 ], 
        ip: '192.168.11.169' } 
    }

    cmd是超级模块,是远程执行命令的模块,用于指定minion执行命令

    salt 'minion名字' cmd.run '命令'
    
    '*'   -- 代表所有minion

     

    service模块,是远程管理服务的模块,即systemctl

    salt 'minion名字' service.start/status/stop/restart '服务'     # 相当于在minion执行systemctl start/status/stop restart 服务
    
    '*'   -- 代表所有minion

     

    pkg模块,是远程安装软件的模块,即yum

    # salt 'minion节点' pkg.install/remove '软件'
    
    salt 'slave1' pkg.install 'httpd'        # 相当于在minion执行 yum install httpd
    salt 'slave1' pkg.version 'httpd'       #  查看安装软件的版本
    salt 'slave1' pkg.remove 'httpd'      # 相当于在minion执行 yum remove httpd

     slat采集静态信息

    Grains 是saltstack组件中非常重要之一,在配置部署时候回经常使用,Grains记录minion的静态信息,比如常用属性,CPU、内存、磁盘、网络信息等。

    Minions的Grains信息是Minion启动时采集汇报给Master的
    Grains是以 key value形式存储的数据库,可以看做Host的元数据(metadata)
    Grains保存着收集到的客户端的详细信息
    如果slave机器数据变化,grains就过期了
    在生产环境中需要自定义Grains,可以通过
    Minion配置文件
    Grains相关模块定义
    Python脚本定义

    salt 'slave' sys.doc grains#查看grains的命令用法

    salt 'slave1' grains.items     # 查看minion主机的所有Grains数据
    
    salt 'slave1' grains.item ipv4 host # 查看minion主机的ipv4和主机名

    自定义Grains静态数据

    # 给minion主机设置grains的自定义数据
    salt 'slave1' grains.setval  serial_number ab-cd-ef-01-02
    
    # 清空Grains自定义数据的值,默认变为None
    salt 'slave1' grains.delval  serial_number
    
    # 删除Grains自定义数据,需要修改minion的grains配置文件,重启服务
     # 在minion上
    [root@minion ~]# vim /etc/salt/grains 
    [root@minion ~]# systemctl restart salt-minion
    # 给slave1设置静态数据
    [root@master ~]# salt 'slave1' grains.setval   serial_number ab-cd-ef-01-02
    slave1:
        ----------
        serial_number:
            ab-cd-ef-01-02
    
    # 查询slave1的静态数据
    [root@master ~]# salt 'slave1' grains.item serial_number
    slave1:
        ----------
        serial_number:
            ab-cd-ef-01-02
    
    # 清空slave1的静态数据
    [root@master ~]# salt 'slave1' grains.delval serial_number
    slave1:
        None
    
    # 查询slave1的静态数据
    [root@master ~]# salt 'slave1' grains.item serial_number
    slave1:
        ----------
        serial_number:
            None
    
    # minion上修改grains的配置文件删除了静态数据,所以无法查询
    [root@master ~]# salt 'slave1' grains.item serial_number
    slave1:
        Minion did not return. [No response]
  • 相关阅读:
    Redis集群到集群迁移
    lvm磁盘创建
    前端开发环境
    golang Gorm 运用及执行原生SQL
    redis迁移两款工具
    C#知识点总结系列:3、C#中Delegate和Event以及它们的区别
    由浅入深CIL系列【目录索引】+ PostSharp AOP编程【目录索引】
    Windows 8实用窍门系列:22.Windows 8 的SemanticZoom缩放视图
    C#知识点总结系列:2、C#中IDisposable和IEnumerable、IEnumerator
    Windows 8实用窍门系列【目录索引】
  • 原文地址:https://www.cnblogs.com/st-st/p/10291230.html
Copyright © 2011-2022 走看看