前言


一:自动化运维介绍

  随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等)。从初期的几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,那么标准化、自动化、架构优化、过程优化等降低IT服务成本的因素越来越被人们所重视。其中,自动化最开始作为代替人工操作为出发点的诉求被广泛研究和应用。

  IT运维从诞生发展至今,自动化作为其重要属性之一已经不仅仅只是代替人工操作,更重要的是深层探知和全局分析,关注的是在当前条件下如何实现性能与服务最优化,同时保障投资收益最大化。自动化对IT运维的影响,已经不仅仅是人与设备之间的关系,已经发展到了面向客户服务驱动IT运维决策的层面,IT运维团队的构成,也从各级技术人员占大多数发展到业务人员甚至用户占大多数的局面。

  因此,IT运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。可以说自动化一定是IT运维最高层面的重要属性之一,但不是全部。

二:传统运维的缺陷:

  • 传统运维效率低,大多工作人为完成

  • 传统运维工作繁琐,容易出错

  • 传统运维每日重复做相同的事情

  • 传统运维没有标准化流程

  • 传统运维的脚本繁多,不能方便管理

自动化运维就是要解决上面所有问题。

三:常见自动化运维工具:

  • Puppet (www.puppetlabs.com)基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。

  • Saltstack(官网https://saltstack.com 文档 https://docs.saltstack.com/en/latest/)基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,因为Saltstack有一个消息队列。Saltstack配置和使用比puppet容易,能实现puppet几乎所有的功能。

  • Ansible (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。

 主人公SaltStack简介


SaltStack介绍:

       SaltStack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。SaltStack是使用Python语言开发的,同时提供Rest API方便二次开发以及和其它平台进行集成,同时官方也发布了一个Web管理界面halite。


SaltStack有三种运行方式:

  •  Local

  • Master/Minion

  • Salt SSH

    SaltStack的传统运行模式为Master/Minion(C/S结构),需要在被管理的节点上安装Minion。同时SaltStack也支持SSH的方式,无需安装Agent,通过SSH实现管理。


SaltStack目前拥有三大主要功能:

  • 远程执行

  • 配置管理

  • 云管理


 SaltStack部署方案


SaltStack工作环境方案:

Role

ip

os

Master_id:al224

192.168.1.18

Centos6.6

Minion_id:al224

192.168.1.18

Centos6.6

Minion_id:al157

192.168.1.20

Centos6.6

两台都装上 rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@master ~]#yum install -y salt-master python-setproctitle   #Salt Master安装(al224这台装上master和minion)
[root@master ~]#/etc/init.d/salt-master start                  #Salt Master启动
[root@master ~]# chkconfig salt-master on                       #Salt Master加入开机启动

[root@minion ~]#yum install -y salt-minion       #Salt Minion安装
[root@minion ~]#/etc/init.d/salt-minion start    #Salt Minion 启动
[root@minion ~]#chkconfig salt-minion on       #Salt Minion 加入开机启动

[root@master ~]# tail -f /var/log/salt/master    #服务端日志
[root@minion ~]# tail -f /var/log/salt/minion    #客户端日志
Salt Minion配置
Minion端配置非常简单,一般只需要修改两个配置即可。
[root@minion ~]# vim /etc/salt/minion

master: 192.168.1.18 (修改master为master的IP地址)
id: (客户端的id。默认不设置会取客户端的FQDN主机名)


 SaltStack认证


  Salt的数据传输是通过AES加密的,Master和Minion之间在通信之前,需要进行认证。通过认证的方式保证安全性,完成一次认证后,Master就可以自由的控制Minion来完成各项工作了。了解了认证的详细有助于我们在日常管理中管理Minion,已经及时处理问题。

  • 1.minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和minion.pub(public key),然后将minion.pub发送给master。

  • 2.master在第一次启动时,会在/etc/salt/pki/master下自动生成master.pem和master.pub。在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 客户端会保存一份master的public key,在/etc/salt/pki/minion_master.pub

  • 3.通过两个步骤的验证,master就能对minion发送指令了。

[root@master ~]# salt-key
Accepted Keys:
Unaccepted Keys:
al224
al157
Rejected Keys:
认证Minion:
[root@master ~]# salt-key --accept=*
The following keys are going to be accepted:
Unaccepted Keys:
minion.example.com
Proceed? [n/Y] Y
Key for minion minion.example.com accepted.
[root@master ~]# salt-key 
Accepted Keys:   #接受列表可看到加入了两台minion的ID
al157
al224
Denied Keys:
Unaccepted Keys:
Rejected Keys:
小提示:无论是accept还是delete都支持Linux的Shell通配符。


 SaltStack简单远程执行

远程执行时SaltStack的核心功能之一。主要使用salt模块可以批量给选定的Minion端执行相应的命令,并获得返回结果。让我们执行第一个Salt命令。
[root@master ~]# salt '*' test.ping
al224:
     True
al157:
     True
上面的命令用来查看有哪些Minion节点连接到Master。* 指的是选定的目标Minion,很显然代表所有。就是所有Minion端了。
test.ping是salt远程执行的一个模块。(注意:这并不是一个ICMP ping。)

SaltStack提供了大量的命令模块可以使用。
SaltStack可以使用cmd.run模块远程执行shell命令,使用cmd.run。如:让 Minion节点运行uptime命令。
[root@master ~]# salt '*' cmd.run 'uptime'
al157:
     04:26:25 up 10:20,  2 users,  load average: 0.00, 0.00, 0.00
al224:
     04:26:26 up 10:20,  3 users,  load average: 0.16, 0.04, 0.01
[root@master ~]# salt '*' cmd.run 'w'     
al224:
     04:27:04 up 10:21,  3 users,  load average: 0.16, 0.05, 0.01
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.1.19     04:20    1.00s  0.57s  0.54s /usr/bin/python
    root     tty1     :0               18:07   10:20m 23.60s 23.60s /usr/bin/Xorg :
    root     pts/1    :0.0             18:07   10:19m  0.00s  0.00s /bin/bash
al157:
     04:27:03 up 10:21,  2 users,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1     :0               18:07   10:20m  8:07   8:07  /usr/bin/Xorg :
    root     pts/0    192.168.1.19     02:33   52:16   7.09s  0.36s -bash

SaltStack可以使用service模块远程执行服务操控 如:让 Minion节点运行ssh服务状态查询。
[root@master ~]# salt '*' service.status sshd
al224:
    True
al157:
    True
 假设此时minion(al157)的sshd服务意外关闭了,可以做以下操作
[root@master ~]# salt 'al157' service.stop sshd   
al157:
    True
[root@master ~]# salt 'al157' service.status sshd
al157:
    False  
[root@master ~]# salt 'al157' service.start sshd 
al157:
    True
[root@master ~]# salt 'al157' service.status sshd
al157:
    True