自动化运维之Saltstack
第三十八课 自动化运维之Saltstack
目录
一、自动化运维介绍
二、 saltstack安装
三、 启动saltstack服务
四、 saltstack配置认证
五、 saltstack远程执行命令
六、 grains
七、 pillar
八、 安装配置httpd
九、 配置管理文件
十、 配置管理目录
十一、 配置管理远程命令
十二、 配置管理计划任务
十三、 其他命令
十四、 salt-ssh使用
一、自动化运维介绍
认识自动化运维
传统运维效率低,大多工作人为完成
传统运维工作繁琐,容易出错
传统运维每日重复做相同的事情
传统运维没有标准化流程
传统运维的脚本繁多,不能方便管理
自动化运维就是要解决上面所有问题
常见自动化运维工具
Puppet (www.puppetlabs.com)基于ruby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
二、 saltstack安装
saltstack介绍
https://docs.saltstack.com/en/latest/topics/index.html
saltstack既可以使用salt-ssh远程执行,类似ansible,也支持c/s模式。
演示环境:
saltserver 192.168.1.41 CentOS release 6.8 (Final)
saltminion 192.168.1.43 CentOS release 6.8 (Final)
saltminion01 192.168.1.42 CentOS release 6.8 (Final)
三台机器都配置hosts
# vim /etc/hosts
// 添加
192.168.1.41 saltserver.local
1921.68.1.42 saltminion01.local
192.168.1.43 saltminion.local
Saltstack安装
1.安装epel-release源
// 也可以从http://repo.saltstack.com/yum/redhat/下载安装salt最新的源
[root@saltserver ~]# yum -y install epel-release
2.安装相应的salt包
// 查看salt安装包
[root@saltserver ~]# yum list | grep salt
python-salttesting.noarch 2015.7.10-1.el6 epel
salt.noarch 2015.5.10-2.el6 epel
salt-api.noarch 2015.5.10-2.el6 epel
salt-cloud.noarch 2015.5.10-2.el6 epel
salt-master.noarch 2015.5.10-2.el6 epel
salt-minion.noarch 2015.5.10-2.el6 epel
salt-ssh.noarch 2015.5.10-2.el6 epel
salt-syndic.noarch 2015.5.10-2.el6 epel
// 服务器端安装salt-master和salt-minion
[root@saltserver ~]# yum -y install salt-master.noarch salt-minion.noarch
// 客户端安装salt-minion即可
[root@saltminion01 ~]# yum -y install salt-minion.noarch
三、 启动saltstack服务
1.启动salt-master
[root@saltserver ~]# /etc/init.d/salt-master start
// 服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通信的端口
[root@saltserver ~]# netstat -nltup | egrep "4505|4506"
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 1589/python2.6
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 1609/python2.6
2.编辑minion端的配置文件,并启动minion
// 以saltminion01为例
[root@saltminion01 ~]# vim /etc/salt/minion
// 修改master为服务端的主机名或ip地址,如果规模较大也可以搭建本地dns服务来提供名称解析服务
master: saltserver.local
// 修改id值为客户端的主机名,这会做为服务端上显示的客户端标识
#id:
id: saltminion01.local
// 启动minion
[root@saltminion01 ~]# /etc/init.d/salt-minion start
四、 saltstack配置认证
master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的
minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,它会把公钥传输给master
master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub
以上过程需要借助salt-key工具来实现
salt-key常用选项
-a 后面跟主机名,认证指定主机
-A 认证所有主机
-r 跟主机名,拒绝指定主机
-R 拒绝所有主机
-d 跟主机名,删除指定主机认证
-D 删除全部主机认证
-y 省略掉交互,相当于直接按了y
显示key
// 服务端
[root@saltserver ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
saltminion.local
saltminion01.local
saltserver
Rejected Keys:
[root@saltserver ~]#
认证主机
// 可以一台一台认证,也可以批量认证
[root@saltserver ~]# salt-key -a saltserver
The following keys are going to be accepted:
Unaccepted Keys:
saltserver
Proceed? [n/Y] Y
Key for minion saltserver accepted.
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltserver
Denied Keys:
Unaccepted Keys:
saltminion.local
saltminion01.local
Rejected Keys:
// 批量认证,也可通过修改配置文件实现
// 在 /etc/salt/master中取消下句注释 #auto_accept: True
[root@saltserver ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
saltminion.local
saltminion01.local
Proceed? [n/Y] Y
Key for minion saltminion.local accepted.
Key for minion saltminion01.local accepted.
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltminion.local
saltminion01.local
saltserver
Denied Keys:
Unaccepted Keys:
Rejected Keys:
删除主机认证
// 以saltminion01为例,在服务器上操作, -D删除所有认证
[root@saltserver ~]# salt-key -d saltminion01.local -y
Deleting the following keys:
Accepted Keys:
saltminion01.local
Key for minion saltminion01.local deleted.
// minion端重启服务
[root@saltminion01 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon: [ OK ]
Starting salt-minion daemon: [ OK ]
// 服务器再次检查key
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltminion.local
saltserver
Denied Keys:
Unaccepted Keys:
saltminion01.local
Rejected Keys:
拒绝key
// -R 拒绝所有
[root@saltserver ~]# salt-key -r saltminion01.local -y
Key for minion saltminion01.local rejected.
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltminion.local
saltserver
Denied Keys:
Unaccepted Keys:
Rejected Keys:
saltminion01.local
五、 saltstack远程执行命令
远程执行命令语法
salt <target> <模块名>.<方法> [参数…]
target支持以下类型
Glob通配,salt的默认类型
// 模块的保存位置/usr/lib/python2.6/site-packages/salt/modules/
// 方法可以查看模块vim /usr/lib/python2.6/site-packages/salt/modules/test.py,
// 也可以从salt的官方文档查询
// 查看minion可用模块salt 'target' sys.list_modules
// 查看模块的函数 salt 'target' sys.list_functions test
// 系统帮助文件 salt 'target' sys.doc test.ping
// *表示所有主机,test代表模块,ping是方法。
[root@saltserver ~]# salt "*" test.ping
saltminion01.local:
True
saltminion.local:
True
saltserver:
True
-L,长选项--list,该选项通个逗号分隔的列表来指定多个Minion。列表中不使用glob或正则表达式进行模式
[root@saltserver ~]# salt -L saltminion.local,saltminion01.local test.ping
saltminion.local:
True
saltminion01.local:
True
短选项:-S,长选项: --ipcidr。通过过指定一个IPv4地址或一个CIDR的ipv4子网来target minion。
[root@saltserver ~]# salt -S 192.168.1.0/24 test.ping
saltminion01.local:
True
saltminion.local:
True
saltserver:
True
短选项: -E 长选项: --pcre。Perl语言兼容正则表达式(PCRE)
[root@saltserver ~]# salt -E '^saltserver$' test.ping
saltserver:
True
[root@saltserver ~]# salt -E '.*.local$' test.ping
saltminion.local:
True
saltminion01.local:
True
短选项:-G 长选项: --grain。
// 对os是CentOS的主机进行ping测试
[root@saltserver ~]# salt -G "os:CentOS" test.ping
saltserver:
True
saltminion01.local:
True
saltminion.local:
True
Grain PCRE 短选项: 无 长选项:--grain-pcre
salt –grain-pcre ‘os:red(hat|flag) test.ping’
Pillar 短选项: -I,长选项: --pillar
实例见下,pillar部分
混合(compound),短选项: -C,长选项: --compound。混合target允许用户在一个shell命令中指定多种target类型。默认使用glob,想指定其他target类型,则需要在前面追加上类型简写和@符号
简写 | target |
---|---|
G | Grain |
E | PCRE Minion ID |
P | Grain PCRE |
L | 列表 |
I | Pillar |
S | 子网/IP地址 |
R | SECO范围 |
# salt -C ‘G@os:Ubuntu,I@role:web,S@192.168l100.0/24’ test.ping
节点组(nodegroup)短选项:-N,长选项:--nodegroup。在命令行使用前必须先在master的配置文件中以target列表进行定义(使用混合匹配语法)
nodegroups:
webdev: 'I@role:web,G@cluster:dev'
webdqa: 'I@role:web,G@cluster:qa'
webprod: 'I@role:web,G@cluster:prod'
节点组定义完毕并重载Master配置文件后,可以通过salt进行target:
salt -N wendev test.ping
六、 grains
grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
列出所有的grains项目名字
[root@saltserver ~]# salt 'saltminion01.local' grains.ls | head -n 10
saltminion01.local:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
列出所有grains项目以及值
[root@saltserver ~]# salt 'saltminion01.local' grains.items | head -n 10
saltminion01.local:
----------
SSDs:
biosreleasedate:
07/02/2015
biosversion:
6.00
cpu_flags:
- fpu
- vme
grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
我们可以根据grains收集到的一些信息,做配置管理工作。
[root@saltserver ~]# salt -G 'os:CentOS' cmd.run 'hostname'
saltminion.local:
saltminion.local
saltminion01.local:
saltminion01.local
saltserver:
saltserver.local
grains支持自定义信息。
// 在客户端编辑/etc/salt/grains文件
[root@saltminion01 ~]# vim /etc/salt/grains
// 添加如下两行自定义信息
role: nginx
env: test
// 重启minion服务
[root@saltminion01 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon: [ OK ]
Starting salt-minion daemon: [ OK ]
// 在服务端查看自定义的信息
[root@saltserver ~]# salt 'saltminion01.local' grains.item role env
saltminion01.local:
----------
env:
test
role:
nginx
// 可以利用自定义的信息来作为target使用
[root@saltserver ~]# salt -G 'role:nginx' cmd.run 'hostname'
saltminion01.local:
saltminion01.local
七、 pillar
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
配置自定义pillar
// 在服务器端操作
[root@saltserver ~]# vim /etc/salt/master
// 取消下三行的注释
// salt中只能用空格对齐,不能用tab代替空格。空格数不限制,但是相同级别的缩进的空格数一致。
pillar_roots:
base:
- /srv/pillar
// 新建/src/pillar
rm: remove directory `/src/pillar'? y
[root@saltserver ~]# mkdir /srv/pillar
[root@saltserver ~]# ls -l !$
ls -l /srv/pillar
total 0
// 在/srv/pillar新建test.sls
[root@saltserver pillar]# echo 'conf: /etc/123.conf'>> test.sls
[root@saltserver pillar]# cat test.sls
conf: /etc/123.conf
// 在/srv/pillar下新建top.sls
conf: /etc/123.conf
[root@saltserver pillar]# cat >>top.sls<<EOF
> base:
> 'saltminion01':
> - test
> EOF
[root@saltserver pillar]# cat top.sls
base:
'saltminion01':
- test
// 重启master
[root@saltserver pillar]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
// 刷新pillar配置来获取新的pillar状态
[root@saltserver pillar]# salt '*' saltutil.refresh_pillar
saltminion01.local:
True
saltminion.local:
True
saltserver:
True
// 验证
[root@saltserver pillar]# salt '*' pillar.item conf
saltserver:
----------
saltminion.local:
----------
saltminion01.local:
----------
conf:
/etc/123.conf
//pillar同样可以用来作为salt的匹配对象
[root@saltserver pillar]# salt -I 'conf:/etc/123.conf' test.ping
saltminion01.local:
True
八、 安装配置httpd
1.修辑master的配置文件
[root@saltserver pillar]# vim /etc/salt/master
// 取消下面三句的注释
file_roots:
base:
- /srv/salt
// 创建/srv/salt目录
[root@saltserver pillar]# mkdir /srv/salt/
[root@saltserver pillar]# cd /srv/salt/
2.创建/srv/salt/top.sls文件
[root@saltserver salt]# vim top.sls
base:
'*':
- httpd
// 重启master
[root@saltserver salt]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
3.新建/srv/salt/httpd.sls文件
[root@saltserver salt]# vim /srv/salt/httpd.sls
[root@saltserver salt]# vim httpd.sls
install_httpd:
pkg.installed:
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
4.测试安装(以saltminion.local为例)
[root@saltserver salt]# salt 'saltminion.local' state.highstate
saltminion.local:
----------
ID: install_httpd
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: 00:17:18.266735
Duration: 1064.537 ms
Changes:
----------
ID: install_httpd
Function: pkg.installed
Name: httpd-devel
Result: True
Comment: The following packages were installed/updated: httpd-devel
Started: 00:17:19.331436
Duration: 33639.881 ms
Changes:
----------
apr:
----------
new:
1.3.9-5.el6_9.1
old:
1.3.9-5.el6_2
apr-devel:
----------
new:
1.3.9-5.el6_9.1
old:
apr-util-devel:
----------
new:
1.3.9-3.el6_0.1
old:
cyrus-sasl-devel:
----------
new:
2.1.23-15.el6_6.2
old:
db4:
----------
new:
4.7.25-22.el6
old:
4.7.25-20.el6_7
db4-cxx:
----------
new:
4.7.25-22.el6
old:
db4-devel:
----------
new:
4.7.25-22.el6
old:
db4-utils:
----------
new:
4.7.25-22.el6
old:
4.7.25-20.el6_7
expat:
----------
new:
2.0.1-13.el6_8
old:
2.0.1-11.el6_2
expat-devel:
----------
new:
2.0.1-13.el6_8
old:
httpd-devel:
----------
new:
2.2.15-69.el6.centos
old:
openldap:
----------
new:
2.4.40-16.el6
old:
2.4.40-12.el6
openldap-devel:
----------
new:
2.4.40-16.el6
old:
----------
ID: install_httpd
Function: service.running
Name: httpd
Result: True
Comment: Service httpd has been enabled, and is running
Started: 00:17:53.015925
Duration: 670.976 ms
Changes:
----------
httpd:
True
Summary
------------
Succeeded: 3 (changed=2)
Failed: 0
------------
Total states run: 3
// 客户端上检查
[root@saltminion ~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 7505 root 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7507 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7508 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7509 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7510 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7511 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7512 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7513 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7514 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
九、 配置管理文件
1.新建/srv/salt/test.sls
[root@saltserver salt]# vim /srv/salt/test.sls
// 添加如下内容
// 说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,
// 这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
file_test:
file.managed:
- name: /tmp/aminglinux.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 600
[root@saltserver salt]# mkdir -p test/123
[root@saltserver salt]# echo '11111' >> test/123/1.txt
[root@saltserver salt]# cat !$
cat test/123/1.txt
11111
2.编辑/srv/salt/top.sls文件
[root@saltserver salt]# vim top.sls
base:
'*':
- test
3.同步测试
[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: file_test
Function: file.managed
Name: /tmp/aminglinux.com
Result: True
Comment: File /tmp/aminglinux.com updated
Started: 13:08:40.688514
Duration: 18.984 ms
Changes:
----------
diff:
New file
Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
// saltminion01.local查看文件是否同步过去
[root@saltminion01 ~]# cat /tmp/aminglinux.com
11111
[root@saltminion01 ~]# ls -l /tmp/aminglinux.com
-rw------- 1 root root 6 Sep 5 13:08 /tmp/aminglinux.com
十、 配置管理目录
1.在master上新建配置文件/srv/salt/test_dir.sls
[root@saltserver salt]# vim /srv/salt/test_dir.sls
// 添加内容如下
file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 640
- dir_mode: 750
- mkdir: True
- clean: True
// clean:True表示源删除文件或目录,目标也会跟着删除,否则不会
2.修改top.sls
[root@saltserver salt]# vim top.sls
base:
'*':
- test_dir
3.同步测试
[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: file_dir
Function: file.recurse
Name: /tmp/testdir
Result: True
Comment: Recursively updated /tmp/testdir
Started: 13:16:30.379320
Duration: 1044.869 ms
Changes:
----------
/tmp/testdir:
----------
mode:
0750
/tmp/testdir/1.txt:
----------
diff:
New file
mode:
0640
Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
// 在saltminion01.local查看目录是否同步成功
drwxr-x--- 2 root root 4096 Sep 5 13:16 testdir
[root@saltminion01 ~]# ls -lR /tmp/
/tmp/:
total 8
-rw------- 1 root root 6 Sep 5 13:08 aminglinux.com
drwxr-x--- 2 root root 4096 Sep 5 13:16 testdir
/tmp/testdir:
total 4
-rw-r----- 1 root root 6 Sep 5 13:16 1.txt
// 注意,如果目录为空,则不会同步
十一、 配置管理远程命令
1.新建配置文件/srv/salt/shell_test.sls
[root@saltserver salt]# vim /srv/salt/shell_test.sls
// 内容如下
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root
2.在source目录下新建脚本
[root@saltserver salt]# vim /srv/salt/test/1.sh
#!/bin/bash
echo "haha"
3.修改top.sls内容
"test/1.sh" [New] 3L, 25C written
[root@saltserver salt]# vim top.sls
base:
'*':
- shell_test
4.测试
"top.sls" 3L, 30C written
[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: shell_test
Function: cmd.script
Result: True
Comment: Command 'shell_test' run
Started: 13:27:50.265831
Duration: 146.006 ms
Changes:
----------
pid:
10120
retcode:
0
stderr:
stdout:
haha
Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
十二、 配置管理计划任务
1.新建/srv/salt/cron_test.sls文件
Total states run: 1
[root@saltserver salt]# vim /srv/salt/cron_test.sls
// 添加如下内容
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
// 注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。
2.编辑top.sls文件
[root@saltserver salt]# vim top.sls
base:
'*':
- cron_test
3.测试
// 在master端推送
[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: cron_test
Function: cron.present
Name: /bin/touch /tmp/111.txt
Result: True
Comment: Cron /bin/touch /tmp/111.txt added to root's crontab
Started: 13:59:11.007707
Duration: 19.99 ms
Changes:
----------
root:
/bin/touch /tmp/111.txt
Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
//在saltminion01.local查看计划任务,不要手动修改salt管理的crontab任务,否则就没法删除或者修改这个cron了
[root@saltminion01 ~]# crontab -e
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
* 20 * * * /bin/touch /tmp/111.txt
4.删除任务计划
// 修改corn_test.sls
// 两者不能共存,要想删除一个cron,那之前的present就得去掉。
[root@saltserver salt]# vim cron_test.sls
cron_test:
cron.absent:
- name: /bin/touch /tmp/111.txt
5.同步配置文件
[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: cron_test
Function: cron.absent
Name: /bin/touch /tmp/111.txt
Result: True
Comment: Cron /bin/touch /tmp/111.txt removed from root's crontab
Started: 14:04:29.354015
Duration: 12.691 ms
Changes:
----------
root:
/bin/touch /tmp/111.txt
Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
6.在saltminion01.local上检查
[root@saltminion01 ~]# crontab -e
// 已经删除了
# Lines below here are managed by Salt, do not edit
~
十三、 其他命令
1.拷贝master上的文件到客户端
// cp.get_file
[root@saltserver salt]# salt '*' cp.get_file salt://test/1.sh /tmp/1.sh
saltminion01.local:
/tmp/1.sh
saltminion.local:
/tmp/1.sh
saltserver:
/tmp/1.sh
//验证
[root@saltminion01 ~]# ls -l /tmp/1.sh
-rw-r--r-- 1 root root 25 Sep 5 14:08 /tmp/1.sh
2.拷贝master上的目录到客户端
// cp.get_dir
[root@saltserver salt]# salt '*' cp.get_dir salt://test/123 /tmp/
saltminion01.local:
- /tmp//123/1.txt
saltserver:
- /tmp//123/1.txt
saltminion.local:
- /tmp//123/1.txt
//在minion端验证
[root@saltminion01 ~]# ls -lR /tmp/
/tmp/:
total 16
drwxr-xr-x 2 root root 4096 Sep 5 14:20 123
-rw-r--r-- 1 root root 25 Sep 5 14:08 1.sh
-rw------- 1 root root 6 Sep 5 13:08 aminglinux.com
drwxr-x--- 2 root root 4096 Sep 5 13:16 testdir
/tmp/123:
total 4
-rw-r--r-- 1 root root 6 Sep 5 14:20 1.txt
/tmp/testdir:
total 4
-rw-r----- 1 root root 6 Sep 5 13:16 1.txt
3.显示存活的minion
//salt-run manage.up
[root@saltserver salt]# salt-run manage.up
- saltminion.local
- saltminion01.local
- saltserver
4.命令行下执行master上的shell脚本
//cmd.script
[root@saltserver salt]# salt '*' cmd.script salt://test/1.sh
saltminion01.local:
----------
pid:
10281
retcode:
0
stderr:
stdout:
haha
saltserver:
----------
pid:
80391
retcode:
0
stderr:
stdout:
haha
saltminion.local:
----------
pid:
9392
retcode:
0
stderr:
stdout:
haha
十四、 salt-ssh使用
1.安装salt-ssh
[root@saltserver salt]# yum -y install salt-ssh
2.新建配置文件 /etc/salt/roster
[root@saltserver salt]# vim /etc/salt/roster
saltminion.local:
host: 192.168.1.43
user: root
passwd: 123456
saltminion01.local:
host: 192.168.1.42
user: root
passwd: 123456
3.推送key
// 第一次推送不成功
[root@saltserver salt]# salt-ssh --key-deploy '*' -r 'w'
saltminion.local:
----------
retcode:
254
stderr:
stdout:
The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
The authenticity of host '192.168.1.43 (192.168.1.43)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)?
saltminion01.local:
----------
retcode:
254
stderr:
stdout:
The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
The authenticity of host '192.168.1.42 (192.168.1.42)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)?
//需要登录一次
[root@saltserver salt]# ssh saltminion01.local
The authenticity of host 'saltminion01.local (192.168.1.42)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'saltminion01.local' (RSA) to the list of known hosts.
root@saltminion01.local's password:
Last login: Sat Sep 1 23:33:29 2018 from 192.168.1.9
[root@saltminion01 ~]# ssh saltminion.local
The authenticity of host 'saltminion.local (192.168.1.43)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'saltminion.local,192.168.1.43' (RSA) to the list of known hosts.
root@saltminion.local's password:
Last login: Sat Sep 1 23:33:40 2018 from 192.168.1.9
[root@saltserver salt]# salt-ssh --key-deploy '*' -r 'w'
saltminion01.local:
----------
retcode:
0
stderr:
stdout:
14:48:01 up 4 days, 15:41, 2 users, load average: 0.07, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.04s 0.04s -bash
root pts/1 192.168.1.9 Sat23 5:19 0.15s 0.15s -bash
saltminion.local:
----------
retcode:
0
stderr:
stdout:
14:48:10 up 4 days, 15:41, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.00s 0.00s -bash
root pts/1 192.168.1.9 Sat23 5:38 0.04s 0.04s -bash
// 删除roster中用户的密码,再次测试
[root@saltserver salt]# salt-ssh '*' -r 'w'
saltminion.local:
----------
retcode:
0
stderr:
stdout:
14:49:55 up 4 days, 15:43, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.00s 0.00s -bash
root pts/1 192.168.1.9 Sat23 7:23 0.04s 0.04s -bash
saltminion01.local:
----------
retcode:
0
stderr:
stdout:
14:49:46 up 4 days, 15:42, 2 users, load average: 0.01, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.04s 0.04s -bash
root pts/1 192.168.1.9 Sat23 7:04 0.15s 0.15s -bash
自动化运维之Saltstack的更多相关文章
- 1、自动化运维之SaltStack实践
自动化运维之SaltStack实践 1.1.环境 linux-node1(master服务端) 192.168.0.15 linux-node2(minion客户端) 192.168.0.16 1.2 ...
- saltstack自动化运维系列⑩SaltStack二次开发初探
saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...
- saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3
saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...
- saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix
saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived 安装配置Keepalived 1.编写功能模块 #创建keepalived目录# mkdir -p ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...
- 自动化运维工具 SaltStack 搭建
原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...
- 自动化运维工具SaltStack详细部署【转】
==========================================================================================一.基础介绍==== ...
- 自动化运维与Saltstack
一.自动化运维介绍 1.自动化运维产生背景 传统的IT运维是将数据中心中的网络设备.服务器.数据库.中间件.存储.虚拟化.硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行 ...
随机推荐
- 防cc攻击策略
黑客攻击你的网站,会采取各种各样的手段,其中为了降低你网站的访问速度,甚至让你的服务器瘫痪,它会不断的刷新你的网站,或者模拟很多用户同一时间大量的访问你的网站, 这就是所谓的CC攻击,这就需要我们在程 ...
- Redis(一)--安装与简介
1.Redis是用c编写的,刚开始只支持linux,后来又团队开发出了windows版本:Redis属于非关系型数据库,key-value格式,传统关系型数据库处理高并发.海量数据存储和访问.高可扩展 ...
- 提升 Hive Query 执行效率 - Hive LLAP
从 Hive 刚推出到现在,得益于社区对它的不断贡献,使得 Hive执行 query 效率显著提升.其中比较有代表性的功能如 Tez (将多个 job整合为一个DAG job)以及 CBO(Cost- ...
- Python字符串 --Python3
Python语言中,字符串是用两个双引号或者单引号括起来的词汇表或多个字符. 1.Python字符串的两种序号体系 反向递减序号:-- -9 -8 -7 -6 -5 -4 -3 -2 -1 正向递增序 ...
- 批处理脚本+adb命令
app的测试过程中,有一些重复性的繁琐工作,可以采用用批处理脚本+adb命令方式来代替 说明: (1)等待时间我用的ping命令替代的,比较简单直观 (2)我采取的是用坐标定位,后续会使用控件来定位 ...
- linux shell实战之知识体系
1.认识GUN/bash shell 梳理清楚硬件,内核及模块,shell之间的关系:熟悉GUN的bash以及bash shell的功能:学习shell的通配符 2.shell 的变量 变量的设置,取 ...
- FreeMarker与Thymeleaf
FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 ...
- BUAA_OO第一单元作业总结
BUAA_OO第一单元作业总结 单元任务 第一单元的任务为实现表达式的求导,其中第一次作业是对简单多项式的求导,第二次作业是对包含简单幂函数和简单正余弦函数的多项式的求导,第三次作业是对包含简单幂函数 ...
- linux-基础命令篇-02
基本命令:--LS 关于显示的颜色含义: 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰色:表示 ...
- 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)
一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...