稍微复杂一点的Puppet用于早期的运维工作。下面介绍一下比较简单实用的Saltstack自动化运维的使用。
关于Saltstack你了解多少?
Saltstack是一种全新的基础设施管理方法。它是服务器基础设施的集中管理平台。它可以在几分钟内运行。它足够快,服务器之间可能需要几秒钟的时间。通信和扩展性好,轻松批量管理数万台服务器,大幅降低人工和运维成本;具有配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和增强版的func; 通过部署SaltStack环境,可以根据不同的业务特点,在数千台服务器上批量执行命令、配置集中管理、分发文件、收集服务器数据、操作系统基础和软件包管理,SaltStack是一个强大的工具提高运维人员工作效率,规范业务配置和操作。 SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)(SaltStack的通信模式分为2种模式:ZeroMQ和REAT,由于目前REAT不太稳定,所以通常选择ZeroMQ模式)使用Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack、PyYAML等)进行构建。
Saltstack运行模式
本地:本地,一台机器玩,不推荐
Master/Minion:通过服务器/代理管理,非常高效(批量管理1000台机器,25秒完成)
Salt SSH:通过SSH管理,效率比较低(批量管理1000台机器,83秒完成)
Saltstack三大功能
远程执行(执行远程命令)
配置管理(状态管理)
云管理
Saltstack特点
1)部署简单方便;
2)支持大多数UNIX/Linux和Windows环境;
3)主从集中管理;
4)配置简单,功能强大,可扩展;
5)Master和Minion基于证书认证,安全可靠;
6) 支持API和自定义模块,可以通过Python轻松扩展。
Master和Minion认证
1)minion第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(路径在/etc/salt/minion中设置) )(私钥)和www.sychzs.cn(公钥),然后将www.sychzs.cn发送给master。
2)master收到minion的公钥后,通过salt-key命令接受minion的公钥。这样,以minion id命名的public将被存储在master的/etc/salt/pki/master/minions下。 key,然后master就可以向minion发送指令。
Master与Minion之间的连接
1)SaltStack master启动后默认监听4505和4506两个端口。 4505(publish_port)是Saltstack的消息发布系统,4506(ret_port)是Saltstack客户端和服务器之间通信的端口。如果使用lsof查看4505端口,你会发现4505端口上的所有minion继续保持在ESTABLISHED状态。
2)minion和master之间的通信模式如下
SaltStack基础环境安装配置记录
英文文档参考:https://www.sychzs.cn/en/latest/
centos6.8系统机器两台,包括:
192.168。 1.101 linux-node1 成为主人 master
192.168.1.102 linux-node2 成为被控端小黄人
1)两台机器的主机名必须固定一致,并且能够互相ping通
修复master和minion机器名称,然后在master机器上绑定hosts: [root@linux-node1 ~]# cat /etc/hosts 127.0.0.1 本地主机五涛 localhost4 localhost4.localdomain4 ::1 本地主机 本地主机.本地域 本地主机6 本地主机6.本地域6 192.168.1.101 linux-node1 192.168.1.102 linux-node2
2)以下是源码安装方法
a) Master端安装(为了测试效果,服务器端也安装了minion)
[root@linux-node1 ~]# wget http://www.sychzs.cn /pub/epel /6/x86_64/epel-release-6-8.noarch.rpm
[root@linux-node1 ~]# rpm -ivh epel-release-6-8.noarch.rpm --force
[root @linux-node1 ~]# yum -y 安装 salt-master
[root@linux-node1 ~]# yum -y 安装 salt-minion
[root@linux-node1 ~]# chkconfig salt-master on
[root@linux-node1 ~]# chkconfig salt-minion on
b) Minion端安装
[root@linux-node2 ~]# wget http://www.sychzs.cn/pub/epel/6/x86_64/epel-release-6-8.noarch .rpm
[root@linux-node2 ~]# rpm -ivh epel-release-6-8.noarch.rpm --force
[root@linux-node2 ~]# yum -y install salt-minion
[root@linux-node2 ~]# chkconfig salt-minion on
b) Minion端配置(如果master端也想控制自己,可以配置自己的monkey)
[root@linux-node2 ~]# vim /etc/salt/minion //修改以下几行
master: 192.168.1.101 //指定master的ip地址,冒号后面必须有一个空格
id: minion-192-1 68-1-102 //修改受控monion主机识别id。建议使用主机名或IP来设置。冒号后面必须有一个空格
[root@linux-node2 ~]# service salt-minion start
启动 salt-minion 守护进程 : [ OK ]
[root@linux-node2 ~]# ps辅助| grep python
root 16610 13.0 0.5 431116 23432 ? Sl 05:15 0:01 /usr/local/bin/python /usr/bin /salt-minion -d
root 16633 0.0 0.0 103312 884 pts/0 S+ 05:16 0:00 grep python
4)SaltStack使用说明(在主控机上操作)
sat 键命令说明:
[root@linux-node1 ~]# salt-key --help --version 显示版本号并退出 --versions-report 显示程序所有依赖包的版本号并退出 -h, --help 帮助信息 -c CONFIG_DIR, --config-dir=CONFIG_DIR 指定配置目录,默认:/etc/salt/ -q, --quiet 安静模式,不向控制台输出信息-y, --yes 对所有有关是否继续的问题回答 yes,默认: false 日志选项:设置日志选项将覆盖配置文件中的日志配置。 --log-file=LOG_FILE 指定日志文件路径,默认:/var/log/salt/key。 --log-file-level=LOG_LEVEL_LOGFILE 日志文件级别,可以设置以下值之一 'all', 'garbage', 'trace', 'debug', 'info', 'warning', 'error' ,“安静”。默认值:“警告”。 --key-logfile=KEY_LOGFILE 将所有输出发送到指定文件,默认:'/var/log/salt/key' --out=OUTPUT, --output=OUTPUT 将 salt-key 命令的输出信息发送到指定的输出器。可以设置为以下参数值 'no_return', 'virt_query'.'grains', 'yaml', 'overstatestage' , 'json', 'pprint', 'nested', 'raw', 'highstate', '安静','钥匙','txt', --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT 设置输出行缩进的空格数。负数取消输出缩进。仅对所使用的输出器有效。 --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE 将显示输出到指定文件 --no-color, --no-color 关闭字体颜色 --force-color, --force-colour 强制启用输出颜色渲染-l ARG, --list=ARG 打印公钥。您可以设置以下三个值“pre”、“un”和“unaccepted”来显示不允许/未签名的密钥。 “acc”或“accepted”将显示允许/签名的密钥。 “rej”或“rejected”将显示被拒绝的密钥。 “all”将显示所有键。 -L, --list-all 将显示所有公钥,相当于月份:“--list all” -a ACCEPT, --accept=ACCEPT 允许指定的公钥(使用 --include-all 选项指定除挂起密钥之外的所有拒绝状态下的公钥) -A, --accept-all 接受所有待处理的公钥 -r REJECT, --reject=REJECT 拒绝指定的公钥(使用--include-all选项指定除待处理密钥之外的所有处于接受状态的公钥) -R, --reject-all 拒绝所有待处理的公钥 --include-all 与接受/拒绝选项一起使用,以指定所有处于非挂起状态的公钥。 -p PRINT, --print=PRINT 打印指定的公钥 -P, --print-all 打印所有公钥 -d DELETE, --delete=DELETE 根据名称删除公钥 -D, --delete-all 删除所有键 -f FINGER, --finger=FINGER 打印指定按键的指纹信息 -F, --finger-all 打印所有按键的指纹信息 主要常用选项: --gen-keys=GEN_KEYS 将 salt 的名称设置为生成的密钥配置。 --gen-keys-dir=GEN_KEYS_DIR 设置放置生成的密钥对的目录。默认为当前目录。默认=.--keysize=KEYSIZE 设置生成密钥的位数。它仅在与 --gen-keys 选项一起使用时有效。该值必须大于2048,否则会增加到2048。默认为2048default=2048
a) 查看当前salt key信息
[root@linux-node1 ~]# salt-key -L //或者直接salt-key
Accepted Keys:
minion-192 -168-1-102
不接受的密钥:
拒绝的密钥:
b) 测试受控主机的连通性
[root@linux-node1 ~]# salt '*' www.sychzs.cn
minion-192-168-1-102:
真的
c) 远程命令执行(cmd模块),格式:salt '客户端配置的id' module.method '命令参数'(其中'*'代表所有客户端)
[root @linux -node1 ~]# salt '*' www.sychzs.cn 'uptime'
minion-192-168-1-102:
21:51:44 最多 61 天,16:44,2 个用户,平均负载:0.79、0.55、0.47
[root@linux-node1 ~]#盐'minion-192-168-1-102'www.sychzs.cn'uptime'
minion-192-168-1-102:
22 :11:50 up 61 天, 17:05, 2 位用户, 平均负载: 0.44, 0.59, 0.63
[root@linux-node1 ~]#盐'minion-192-168-1-102'www.sychzs.cn'w'
minion-192-168-1-102:
22 :14:20 up 61 天,17:07,2 个用户,平均负载:0.46, 0.52, 0.59
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 124.165.97.64 04:50 57: 20 0.32s 0.32s -bash
root pts/3 124.165.97.64 Mon20 8:46 0.20s 0.20s -bash
[root@linux-node1 ~]# salt 'minion-192-1 68- 1-102' www.sychzs.cn 'who'
minion-192-168-1-102:
root pts/0 Feb 7 04:50 (124.165.97.64 )
root pts/3 Feb 6 20 :41 (124.165.97.64)
[root@linux-node1 ~]# salt '*' www.sychzs.cn 'df -h'
minion-192-168-1-102:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
8.1G 6.8G 901M 89% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/vda1 190M 67M 113M 38% /boot
[root@linux-node1 ~]# salt '*' www.sychzs.cn 'touch /root/test'
minion-192-168-1-102:
[root@linux-node1 ~]# salt '*' www.sychzs.cn 'echo "monion-server" >> /root/test'
minion-192-168-1-102:
到monion机器上查看是否有/root/test文件创建及其内容
[root@linux-node2 ~]# ll /root/test
-rw-r--r--. 1 root root 0 Feb 7 21:51 /root/test
[root@linux-node2 ~]# cat /root/test
monion-server
远程批量传输文件(salt-cp命令)
下面表示将master主控端的/mnt/aa文件传输到所有minion被控端的/opt下
[root@linux-node1 ~]# salt-cp '*' /mnt/aa /opt/
{'minion-192-168-1-102': {'/opt/aa': True}}
注意上面命令只用于文件的传输,目录的传输需要用到cp模块,模块用法详见Saltstack自动化操作记录(2)-模块使用
---------------------------------------------------------顺便说一下-------------------------------------------------------
minion端的认证
当/etc/salt/master文件里没有配置auto_accept:True时,需要通过salt-key命令来进行证书认证操作,其中: salt-key -L:显示已经或未认证的被控端id,Acceptd Keys为已认证清单,Unaccepted Keys为未认证清单 salt-key -D:删除所有认证主机id证书 salt-key -d id:删除单个id证书 salt-key -A:接受所有id证书请求 salt-key -a id:接受单个id证书请求
minion启动的时候会创建KEY
[root@linux-node2 ~]# ll /etc/salt/pki/minion/
total 12
-rw-r--r--. 1 root root 800 Feb 7 05:16 minion_www.sychzs.cn
-r--------. 1 root root 3247 Feb 7 05:16 minion.pem
-rw-r--r--. 1 root root 800 Feb 7 05:16 www.sychzs.cn
master启动的时候会创建KEY
[root@linux-node1 ~]# ll /etc/salt/pki/master/
total 28
-r--------. 1 root root 3243 Feb 7 17:39 master.pem
-rw-r--r--. 1 root root 800 Feb 7 17:39 www.sychzs.cn
drwxr-xr-x. 2 root root 4096 Feb 8 12:02 minions
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_autosign
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_denied
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_pre
drwxr-xr-x. 2 root root 4096 Feb 7 17:39 minions_rejected
先检查一下所有的key信息,发现没有等待统一的key(Unaccepted Keys下面没有信息)
[root@linux-node1 master]# salt-key
Accepted Keys:
minion-192-168-1-102
Unaccepted Keys:
Rejected Keys:
模拟等待同意的Key:把minions目录下的文件传输到minions_pre目录下
[root@linux-node1 ~]# ll /etc/salt/pki/master/minions
total 4
-rw-r--r--. 1 root root 800 Feb 8 12:02 minion-192-168-1-102
[root@linux-node1 ~]# cp /etc/salt/pki/master/minions/* /etc/salt/pki/master/minions_pre/
[root@linux-node1 ~]# ll /etc/salt/pki/master/minions_pre/
total 4
-rw-r--r--. 1 root root 800 Feb 8 12:07 minion-192-168-1-102
再次查看key,发现有了等待同意的key
[root@linux-node1 ~]# salt-key
Accepted Keys:
minion-192-168-1-102
Unaccepted Keys:
minion-192-168-1-102
Rejected Keys:
执行同意操作:-A选项表示全部同意
[root@linux-node1 ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
minion-192-168-1-102
Proceed? [n/Y] y
[root@linux-node1 ~]# salt-key //发现key已经被同意了
Accepted Keys:
minion-192-168-1-102
Unaccepted Keys:
如果不用上面的-A选项,可以使用-a选项,自定义匹配,也可以使用*通配符。上面命令也可以是:
[root@linux-node1 ~]# salt-key -a minion-*
The following keys are going to be accepted:
Unaccepted Keys:
minion-192-168-1-102
Proceed? [n/Y] y
通过认证的主机位置会发生改变,原本在minion_pre下面(yum install -y tree )
[root@linux-node1 ~]# tree /etc/salt/pki/master/
/etc/salt/pki/master/
├── master.pem
├── www.sychzs.cn
├── minions
│ └── minion-192-168-1-102
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected
5 directories, 3 files
其实上面的master下面minion中的文件是minion端的公钥,同时在master认证通过的时候,master也偷偷的把他的公钥放到了minion端一份。用事实说话,在minion端上查看。
[root@linux-node2 ~]# ll /etc/salt/pki/minion/
总用量 12
-rw-r--r-- 1 root root 451 12月 28 23:11 minion_www.sychzs.cn
-r-------- 1 root root 1675 12月 28 23:03 minion.pem
-rw-r--r-- 1 root root 451 12月 28 23:03 www.sychzs.cn
----------------------------------------------------------------------------------------------------------------------------------------