• salt stack 工具之一——远程命令


    salt stack 远程命令

     

     

    salt stack是一种自动化的运维工具,可以同时对N台服务器进行配置管理、远程命令执行等操作。

    salt stack分为两个部分:

    • salt-master,部署在控制服务器上,用于发出运维指令;
    • salt-minion,部署在所有需要批量运维的线上服务器上;

     


     

    salt安装

    服务端:yum install salt-master -y

    客户端:yum install salt-minion -y

    配置文件:

    服务端:/etc/salt/master

    服务端配置:

    interface: 192.168.1.229
    auto_accept: True

    其中,interface 用于设置master监听的IP地址;

    auto_accept设置是否自动接收minion的KEY。

    master启动后默认监听4505和4506两个端口:4505(publish_port)为salt的消息发布系统;4506(ret_port)为salt客户端与服务端通信的端口。

    客户端:/etc/salt/minion

    客户端配置:

    master: 192.168.1.229
    id :34

    其中,master设置服务端地址;

    id用于设置minion自身的ID,master根据这个ID识别minion;

    启动服务:

    服务端启动方式:service salt-master start
    客户端启动方式:service salt-minion start

    程序日志:(有问题可查日志获取出错信息)
    服务端:/var/log/salt/master
    客户端:/var/log/salt/minion

     

     

     


     

    key管理

    1、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和minion.pub(public key),然后将minion.pub发送给master;
    2、master 在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了。

    Salt在master和minion数据交换过程中使用AES加密, 为了保证发送给minion的指令不会被篡改,在发送命令到minion之前,minion的key需要先被master所接受(accepted),运行salt-key可以列出当前key的状态:

    [root@localhost src]# salt-key -L
    Accepted Keys:
    34
    35
    37
    39
    56
    57
    Unaccepted Keys:
    Rejected Keys:

    salt-key命令可以接受特定的单个key或批量接受key,使用-A选项接受当前所有的key,接受单个key可以使用-a keyname。
    认证命令为salt-key,常用的有如下命令:

    -a ACCEPT, --accept=ACCEPTAccept the following key
    -A, --accept-all Accept all pending keys
    -r REJECT, --reject=REJECTReject the specified public key
    -R, --reject-all Reject all pending keys
    -d DELETE, --delete=DELETEDelete the named key
    -D, --delete-all Delete all keys

    当然salt也是可以自动认证的,把下面的False改成True就OK了:

    grep  -n "auto_accept:" /etc/salt/master

     


     

    执行命令

     

    salt 命令的格式:

    salt <target> <function> <args>

    这里target是指minion的id,function是要执行的功能函数,args是函数参数。例如:

    salt '*' cmd.run 'ls /home/' 
    salt '*' cmd.exec_code bash 'for i in {1,2};do echo $i;done' 
    salt '*' service.restart salt-minion

    对所有的minion执行命令:

    salt '*' cmd.run 'uptime'

    输出结果:

    34:
         18:13:18 up 268 days,  6:04,  3 users,  load average: 0.73, 0.87, 0.88
    37:
         18:13:18 up 142 days, 16:51,  1 user,  load average: 0.47, 0.50, 0.46
    39:
         18:13:17 up 142 days, 16:49,  3 users,  load average: 0.60, 0.59, 0.51
    35:
         18:13:17 up 268 days,  6:03,  1 user,  load average: 1.11, 0.97, 0.87
    57:
         18:13:18 up 149 days,  2:30,  1 user,  load average: 1.54, 1.62, 1.55
    56:
         18:13:17 up 149 days,  2:31,  0 users,  load average: 1.50, 1.59, 1.51

    -L选项指定minion列表:

    salt -L '35,56' cmd.run 'uptime' 

    -E选项使用正则匹配指定minion列表:

    salt -E '^3' cmd.run 'uptime'

    -N选项指定一个分组:

    salt -N group2 test.ping

    这里的test.ping命令和ICMP的ping没有关系。

    注意:服务器分组需要事先在配置文件(/etc/salt/master)添加。

     

    这里可以查看到salt支持的所有模块提供的功能列表:

     

    salt '*' -d cmd

     

     

    比如:

    1、disk模块,查看磁盘使用率

    salt '*' disk.usage
    salt '*' disk.percent /var
    salt '*' disk.inodeusage

    2、dig模块

    salt ns1 dig.A www.google.com
    salt ns1 dig.AAAA www.google.com
    salt ns1 dig.MX google.com
    salt ns1 dig.NS google.com
    salt ns1 dig.SPF google.com
    salt ns1 dig.check_ip 127.0.0.1

    3、pkg模块,用于批量安装minion服务器

    salt '*' pkg.install <package name>
    salt '*' pkg.upgrade 

    注意:不同的linux发行版本,采用的包管理方式不一样,例如Ubuntu使用apt,CentOS使用yum等,因此该模块有不同的实现;

    4、cron模块,管理集群的crontab

    salt '*' cron.ls root
    salt '*' cron.raw_cron root
    salt '*' cron.rm_job root /usr/local/weekly
    salt '*' cron.rm_env root MAILTO
    salt '*' cron.set_job root '*' '*' '*' '*' 1 /usr/local/weekly
    salt '*' cron.write_cron_file root /tmp/new_cron

    5、at模块,一次性任务

    salt '*' at.at 12:05am '/sbin/reboot' tag=reboot
    salt '*' at.at '3:05am +3 days' 'bin/myscript' tag=nightly runas=jim
    salt '*' at.atq
    salt '*' at.atrm all

    6、service模块

    salt '*' service.available sshd
    salt '*' service.get_all
    salt '*' service.reload <service name>
    salt '*' service.restart <service name>
    salt '*' service.start <service name>
    salt '*' service.stop <service name>
    salt '*' service.status <service name> [service signature]

    7、cmd模块

    salt '*' cmd.run "ls -l | awk '/foo/{print $2}'"
    salt '*' cmd.exec_code python2 'print("hello world")'
    salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'

    cmd模块可以执行一段代码、也可以执行一个指定脚本;

    8、nginx模块,批量操作nginx服务器

    salt '*' nginx.configtest
    salt '*' nginx.signal reload
    salt '*' nginx.status
    salt '*' nginx.version

    类似的,salt还支持对

    apache

    mysql

    redis

    rabbit

    nagios

    django

    hadoop

    haproxy

    rsync

    varnish

    svn

    等模块的支持。

     

     

     

     

     参考文档:

    http://docs.saltstack.com/en/latest/topics/tutorials/walkthrough.html

     

     

     

  • 相关阅读:
    深入浅出的webpack4构建工具--webpack4+vue+route+vuex项目构建(十七)
    深入浅出的webpack4构建工具---Scope Hoisting(十六)
    深入浅出的webpack4构建工具---webpack+vue+router 按需加载页面(十五)
    深入浅出的webpack构建工具--webpack4+vue+router项目架构(十四)
    关于html的a标签的target="__blank "的安全漏洞问题
    深入浅出的webpack构建工具--webpack4+vue搭建环境 (十三)
    深入浅出的webpack构建工具---tree shaking打包性能优化(十二)
    深入浅出的webpack4构建工具---浏览器前端资源缓存(十一)
    vue分页全选和单选操作
    go语言之进阶篇通过range遍历channel内容
  • 原文地址:https://www.cnblogs.com/chenny7/p/4156113.html
Copyright © 2020-2023  润新知