一、自动化运维介绍
对比:
传统运维效率低,大多工作人为完成
传统运维工作繁琐,容易出错
传统运维每日重复做相同的事情
传统运维没有标准化流程
传统运维的脚本繁多,不能方便管理
自动化运维就是要解决上面所有问题
常见自动化运维工具
Puppet (www.puppetlabs.com)基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
并行执行:同时在很多台机器上执行命令。相对应的是串行(执行完一条执行第二条命令)。所以并行更快。
Ansible (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。相比较Saltstack,Saltstack支持的机器量更多一些。
二、saltstack安装
saltstack官方文档:https://docs.saltstack.com/en/latest/topics/index.html
可以使用salt-ssh远程执行,类似ansible,
也支持c/s模式,下面介绍该模式的使用,需要准备两台机器
149.133为服务端,149.131为客户端
两台机器设置hostname以及hosts
# vi /etc/hosts //两台机器都做 192.168.149.133 fuxi01 192.168.149.131 yw02
两台机器全部安装saltstack yum源
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm 133上执行 yum install -y salt-master salt-minion //控制中心安装salt-master,其他机器只需要安装salt-minion。 131上执行 yum install -y salt-minion
三、启动salt相关服务
133上编辑配置文件
# vi /etc/salt/minion //增加 master: fuxi01 //去掉#号,并编辑master的主机名 启动服务systemctl start salt-master; systemctl start salt-minion
minion虽然是通过TCP/IP通信,但是不监听任何端口。
131上编辑配置文件
# vi /etc/salt/minion //增加 master: fuxi01 启动服务systemctl start salt-minion
服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通信的端口。
四、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 yw02 // -a后面跟主机名,可以认证指定主机,accepted的意思。
# salt-key -a yw02 The following keys are going to be accepted: Unaccepted Keys: yw02 Proceed? [n/Y] y Key for minion yw02 accepted. # salt-key //可以看到绿色的Accepted Keys,代表通过的;Denied,拒绝的;UNaccepted,默认的。 Accepted Keys: yw02 Denied Keys: Unaccepted Keys: fuxi01 Rejected Keys: # salt-key -A # salt-key //可以看到都Accepted了。
salt-key命令用法:
-a 后面跟主机名,认证指定主机
-A 认证所有主机
-r 跟主机名,拒绝指定主机,reject。
-R 拒绝所有主机
-d 跟主机名,删除指定主机认证
-D 删除全部主机认证
-y 省略掉交互,相当于直接按了y
# salt-key -D -y # salt-key //再看已经全没有了 # systemctl restart salt-minion //服务端和客户端都重启minion,让master端自动识别minion端。 # salt-key //再来看就识别出来了,Unaccepted。 # salt-key -A -y //这样就全部都认证了。 # salt-key -r //操作的对象是在Unaccepted Keys下。拒绝后就到Rejected Keys下了。要想添加回来,先删掉,再-a加进来,识别不了就重启minion端。
五、saltstack远程执行命令
所有的操作都是在服务端
# salt '*' test.ping //这里的*表示所有已经认证的minion端,也可以指定一个,显示的True,表示存在的。 fuxi01: True yw02: True # salt 'aming-01' test.ping # salt 'aming-*' "hostname" # salt 'aming-0[23]' "hostname" # salt '*' cmd.run "hostname" //调用系统的命令,用cmd.run。后面可以跟系统里能用的所有的命令。
说明: 这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端aming-01,aming-02, 那我们可以写成salt 'aming-*';salt 'aming-0[12]';salt -L 'aming-01,aming-02';salt -E 'aming-[0-9]+';salt -E 'aming-(01|03)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项,后面介绍。