zoukankan      html  css  js  c++  java
  • SaltStack 07-SaltStack远程执行

    salt '*' cmd.run 'w'
    
    • 命令:salt
    • 目标:'*'
    • 模块:cmd.run,自带模块,也可以自己写模块
    • 返回:执行后结果返回,Returnners组件
    salt '*' test.ping
    
    • 此处的ping并非ICMP的ping命令,
    • 而是master向minion发送了一个包,minion收到了,返回一个True

    指定目标(targeting)

    • 在Master上,我们可以采用不同Target去管理不同的Minion
    • 这些Target都是通过去管理和匹配Minion的ID来做一些集合

    1、正则匹配

    salt -E '10.123*' test.ping
    salt '*nginx*' test.ping
    

    2、列表匹配

    salt -L zabbix,nginx01 test.ping
    

    3、Grians匹配

    salt -G 'os:CentOS' test.ping
    
    • os:CentOS是一组键值对

    4、组匹配

    salt -N groups1 test.ping
    
    • groups是我们在master配置文件中定义的组名称
    [root@saltStack01 ~]# cat /etc/salt/master |grep -A 2 nodegroups
    nodegroups:
      group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
      group2: 'G@os:Debian and foo.domain.com'
    [root@saltStack01 ~]# systemctl restart salt-master
    

    5、复合匹配

    salt -C 'G@os:CentOS or L@nginx01' test.ping
    

    6、Pillar值匹配

    salt -I 'key:value' test.ping
    

    7、CIDR匹配

    salt -S '10.123.209.0/24' test.ping
    

    Target 参数

    参数 匹配模式 例子
    L List of minions L@Minion,Minion1,Minion2
    G Grains glob G@os:CentOS
    E PCRE minion ID E@Minion[1-3]
    P Grains PCRE P@os:(CentOSFedora)
    I Pillar glob I@key:value
    S Subnet/IP address S@10.123.209.0/24 or S@10.123.208.0/24
    R Range cluster R@%foo.bar
    C compound G@os:CentOS or L@Minion1

    执行模块

    • 如果通过yum默认安装,salt所有模块存放路径 /usr/lib/python2.7/site-packages/salt/

    查看所有module列表

    salt '*salt*' sys.list_modules
    

    查看指定module的所有function

    salt '*salt*' sys.list_functions cmd
    

    查看指定module用法

    salt '*salt*' sys.doc cmd
    

    例子:

    salt '*' network.active_tcp  					# 列出所有主机运行的tcp连接
    salt '*' network.arp  						# 列出所有主机arp
     
    salt '*' service.available sshd  				# 列出所有主机sshd
    salt '*' service.get_all  					# 列出所有主机的所有运行服务
    salt '*' service.status sshd  				# 列出所有主机sshd运行状态
     
    salt-cp '*' /etc/hosts /tmp/test  			# 将master上/etc/hosts文件拷贝到所有主机的/tmp/test
     
    salt '*' state.show_top  						# 查看top
    salt '*' state.single pkg.installed name=lsof # 所有主机安装lsof
    

    返回程序

    • SaltStack系统对执行Minion返回后的数据进行存储或者返回给其他程序
    • 支持多种存储方式,如MySQL、MongoDB、Redis、Memcache等
    • 通过Return可以对SaltStack的每次操作进行记录,对以后日志审计提供了数据来源
    • 支持自定义的Return

    查看所有return列表

    salt '*salt*' sys.list_returners
    

    1、将返回写入mysql库,是由minion直接写入mysql库

    • 所有minion安装python mysql模块(两种方法)
    salt '*' state.single pkg.installed name=MySQL-python
    salt '*' cmd.run 'yum install MySQL-python -y'
    
    • 创建salt库
    CREATE DATABASE  `salt`
      DEFAULT CHARACTER SET utf8
      DEFAULT COLLATE utf8_general_ci;
    USE `salt`;
    
    • 创建表
    --
    -- Table structure for table `jids`
    DROP TABLE IF EXISTS `jids`;
    CREATE TABLE `jids` (
      `jid` varchar(255) NOT NULL,
      `load` mediumtext NOT NULL,
      UNIQUE KEY `jid` (`jid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    CREATE INDEX jid ON jids(jid) USING BTREE;
    
    --
    -- Table structure for table `salt_returns`
    DROP TABLE IF EXISTS `salt_returns`;
    CREATE TABLE `salt_returns` (
      `fun` varchar(50) NOT NULL,
      `jid` varchar(255) NOT NULL,
      `return` mediumtext NOT NULL,
      `id` varchar(255) NOT NULL,
      `success` varchar(10) NOT NULL,
      `full_ret` mediumtext NOT NULL,
      `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      KEY `id` (`id`),
      KEY `jid` (`jid`),
      KEY `fun` (`fun`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Table structure for table `salt_events`
    DROP TABLE IF EXISTS `salt_events`;
    CREATE TABLE `salt_events` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `tag` varchar(255) NOT NULL,
    `data` mediumtext NOT NULL,
    `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `master_id` varchar(255) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `tag` (`tag`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    • 授权
    grant all on salt.* to salt@'%' identified by 'salt@pw';
    FLUSH PRIVILEGES;
    exit
    mysql -h192.168.137.11 -usalt -psalt@pw salt
    show tables;
    
    • 配置minion文件
    vim /etc/salt/minion
    mysql.host: '192.168.137.11'
    mysql.user: 'salt'
    mysql.pass: 'salt@pw'
    mysql.db: 'salt'
    mysql.port: 3306
    
    • 重启 salt-minion
    systemctl restart salt-minion
    
    • 测试
    salt '*' test.ping --return mysql
    salt '*' cmd.run 'df -h' --return mysql
    
    • 查看数据库
    select * from salt_returns;
    

    2、使用Redis作为Return存储方式

    • minion安装redis python client模块
    yum install -y python-redis
    
    • 验证
    [root@Log-redis-nginx ~]# python -c 'import redis;print redis.VERSION'
    (2, 10, 3)
    
    • 配置minion文件
    vim /etc/salt/minion
    redis.db: '0'
    redis.host: '10.123.209.71'
    redis.port: 6379
    
    • 重启 salt-minion
    systemctl restart salt-minion
    
    • 测试
    salt '*salt*' cmd.run 'hostname' --return redis
    
    • 查看redis数据
    redis-cli monitor
    

    编写执行模块

    1、放置路径

    mkdir -p /srv/salt/_modules
    

    2、命名,文件名就是模块名

    cat /srv/salt/_modules/my_disk.py
    def list():
        cmd = 'df -h'
        ret = __salt__['cmd.run'](cmd)
        return ret
    

    3、刷新

    salt '*salt*' saltutil.sync_modules
    

    4、查看指定路径的/var/cache/salt/minion下

    [root@saltStack01 ~]# tree /var/cache/salt/minion/extmods/modules
    /var/cache/salt/minion/extmods/modules
    └── my_disk.py
    
    0 directories, 1 file
    [root@saltStack01 ~]#
    

    5、执行

    [root@saltStack01 ~]# salt '*salt*' my_disk.list
    saltStack01:
        Filesystem      Size  Used Avail Use% Mounted on
        /dev/xvda3       56G  1.3G   55G   3% /
        devtmpfs        3.9G     0  3.9G   0% /dev
        tmpfs           3.7G   16K  3.7G   1% /dev/shm
        tmpfs           3.7G  8.4M  3.7G   1% /run
        tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup
        /dev/xvda1      197M  114M   83M  58% /boot
        tmpfs           757M     0  757M   0% /run/user/0
    [root@saltStack01 ~]#
    
  • 相关阅读:
    java语言基础001
    Linux 使用硬盘
    Linux 系统运行命令 > 查看系统信息
    Linux rm 命令
    Linux 操作系统目录结构
    JavaScript || 事件基础
    My SQL随记 003 数据表基础操作语法
    My SQL随记 002 登陆
    My SQL随记 001 常用名词/结构化语言
    linux命令学习
  • 原文地址:https://www.cnblogs.com/liangjingfu/p/9504650.html
Copyright © 2011-2022 走看看