精华内容
下载资源
问答
  • 运维自动化工具Ansible

    千次阅读 2017-12-09 21:14:35
    简单介绍自动化运维工具ansible

    Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,Ansible只是提供一种框架,基于ssh远程通讯,所以不需要安装client/agent端;

    一:特点;

    1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;

    2、默认使用SSH协议对设备进行管理;

    3、有大量常规运维操作模块,可实现日常绝大部分操作。

    4、配置简单、功能强大、扩展性强;

    5、支持API及自定义模块,可通过Python轻松扩展;

    6、通过Playbooks来定制强大的配置、状态管理;

    7、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;(主控端)

    8、提供一个功能强大、操作性强的Web管理界面和RESTAPI接口——AWX平台(现叫Ansible tower,收费的)

    架构图:


    命令执行过程:

    1、加载自己的配置文件 默认/etc/ansible/ansible.cfg

    2、查找对应的主机配置文件, 找到要执行的主机或者组

    3、加载自己对应的模块文件, 如command

    4、 通过Ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器上

    5、对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件

    6、 给文件+x执行权限

    7、 执行并返回结果

    8、 删除临时py文件,sleep 0退出

    其中:

    Ansible:Ansible核心程序。

    HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。

    Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。

    CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。

    CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。

    ConnectionPlugins:连接插件,Ansible和Host通信使用

    二:配置文件解析;

    主配置文件:/etc/ansible/ansible.cfg中部分参数

    inventory = /etc/ansible/hosts #资源清单inventory文件的位置,即一些Ansible需要连接管理的主机列表;
    library = /usr/share/ansible #指向存放Ansible模块的目录。Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块;
    forks = 5  #设置默认情况下Ansible最多能有多少个进程同时工作, 从Ansible 1.3开始,fork数量默认设置最多5个进程并行处理;
    sudo_user = root #默认执行命令的用户,也可以在playbook中重新设置这个参数;
    remote_port = 22 #连接被管节点的管理端口,默认是22。(为了防止黑客攻击,生产中一般不用22(可在/etc/ssh/sshd_config中改Port));
    host_key_checking= False #是否检查SSH主机的密钥。可以设置为True或False,关闭后第一次连接没有提示配置实例;
    timeout= 60 #SSH连接的超时间隔,单位是秒;
    log_path= /var/log/ansible.log #指定一个存储Ansible日志的文件,Ansible系统默认是不记录日志的,(一般建议开启,方便审计); 
    另外需要注意:
    Ansible支持多个目录方式,只要用冒号(:)隔开就可以,同时也会检查当前执行playbook位置下的./library目录
    执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录
    
    主机清单文件:/etc/ansible/hosts如下两种定义方式,引用时直接用名字,eg:mysql_test

    #1、 直接指明主机地址或主机名:
    ## green.example.com#
    # blue.example.com#
    # 192.168.100.1
    # 192.168.100.10
    #2、 定义一个主机组[组名]把地址或主机名加进去
    [mysql_test]
    192.168.253.159
    192.168.253.160
    192.168.253.153

    三:Ansible命令集;

    /usr/bin/ansible#Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行

    /usr/bin/ansible-doc # Ansible 模块功能查看工具

    /usr/bin/ansible-galaxy # 下载/上传优秀代码或Roles模块 的官网平台,基于网络的

    /usr/bin/ansible-playbook#Ansible 定制自动化的任务集编排工具

    /usr/bin/ansible-pull # Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)

    /usr/bin/ansible-vault # Ansible 文件加密工具

    /usr/bin/ansible-console # Ansible基于Linux Consoble界面可与用户交互的命令执行工具

    其中最常用的就是ansible和ansible-playbook,用法都差不多,选项很多,用ansible/ansible-play  --help或者查man帮助文档都能看到,这里就不过多介绍,在接下来的模块实例中会做一些相关的操作;
    用法:ansible <host-pattern> [-f forks] [-m modulename] [-a args]
    <host-pattern>:主机清单列表名;
     [-f forks]:并发数;
    [-m modulename]:指定模块,默认是command;
    [-a args]:模块参数;

    四:常用模块;

    1、ping:主机连通性测试
    eg:ansible mysql-test -m ping

    2command在远程主机执行命令; 不支持|管道命令 ;注意command模块很多不支持:管道|><、;、&可以用shell模块代替;

    常用选项:

    chdir #在执行命令之前,先切换目录

    creates #接一个文件名,当这个文件存在,则不执行,可用于判断

    executable # 切换shell来执行命令,需要使用命令的绝对路径

    free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。

    removes # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断

    eg:ansible mysql-test -mcommand -a "ip a" #-a后面接上要在远程主机上执行的命令;
    ansible mysql-test -m command -a "chdir=/app ls" #ls查看远程主机上的/app目录
    ansible mysql-test -m command -a"creates=/app/b  touch /app/b " #若是/app/存在文件b则后面命令不执行,若不存在,则创建之;
    ansible mysql-test -m command -a"removes=/app/b  touch /app/1 "--》存在就执行,不存在就不执行

    3shell在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等 :

    eg:
    ansible mysql-test -m shell -a "cat /etc/passwd|grep '^root'" #远程执行查看passwd文件内容过滤出行首是root的用户信息;

    4copy:复制文件到远程主机,可以改权限等

    常用选项:

    backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no

    content:用于替代“src”,可以直接设定指定文件的值

    dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

    directory_mode:递归设定目录的权限,默认为系统默认权限

    force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

    others:所有的file模块里的选项都可以在这里使用

    src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync 

    用法:

    (1) 复制文件

    -a “src= dest= ”

    eg:
    ansible mysql-test -m copy -a "src=ip.log dest=/app/ mode=644" #还可以修改权限

    (2) 给定内容生成文件

    -a "content= dest= "

    eg:
    ansible mysql-test -m copy -a "content=hello  dest=/app/sun  mode=644" #在远程主机上的/app/下创建一个内容是“hello”的sun文件;

    5file:设置文件属性;

    常用选项:

    force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

    group:定义文件/目录的属组mode:定义文件/目录的权限

    owner:定义文件/目录的属主path:必选项,定义文件/目录的路径

    recurse:递归设置文件的属性,只对目录有效src:被链接的源文件路径,只应用于state=link的情况

    dest:被链接到的路径,只应用于state=link的情况

    state:

    directory:如果目录不存在,就创建目录

    file:即使文件不存在,也不会被创建

    link:创建软链接

    hard:创建硬链接

    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

    absent:删除目录、文件或者取消链接文件


    创建目录:-a “path=  state=directory”

    创建链接文件:-a “path=  src=  state=link”

    删除文件:-a “path=  state=absent”

    eg:
    ansible mysql-test -m file -a "path=/app/httpd.bz2 src=/root/httpd-2.4.27 state=link" #注意src的文件远程主机上必须有,path的路径必须有,后面的文件可以是新创建的名;
    ansible mysql-test -m file -a "dest=/app/httpd.sjjsrc=/root/httpd-2.4.27 state=link";#创建软连接
    ansible mysql-test -m file -a "path=/app/httpd.sjj state=absent";#删除/app/httpd.sjj文件;

    6fetch从远程某主机获取文件到本地:----》常用于对比是否有不一样的文件

    常用选项:

    dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile

    src:在远程拉取的文件,并且必须是一个file,不能是目录

    eg:
    ansible mysql-test -mfetch -a 'src=/app/fdisk09.sh dest=/root'  #从web组上远程主机中/app/fdisk09.sh拷贝到/root下,会自动生成以主机ip为名的目录,下面是app目录,然后是fdisk09.sh;(自动递归创建)

    7、cron 管理cron计划任务-a “”: 设置管理节点生成定时任务

    action:

    cron backup= # 如果设置,创建一个crontab备份 【yes|no】

    cron_file= #如果指定, 使用这个文件cron.d,而不是单个用户

    crontab:

    day= #日应该运行的工作( 1-31, *, */2, )

    hour= # 小时 ( 0-23, *, */2, )

    minute= #分钟( 0-59, *, */2, )

    month= # 月( 1-12, *, /2, )

    weekday # 周 ( 0-6 for Sunday-Saturday,, )

    job= #指明运行的命令是什么

    name= #定时任务描述

    reboot # 任务在重启时运行,不建议使用,建议使用special_time

    special_time#特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)

    state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务

    user # 以哪个用户的身份执行

    eg:
    ansible mysql-test -m cron -a "name='ntpupdate every 5min' minute=*/5 job='/sbin/ntpdate 172.17.0.1 &> /dev/null'"
    ansible mysql-test -m shell -a "crontab -l" #查看一下上面的定义
    8、service:服务程序管理;

    常用选项:

    arguments #命令行提供额外的参数

    enabled #设置开机启动。

    name= #服务名称

    runlevel #开机启动的级别,一般不用指定。

    sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。

    state #started启动服务, stopped停止服务, restarted重启服务,reloaded重载配置

    9、yum:安装软件

    常用选项:

    conf_file #设定远程yum安装时所依赖的配置文件。如配置文件没有在默认的位置。

    disable_gpg_check #是否禁止GPG checking,只用于`present‘ or`latest’。

    disablerepo #临时禁止使用yum库。 只用于安装或更新时;

    Enablerepo  #临时使用的yum库。只用于安装或更新时;

    name=    #所安装的包的名称

    state=      #present安装, latest安装最新的, absent 卸载软件

    update_cache #强制更新yum的缓存。 

    10、user模块管理用户模块,管理用户帐号action:user

    常用选项:

    comment # 用户的描述信息

    createhome # 是否创建家目录

    force # 在使用state=absent,行为与userdel –force一致.

    group # 指定基本组

    groups # 指定附加组,如果指定为(groups=)表示删除所有组

    home # 指定用户家目录

    move_home # 如果设置为home=时, 试图将用户主目录移动到指定的目录

    name # 指定用户名

    non_unique # 该选项允许改变非唯一的用户ID值

    password # 指定用户密码

    remove # 在使用state=absent时, 行为是与userdel –remove一致

    shell # 指定默认shell

    state # 设置帐号状态,默认是创建,指定值为absent表示删除

    system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户

    uid # 指定用户的uid

    update_password # 更新用户密码

    eg:
    ansible mysql-test -m user -a "name=tom comment='a good boy' uid=1222 shell=/bin/sh home=/home/tomhome" #远程创建用户
    11、group用户组模块,添加或删除组action:group

    常用选项:

    gid # 设置组的GID号

    name= # 管理组的名称

    state # 指定组状态,默认为创建,设置值为absent为删除

    system # 设置值为yes,表示为创建系统组 

    12、script:在指定节点运行服务端的脚本 ;

    eg:
    #在本地写一个脚本,(加不加执行权限都一样)
    #!/bin/bash
     
    date>> /tmp/sjj.log
    echo"hello" >> /tmp/sjj.log
    然后执行:
    ansible mysql-test -m script -a "/root/shell.sh"  #在web主机列表中的主机上都会生成/tmp/sjj.log文件;

    13setup模块主要用于获取主机信息

    ansiblefacts组件采集被管理机器的信息,setup模块可以查机器上所有facts信息,可通过filter过滤指定信息;整个facts信息被包装在一个JSON格式的数据结构中;

    facts是內建变量,经常使用的一个参数是filter参数在playbooks里经常会用到的一个参数gather_facts

    eg:
    #ansible10.212.52.252 -m setup -a 'filter=ansible_*_mb'  #查看主机内存信息
    #ansible10.212.52.252 -m setup -a 'filter=ansible_eth[0-2]'  #查看地接口为eth0-2的网卡信息







    展开全文
  • 运维自动化工具对比

    2017-08-31 10:41:41
    当前一些主流的运维自动化相关的开源工具总结如下表所示: 产品类型 典型产品及简介 ...

    当前一些主流的运维自动化相关的开源工具总结如下表所示:

    产品类型

    典型产品及简介

    官方网站或者资料网站

    安装部署

    Kickstart:对红帽Linux/Fedora等发行版的自动化安装方式,简单地讲就是让系统在安装过程中从一个ks.cfg配置文件中自动获取所有需要配置的参数。源于Anaconda项目。

    http://pykickstart.readthedocs.io/en/latest/

    Cobbler:为了实现快速网络安装环境的Linux安装服务器,可以为数量众多的Linux服务自动化执行任务。

    http://cobbler.github.io/

    Spacewalk:针对红帽Linux/Fedora等发行版的软件更新管理软件,同时也提供预备和监控的功能。这个项目衍生了红帽NetworkSatellite产品。

    http://spacewalk.redhat.com/

    配置管理

    ControlTier:一个开源、跨平台的构建/部署服务器的自动化框架,可以在多个节点、多个应用层上进行服务扩展及管理等工作。

    http://www.controltier.org/

    Func:全称为Fedora Unified NetworkControllerFedora统一网络控制器,用于自动化的远程服务器管理。

    https://fedoraproject.org/wiki/Infrastructure/Fedorahosted-retirement

    Ansible:基于Python开发,可实现批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是Ansible所运行的模块,Ansible只是提供一种框架。相对适合轻量级运维自动化配置。

    https://github.com/ansible/ansible/

    Puppet:基于ruby开发,是一种LinuxUNIXWindows平台的集中配置管理系统,用Puppet自动的声明语言自动化重现任意的系统配置。通常适合中小型规模的运维(例如几百台以上服务器规模)自动化配置。

    https://puppet.com/

    SaltSatack:是基于Python开发的自动化批量配置管理工具,具备配置管理、远程执行、监控等功能。通常适合中小型规模的运维自动化配置。

    https://saltstack.com/

    监控

    Cacti:是一个用 rrdtool 来画图的网络监控系统。

    http://www.cacti.net/

    Nagios:一个强大的监控预警系统,可以监控系统、应用、服务以及各种进程的运行状况,并提供了多种警报机制。

    https://www.nagios.org/

    Zabbix:用于监控网络上的服务器/服务以及其他网络设备的状态的网络管理系统,后台基于C,前台由PHP编写,可与多种数据库搭配使用,提供各种实时报警机制。

    http://www.zabbix.com/

    OpenNMS:一个网络管理应用平台,可以自动识别网络服务、事件管理与警报、性能测量等任务。

    https://www.opennms.org

    Zenoss Core:一个基于Zope应用服务器的应用/服务器/网络网络管理平台,提供了Web管理界面,可监控可用性、配置、性能和各种事件。

    https://community.zenoss.com/

    参考:

    1、《系统运维全面解析-技术、管理与实践》12.4节

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29734436/viewspace-2144359/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/29734436/viewspace-2144359/

    展开全文
  • SaltStack是一个服务器基础架构集中管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块...

    一、基础介绍

    1、简介

    SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

    通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。

    2、特性

    (1)、部署简单、方便;
    (2)、支持大部分UNIX/Linux及Windows环境;
    (3)、主从集中化管理;
    (4)、配置简单、功能强大、扩展性强;
    (5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
    (6)、支持API及自定义模块,可通过Python轻松扩展。

    3、说明

    Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet和Chef的功能,更加强大,更适合大规模批量管理服务器,并且它比Puppet 更容易配置。
    三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。
    支持系统:大多数都支持,windows 上不支持安装 master。

    二、SaltStack部署及案例—httpd

    案例一:rpm部署安装httpd
    1.修改配置文件
    [root@server1 ~]# vim /etc/salt/master
     534 file_roots:
     535   base:
     536     - /srv/salt
    [root@server1 ~]# mkdir /srv/salt
    [root@server1 ~]# /etc/init.d/salt-master restart
    
    2.部署脚本
    [root@server1 ~]# cd /srv/salt/
    [root@server1 salt]# mkdir httpd
    [root@server1 salt]# cd httpd/
    [root@server1 httpd]# vim apache.sls
    apache-install:
      pkg.installed:
        - pkgs:
          - httpd
          - php
    
    3.测试、执行推送
    [root@server1 httpd]# salt server2 state.sls httpd.apache test=true
    

    这里写图片描述

    [root@server1 httpd]# salt server2 state.sls httpd.apache
    

    这里写图片描述

    4.minion端查看,安装成功
    [root@server2 ~]# rpm -q httpd php
    httpd-2.2.15-29.el6_4.x86_64
    php-5.3.3-26.el6.x86_64
    

    另一种方法:

    [root@server1 httpd]# vim apache.sls
    httpd:
      pkg.installed
    
    php:
      pkg.installed
    

    案例二:部署安装&启动httpd
    1.部署脚本
    [root@server1 httpd]# vim apache.sls 
    apache-install:
      pkg.installed:
        - pkgs:
          - httpd
          - php
    
    apache-service:
      service.running:
        - name: httpd
        - enable: True
    
    2.执行推送
    [root@server1 httpd]# salt server2 state.sls httpd.apache
    

    这里写图片描述

    2.minion端查看,开启80端口,启动成功

    这里写图片描述

    案例三:安装&启动&配置httpd
    1.在httpd中创建files目录用于存放httpd配置文件
    [root@server1 ~]# cd /srv/salt/httpd/
    [root@server1 httpd]# ls
    apache.sls
    [root@server1 httpd]# mkdir files
    
    2.minion将配置文件传给master
    [root@server2 ~]# scp /etc/httpd/conf/httpd.conf server1:/srv/salt/httpd/files
    

    这里写图片描述

    3.master中更改httpd的端口号为8080
    [root@server1 files]# pwd
    /srv/salt/httpd/files
    [root@server1 files]# vim httpd.conf 
     136 Listen 8080
    
    4.部署脚本
    [root@server1 httpd]# vim apache.sls 
    apache-install:
      pkg.installed:
        - pkgs:
          - httpd
          - php
    
    apache-config:
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://httpd/files/httpd.conf
        - mode: 644
        - user: root
        - group: root
    
    apache-service:
      service.running:
        - name: httpd
        - enable: True
    
    5.执行推送
    [root@server1 httpd]# salt server2 state.sls httpd.apache
    

    这里写图片描述

    6.minion端查看,minion(server2)的配置文件端口改为8080,但8080端口未开启,并未加载服务,只有当重启httpd服务时,才会成功加载服务

    这里写图片描述

    [root@server2 ~]# vim /etc/httpd/conf/httpd.conf 
    

    这里写图片描述

    案例四:安装&启动&配置&加载httpd
    注意:只有执行更改配置文件操作后,才会生效
    方法一:
    [root@server1 httpd]# vim apache.sls 
    apache-install:
      pkg.installed:
        - pkgs:
          - httpd
          - php
    
    apache-config:
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://httpd/files/httpd.conf
        - mode: 644
        - user: root
        - group: root
    
    apache-service:
      service.running:
        - name: httpd
        - enable: True
        - reload: True
        - watch:
          - file: apache-config
    
    方法二:
    [root@server1 httpd]# vim apache.sls 
    apache-install:
      pkg.installed:
        - pkgs:
          - httpd
          - php
    
      service.running:
        - name: httpd
        - enable: True
        - reload: True
        - watch:                 ##监控触发
          - file: /etc/httpd/conf/httpd.conf
    
    /etc/httpd/conf/httpd.conf:
      file.managed:
        - source: salt://httpd/files/httpd.conf
        - mode: 644
        - user: root
        - group: root
    
    案例五:安装&启动&配置&加载httpd—文件分离
    1.安装
    [root@server1 httpd]# ls
    apache.sls  files
    [root@server1 httpd]# mv apache.sls install.sls
    [root@server1 httpd]# vim service.sls
    apache-install:
      pkg.installed:
        - pkgs:
          - httpd
          - php
    [root@server1 httpd]# salt server2 state.sls httpd.install
    

    这里写图片描述

    2.加载服务
    [root@server1 httpd]# vim service.sls 
    /etc/httpd/conf/httpd.conf:
      file.managed:
        - source: salt://httpd/files/httpd.conf
        - mode: 644
        - user: root
        - group: root
    
    apache-service:
      service.running:
        - name: httpd
        - enable: True
        - reload: True
        - watch:
          - file: /etc/httpd/conf/httpd.conf
    [root@server1 httpd]# salt server2 state.sls httpd.service
    

    这里写图片描述

    3.安装&加载服务

    将以上两个文件结合起来,重新写入service.sls文件

    [root@server1 httpd]# vim service.sls 
    include:
      - httpd.install
    
    /etc/httpd/conf/httpd.conf:
      file.managed:
        - source: salt://httpd/files/httpd.conf
        - mode: 644
        - user: root
        - group: root
    
    apache.service:
      service.running:
        - name: httpd
        - enable: True
        - reload: True
        - watch:
          - file: /etc/httpd/conf/httpd.conf
    [root@server1 httpd]# salt server2 state.sls httpd.service
    

    这里写图片描述

    三、SaltStack部署及案例—源码编译并启动nginx

    1.源码编译nginx

    1>下载安装包到/srv/salt/nginx/files目录下
    [root@server1 ~]# cd /srv/salt/
    [root@server1 salt]# mkdir nginx
    [root@server1 salt]# ls
    httpd  nginx
    [root@server1 salt]# cd nginx/
    [root@server1 nginx]# mkdir files
    [root@server1 nginx]# cd files/
    [root@server1 files]# ls
    nginx-1.12.0.tar.gz
    
    
    2>部署脚本
    [root@server1 nginx]# vim install.sls
    
    nginx-install:
      pkg.installed:
        - pkgs:
          - gcc
          - pcre-devel
          - openssl-devel
    
      file.managed:
        - name: /mnt/nginx-1.12.0.tar.gz
        - source: salt://nginx/files/nginx-1.12.0.tar.gz
    
      cmd.run:
        - name: cd /mnt && tar zxf nginx-1.12.0.tar.gz && cd nginx-1.12.0 && sed -i.bak 's/#define NGINX_VER          "nginx\/" NGINX_VERSION/#define NGINX_VER          "nginx"'/g src/core/nginx.h && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
        - creates: /usr/local/nginx
    [root@server1 nginx]# salt server3 state.sls nginx.install
    
    
    3>执行推送
    [root@server1 nginx]# salt server3 state.sls nginx.install
    
    

    这里写图片描述

    4>测试
    minion端(server3)查看进程,则编译成功

    这里写图片描述

    2.启动(触发)

    1>创建make.sls安装包
    make.sls中包含源码编译必须安装的插件
    [root@server1 ~]# cd /srv/salt/
    [root@server1 salt]# mkdir pkgs
    [root@server1 salt]# cd pkgs/
    [root@server1 pkgs]# vim make.sls 
    make:
      pkg.installed:
        - pkgs:
          - gcc
          - pcre-devel
          - openssl-devel
    
    2>nginx源码编译脚本
    [root@server1 salt]# cd nginx/
    [root@server1 nginx]# vim install.sls 
    include:
      - pkgs.make
      - users.nginx
    
    nginx-install:
      file.managed:
        - name: /mnt/nginx-1.12.0.tar.gz
        - source: salt://nginx/files/nginx-1.12.0.tar.gz
    
      cmd.run:
        - name: cd /mnt && tar zxf nginx-1.12.0.tar.gz && cd nginx-1.12.0 && sed -i.bak 's/#define NGINX_VER          "nginx\/" NGINX_VERSION/#define NGINX_VER          "nginx"'/g src/core/nginx.h && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
        - creates: /usr/local/nginx
    
    3>创建nginx用户相关信息脚本
    nginx-group:
      group.present:
      - name: nginx
      - gid: 800
    
    nginx-user:
      user.present:
        - name: nginx
        - shell: /sbin/nologin
        - home: /usr/local/nginx
        - createhome: false
        - uid: 800
        - gid: 800
    
    4>nginx管理脚本
    [root@server1 nginx]# vim service.sls 
    include:
      - nginx.install
      - users.nginx
    /usr/local/nginx/conf/nginx.conf:
      file.managed:
        - source: salt://nginx/files/nginx.conf
    
    nginx-service:
      file.managed:
        - name: /etc/init.d/nginx
        - source: salt://nginx/files/nginx
        - mode: 755
    
      service.running:
        - name: nginx
        - reload: True
        - watch:
          - file: /usr/local/nginx/conf/nginx.conf
    
    5>nginx启脚本
    将server2的httpd的启动脚本拷贝给server3,进行修改为nginx启动脚本
    [root@server2 ~]# scp /etc/init.d/httpd server3:/etc/init.d/nginx
    
    

    这里写图片描述
    这里写图片描述
    在server3主机上进行nginx启动脚本的测试
    这里写图片描述
    这里写图片描述
    将启动脚本拷贝到master的目录下:

    [root@server3 ~]# scp /etc/init.d/nginx server1:/srv/salt/nginx/files
    
    
    6>master上修改nginx的配置文件
    [root@server3 ~]# scp /usr/local/nginx/conf/nginx.conf server1:/srv/salt/nginx/files
    

    这里写图片描述

    3.执行推送,进行测试

    [root@server1 nginx]# salt server3 state.sls nginx.service
    

    这里写图片描述

    四、SaltStack部署—多节点推送实现haproxy负载均衡

    实验环境:

    master:

    server1:172.25.51.1

    minion:

    server1:172.25.51.1
    server2:172.25.51.2
    server3:172.25.51.3

    具体部署如下:

    1.添加并配置server1节点为minion
    [root@server1 ~]# yum install -y salt-minion -y
    [root@server1 ~]# vim /etc/salt/minion
     17 master: 172.25.51.1
    [root@server1 ~]# /etc/init.d/salt-minion start
    [root@server1 ~]# salt-key -L
    [root@server1 ~]# salt-key -a server1
    

    这里写图片描述

    2.配置yum源(BalanceLoader),使其具有haproxy安装包
    [root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo 
    [LoadBalancer]
    name=LoadBalancer
    baseurl=http://172.25.51.250/rhel6.5/LoadBalancer
    gpgcheck=0
    
    

    这里写图片描述

    3.部署haproxy脚本,并执行推送于server1
    [root@server1 ~]# cd /srv/salt/
    [root@server1 salt]# ls
    httpd  nginx  pkgs  users
    [root@server1 salt]# mkdir haproxy
    [root@server1 salt]# cd haproxy/
    [root@server1 haproxy]# vim install.sls
    haproxy-install:
      pkg.installed:
        - pkgs:
          - haproxy
    [root@server1 haproxy]# salt server1 state.sls haproxy.install
    

    这里写图片描述

    4.部署安装&启动脚本
    [root@server1 haproxy]# mkdir files
    [root@server1 haproxy]# cd files/
    [root@server1 files]# cp /etc/haproxy/haproxy.cfg .
    [root@server1 files]# cd ..
    [root@server1 haproxy]# vim install.sls
    haproxy-install:
      pkg.installed:
        - pkgs:
          - haproxy
    
      file.managed:
        - name: /etc/haproxy/haproxy.cfg
        - source: salt://haproxy/files/haproxy.cfg
    
      service.running:
        - name: haproxy
        - reload: True
        - watch:
          - file: haproxy-install
    
    5.修改配置文件,负载均衡
    [root@server1 files]# vim haproxy.cfg 
    

    这里写图片描述

    6.base文件(高级推送)
    [root@server1 ~]# cd /srv/salt/
    [root@server1 salt]# vim top.sls
    
    base:
      'server1':
        - haproxy.install
      'server2':
        - httpd.service
      'server3':
        - nginx.service
    
    7.测试:

    1>关闭服务

    [root@server2 ~]# /etc/init.d/httpd stop
    [root@server3 ~]# /etc/init.d/nginx stop
    

    2>配置测试页

    [root@server2 ~]# cd /var/www/html/
    [root@server2 html]# vim index.html
    server2
    
    [root@server3 ~]# cd /usr/local/nginx/html/
    [root@server3 html]# ls
    50x.html  index.html
    [root@server3 html]# vim index.html 
    server3
    
    3.执行高级推送
    [root@server1 salt]# salt '*' state.highstate
    

    这里写图片描述

    4.网页访问172.25.51.1,不断刷新页面,实现负载均衡

    这里写图片描述
    这里写图片描述

    展开全文
  • 自动化运维-系统部署

    2018-12-13 11:05:07
    网站业务上线,需要运维人员在短时间内完成几百台服务器部署,包括系统安装、系统初始、软件的安装与配置、性能的监 控......
  • 当前一些主流的运维自动化相关的开源工具总结如下表所示: 产品类型 典型产品及简介 官方网站或者资料网站 安装部署 Kickstart:对红帽Linux/Fedora等发行版的自动...

    当前一些主流的运维自动化相关的开源工具总结如下表所示:

    产品类型

    典型产品及简介

    官方网站或者资料网站

    安装部署

    Kickstart:对红帽Linux/Fedora等发行版的自动化安装方式,简单地讲就是让系统在安装过程中从一个ks.cfg配置文件中自动获取所有需要配置的参数。源于Anaconda项目。

    http://pykickstart.readthedocs.io/en/latest/

    Cobbler:为了实现快速网络安装环境的Linux安装服务器,可以为数量众多的Linux服务自动化执行任务。

    http://cobbler.github.io/

    Spacewalk:针对红帽Linux/Fedora等发行版的软件更新管理软件,同时也提供预备和监控的功能。这个项目衍生了红帽NetworkSatellite产品。

    http://spacewalk.redhat.com/

    配置管理

    ControlTier:一个开源、跨平台的构建/部署服务器的自动化框架,可以在多个节点、多个应用层上进行服务扩展及管理等工作。

    http://www.controltier.org/

    Func:全称为Fedora Unified NetworkController,Fedora统一网络控制器,用于自动化的远程服务器管理。

    https://fedoraproject.org/wiki/Infrastructure/Fedorahosted-retirement

    Ansible:基于Python开发,可实现批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是Ansible所运行的模块,Ansible只是提供一种框架。相对适合轻量级运维自动化配置。

    https://github.com/ansible/ansible/

    Puppet:基于ruby开发,是一种Linux、UNIX、Windows平台的集中配置管理系统,用Puppet自动的声明语言自动化重现任意的系统配置。通常适合中小型规模的运维(例如几百台以上服务器规模)自动化配置。

    https://puppet.com/

    SaltSatack:是基于Python开发的自动化批量配置管理工具,具备配置管理、远程执行、监控等功能。通常适合中小型规模的运维自动化配置。

    https://saltstack.com/

    监控

    Cacti:是一个用 rrdtool 来画图的网络监控系统。

    http://www.cacti.net/

    Nagios:一个强大的监控预警系统,可以监控系统、应用、服务以及各种进程的运行状况,并提供了多种警报机制。

    https://www.nagios.org/

    Zabbix:用于监控网络上的服务器/服务以及其他网络设备的状态的网络管理系统,后台基于C,前台由PHP编写,可与多种数据库搭配使用,提供各种实时报警机制。

    http://www.zabbix.com/

    OpenNMS:一个网络管理应用平台,可以自动识别网络服务、事件管理与警报、性能测量等任务。

    https://www.opennms.org

    Zenoss Core:一个基于Zope应用服务器的应用/服务器/网络网络管理平台,提供了Web管理界面,可监控可用性、配置、性能和各种事件。

    https://community.zenoss.com/

    展开全文
  • 运维自动化工具ansible

    千次阅读 2018-02-04 22:40:19
    企业级自动化运维工具应用实战ansible 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套...
  • 但凡服务器上了一定规模(百台以上),普通的ssh登录管理的模式就越来越举步维艰。试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,如果没有一种自动化...你需要一款基础设施自动化工具,希
  • 运维自动化——系统部署

    千次阅读 2018-05-26 08:47:39
    运维自动化发展历程及技术应用安装程序CentOS的系统安装 系统启动流程: 引导加载器 - &gt;内核(initramfs的) - &gt;根文件系统 - &gt; / sbin目录/初始化anaconda:系统安装程序GUI:图形窗口tui:...
  • 运维自动化概述

    2019-12-30 20:30:19
    运维自动化概述 运维与自动化概述 一:运维工作内容分类: 1).机房运维(负责服务器上下架、IP配置与划分、服务器打标签、机房定期巡检、服务器故障报修、服务器硬件监控) 2).基础设施运维(系统安装及初始化、...
  • Windows下安装自动化部署工具Fabric

    千次阅读 2018-05-23 16:49:30
    Windows下安装自动化部署工具Fabric 部署应用程序用FTP还是SCP还是rsync复制文件?如果你需要手动复制,用一次两次还行,一天如果部署50次不但慢、效率低,而且容易出错。 正确的部署方式是使用工具配合脚本完成...
  • 四、运维自动化常用工具 五、运维自动化对运维人员要求 注,最近在学习运维自动化相关专题,现在总结一下与大家分享一下。(如有雷同,纯属意外) 一、运维自动化背景 1.问题引入 近期一网站业务需要上线,预计短...
  • CheungSSH 中国人自主研发的Linux运维自动化管理服务器软件 管理上千台服务器 自动化运维软件 批量管理服务器 管理Linux服务器软件 运维自动化工具 开源堡垒机 Ansible Slatstack Puppet
  • 自动化运维工具

    2018-07-11 14:55:05
    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
  • Linux运维自动化概述

    2015-04-14 10:57:50
    一、运维自动化背景1、为什么需要运维自动化 近期一网站业务需要上线,预计短时间内会有几百台服务器要上线, 部署几百台服务器, 以运维部目前有限的人手, 根本不够。怎么办?解决方案: 采取自动化安装、配置及...
  • 3.1 运维自动化之系统部署

    千次阅读 2018-05-28 20:59:10
    使用kickstart文件实现单机自动化安装   kickstart 文件 的格式与 ~/anaconda-ks.cfg 一样,可以修改其中内容来生成 kickstart 文件。 [root@CentOS6 ~]# cat anaconda-ks.cfg # Kickstart file automatically ...
  • 开源运维自动化平台-opendevops

    千次阅读 2019-05-27 14:21:31
    开源运维自动化平台-opendevops 简介 官网 | Github | 在线体验 CODO是一款为用户提供企业多混合云、自动化运维、完全开源的云管理平台。 CODO前端基于Vue iview开发、为用户提供友好的操作界面,增强用户体验。 ...
  • 通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务...
  • 1.什么是自动安装脚本? 自动安装脚本就是在一个脚本当中写入服务器安装系统的一些数据和命令 当调用这个脚本的时候就会自动给服务器装系统 2.为什么要使用自动安装脚本? 如果企业中同时有多台服务器需要安装...
  • 本次分享将为大家介绍在 ECS 实例内部署与更新应用、监控系统或应用的运行状态、以及批量操作多个实例内部系统的这些场景下,如何使用 ECS 云助手实现云上自动化运维。 作者 | 阿里云技术专家 朱士松 来源 | 弹性...
  • Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
  • ansible自动化运维工具

    2019-11-22 20:24:09
    Ansible是一款运维自动化工具,功能是帮助运维实现IT自动化、降低人为操作失误、提高业务自动化率、提升一运维工作效率。 常用于软件部署自动化、配置自动化、管理自动化、系统化系统人物、持续集成、;零宕机平滑...
  • Linux高级篇--运维自动化之ANSIBLE.md

    千次阅读 2018-10-05 14:40:31
    Linux高级篇–运维自动化之ASIBLE 本章概要 Ansible相关介绍 Ansible命令使用 Ansible常用模块详解 YAML语法简介 Ansible playbook基础 Playbook变量、tags、handlers使用 Playbook模板templates ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,808
精华内容 5,123
关键字:

windows运维自动化部署工具