首页 > 代码库 > salt stack 工具之一——远程命令

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.229auto_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.229id :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 -LAccepted Keys:343537395657Unaccepted 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

 

 


 

执行命令

 对所有的minion执行命令:

salt * cmd.run uptime

输出结果:

34:     18:13:18 up 268 days,  6:04,  3 users,  load average: 0.73, 0.87, 0.8837:     18:13:18 up 142 days, 16:51,  1 user,  load average: 0.47, 0.50, 0.4639:     18:13:17 up 142 days, 16:49,  3 users,  load average: 0.60, 0.59, 0.5135:     18:13:17 up 268 days,  6:03,  1 user,  load average: 1.11, 0.97, 0.8757:     18:13:18 up 149 days,  2:30,  1 user,  load average: 1.54, 1.62, 1.5556:     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

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

 

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

http://docs.saltstack.cn/zh_CN/latest/ref/modules/all/index.html

比如:

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

salt * disk.usagesalt * disk.percent /varsalt * disk.inodeusage

 

2、dig模块

salt ns1 dig.A www.google.comsalt ns1 dig.AAAA www.google.comsalt ns1 dig.MX google.comsalt ns1 dig.NS google.comsalt ns1 dig.SPF google.comsalt 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 rootsalt * cron.raw_cron rootsalt * cron.rm_job root /usr/local/weeklysalt * cron.rm_env root MAILTOsalt * cron.set_job root * * * * 1 /usr/local/weeklysalt * cron.write_cron_file root /tmp/new_cron

 

5、at模块,一次性任务

salt * at.at 12:05am /sbin/reboot tag=rebootsalt * at.at 3:05am +3 days bin/myscript tag=nightly runas=jimsalt * at.atqsalt * at.atrm all

 

6、service模块

salt * service.available sshdsalt * service.get_allsalt * 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.configtestsalt * nginx.signal reloadsalt * nginx.statussalt * nginx.version

类似的,salt还支持对

apache

mysql

redis

rabbit

nagios

django

hadoop

haproxy

rsync

varnish

svn

等模块的支持。

 

 

 

 

 

 参考文档:

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

 

 

 

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